Libraries/Graphics/src/include/Graphics/Object.h
Go to the documentation of this file.
1 /****
2  * Object.h
3  *
4  * Copyright 2021 mikee47 <mike@sillyhouse.net>
5  *
6  * This file is part of the Sming-Graphics Library
7  *
8  * This library is free software: you can redistribute it and/or modify it under the terms of the
9  * GNU General Public License as published by the Free Software Foundation, version 3 or later.
10  *
11  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13  * See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along with this library.
16  * If not, see <https://www.gnu.org/licenses/>.
17  *
18  * @author: May 2021 - mikee47 <mike@sillyhouse.net>
19  *
20  ****/
21 
22 #pragma once
23 
24 #include "Asset.h"
25 #include "Blend.h"
28 #include <FlashString/Stream.hpp>
30 #include <bitset>
31 
32 namespace Graphics
33 {
34 #define GRAPHICS_OBJECT_KIND_MAP(XX) \
35  XX(Custom) \
36  XX(Point) \
37  XX(Rect) \
38  XX(FilledRect) \
39  XX(Line) \
40  XX(Polyline) \
41  XX(Circle) \
42  XX(FilledCircle) \
43  XX(Ellipse) \
44  XX(FilledEllipse) \
45  XX(Arc) \
46  XX(FilledArc) \
47  XX(Drawing) \
48  XX(Image) \
49  XX(Glyph) \
50  XX(Text) \
51  XX(Scene) \
52  XX(Reference) \
53  XX(Surface) \
54  XX(Copy) \
55  XX(Scroll)
56 
57 class MetaWriter;
58 class Brush;
59 class Surface;
60 class FileImageSurface;
61 
65 class Renderer : public LinkedObjectTemplate<Renderer>
66 {
67 public:
70 
75  Renderer(const Location& location) : location(location)
76  {
77  }
78 
79  virtual ~Renderer()
80  {
81  }
82 
87  virtual bool execute(Surface& surface) = 0;
88 
89 protected:
91 };
92 
96 class Object : public LinkedObjectTemplate<Object>, public Meta
97 {
98 public:
101 
102  enum class Kind {
103 #define XX(name) name,
105 #undef XX
106  };
107 
108  virtual Kind kind() const = 0;
109 
117  virtual Renderer* createRenderer(const Location& location) const = 0;
118 
119  bool operator==(const Object& other) const
120  {
121  return this == &other;
122  }
123 
124  /* Meta */
125 
126  virtual String getTypeStr() const;
127  virtual void write(MetaWriter& meta) const = 0;
128 };
129 
130 template <Object::Kind object_kind> class ObjectTemplate : public Object
131 {
132 public:
133  Kind kind() const override
134  {
135  return object_kind;
136  }
137 };
138 
143 
150 class ReferenceObject : public ObjectTemplate<Object::Kind::Reference>
151 {
152 public:
153  ReferenceObject(Object& object, const Rect& pos, const Blend* blend = nullptr)
154  : object(object), pos(pos), blend{blend}
155  {
156  }
157 
158  void write(MetaWriter& meta) const override
159  {
160  meta.write("pos", pos);
161  meta.write("object", object);
162  }
163 
164  Renderer* createRenderer(const Location& location) const override;
165 
168  const Blend* blend;
169 };
170 
174 class PointObject : public ObjectTemplate<Object::Kind::Point>
175 {
176 public:
177  PointObject(const Brush& brush, const Point& point) : brush(brush), point(point)
178  {
179  }
180 
181  void write(MetaWriter& meta) const override
182  {
183  meta.write("brush", brush);
184  meta.write("point", point);
185  }
186 
187  Renderer* createRenderer(const Location& location) const override;
188 
191 };
192 
196 class RectObject : public ObjectTemplate<Object::Kind::Rect>
197 {
198 public:
199  RectObject(const Pen& pen, const Rect& rect, uint8_t radius = 0) : pen(pen), rect(rect), radius(radius)
200  {
201  }
202 
203  RectObject(int x0, int y0, int w, int h, Color color) : RectObject(color, Rect(x0, y0, w, h))
204  {
205  }
206 
207  void write(MetaWriter& meta) const override
208  {
209  meta.write("pen", pen);
210  meta.write("rect", rect);
211  if(radius != 0) {
212  meta.write("radius", radius);
213  }
214  }
215 
216  Renderer* createRenderer(const Location& location) const override;
217 
220  uint8_t radius{0};
221 };
222 
226 class FilledRectObject : public ObjectTemplate<Object::Kind::FilledRect>
227 {
228 public:
229  FilledRectObject(Brush brush, const Rect& rect, uint8_t radius = 0) : brush(brush), rect(rect), radius(radius)
230  {
231  }
232 
233  FilledRectObject(int x0, int y0, int w, int h, Color color) : FilledRectObject(color, Rect(x0, y0, w, h))
234  {
235  }
236 
237  void write(MetaWriter& meta) const override
238  {
239  meta.write("brush", brush);
240  meta.write("rect", rect);
241  if(radius != 0) {
242  meta.write("radius", radius);
243  }
244  }
245 
246  Renderer* createRenderer(const Location& location) const override;
247 
250  uint8_t radius{0};
251 };
252 
256 class LineObject : public ObjectTemplate<Object::Kind::Line>
257 {
258 public:
260  {
261  }
262 
263  LineObject(Pen pen, Point pt1, Point pt2) : pen(pen), pt1(pt1), pt2(pt2)
264  {
265  }
266 
267  LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2) : LineObject(pen, Point(x1, y1), Point(x2, y2))
268  {
269  }
270 
271  LineObject(int x0, int y0, int x1, int y1, Color color) : LineObject(color, Point(x0, y0), Point(x1, y1))
272  {
273  }
274 
275  void write(MetaWriter& meta) const override
276  {
277  meta.write("pen", pen);
278  meta.write("pt1", pt1);
279  meta.write("pt2", pt2);
280  }
281 
282  Renderer* createRenderer(const Location& location) const override;
283 
284  Pen pen{};
285  Point pt1{};
286  Point pt2{};
287 };
288 
298 class PolylineObject : public ObjectTemplate<Object::Kind::Polyline>
299 {
300 public:
301  PolylineObject(Pen pen, size_t count) : pen(pen), numPoints(count)
302  {
303  this->points.reset(new Point[numPoints]);
304  }
305 
306  template <typename... ParamTypes>
307  PolylineObject(Pen pen, ParamTypes... params) : pen(pen), numPoints(sizeof...(ParamTypes))
308  {
309  this->points.reset(new Point[sizeof...(ParamTypes)]{params...});
310  }
311 
312  PolylineObject(const RectObject& object) : PolylineObject(object.pen, object.rect, object.radius)
313  {
314  }
315 
316  PolylineObject(Pen pen, const Rect& rect, uint8_t radius) : pen(pen)
317  {
318  if(radius == 0) {
319  auto pt1 = rect.topLeft();
320  auto pt2 = rect.bottomRight();
321  points.reset(new Point[5]{
322  pt1,
323  {pt2.x, pt1.y},
324  pt2,
325  {pt1.x, pt2.y},
326  pt1,
327  });
328  numPoints = 5;
329  } else {
330  auto t = pen.width - 1;
331  points.reset(new Point[8]{
332  Point(rect.left() + radius, rect.top()),
333  Point(rect.right() - radius, rect.top()),
334  Point(rect.left() + radius, rect.bottom() - t),
335  Point(rect.right() - radius, rect.bottom() - t),
336  Point(rect.left(), rect.top() + radius),
337  Point(rect.left(), rect.bottom() - radius),
338  Point(rect.right() - t, rect.top() + radius),
339  Point(rect.right() - t, rect.bottom() - radius),
340  });
341  numPoints = 8;
342  connected = false;
343  }
344  }
345 
346  Point operator[](unsigned index) const
347  {
348  assert(index < numPoints);
349  return points[index];
350  }
351 
352  void write(MetaWriter& meta) const override
353  {
354  meta.write("pen", pen);
355  meta.writeArray("points", "Point", points.get(), numPoints);
356  }
357 
358  Renderer* createRenderer(const Location& location) const override;
359 
361  std::unique_ptr<Point[]> points;
363  bool connected{true};
364 };
365 
369 class CircleObject : public ObjectTemplate<Object::Kind::Circle>
370 {
371 public:
372  CircleObject(const Pen& pen, Point centre, uint16_t radius) : pen(pen), centre(centre), radius(radius)
373  {
374  }
375 
376  CircleObject(const Pen& pen, const Rect& rect) : CircleObject(pen, rect.centre(), std::min(rect.w, rect.h) / 2)
377  {
378  }
379 
380  CircleObject(int16_t x, int16_t y, uint16_t radius, Color color) : CircleObject(color, Point{x, y}, radius)
381  {
382  }
383 
387  Rect getRect() const
388  {
389  uint16_t dia = radius * 2;
390  return Rect(centre.x - radius, centre.y - radius, dia, dia);
391  }
392 
393  void write(MetaWriter& meta) const override
394  {
395  meta.write("pen", pen);
396  meta.write("centre", centre);
397  meta.write("radius", radius);
398  }
399 
400  Renderer* createRenderer(const Location& location) const override;
401 
405 };
406 
410 class FilledCircleObject : public ObjectTemplate<Object::Kind::FilledCircle>
411 {
412 public:
413  FilledCircleObject(Brush brush, Point centre, uint16_t radius) : brush(brush), centre(centre), radius(radius)
414  {
415  }
416 
417  FilledCircleObject(Brush brush, const Rect& rect)
418  : FilledCircleObject(brush, rect.centre(), std::min(rect.w, rect.h) / 2)
419  {
420  }
421 
422  FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
423  : FilledCircleObject(color, Point{x, y}, radius)
424  {
425  }
426 
430  Rect getRect() const
431  {
432  uint16_t dia = radius * 2;
433  return Rect(centre.x - radius, centre.y - radius, dia, dia);
434  }
435 
436  void write(MetaWriter& meta) const override
437  {
438  meta.write("brush", brush);
439  meta.write("centre", centre);
440  meta.write("radius", radius);
441  }
442 
443  Renderer* createRenderer(const Location& location) const override;
444 
448 };
449 
453 class EllipseObject : public ObjectTemplate<Object::Kind::Ellipse>
454 {
455 public:
456  EllipseObject(Pen pen, const Rect& rect) : pen(pen), rect(rect)
457  {
458  }
459 
461  : pen(pen), rect(centre, Size(a * 2, b * 2), Origin::Centre)
462  {
463  }
464 
465  void write(MetaWriter& meta) const override
466  {
467  meta.write("pen", pen);
468  meta.write("rect", rect);
469  }
470 
471  Renderer* createRenderer(const Location& location) const override;
472 
475 };
476 
480 class FilledEllipseObject : public ObjectTemplate<Object::Kind::FilledEllipse>
481 {
482 public:
483  FilledEllipseObject(const Brush& brush, const Rect& rect) : brush(brush), rect(rect)
484  {
485  }
486 
487  FilledEllipseObject(const Brush& brush, Point centre, uint16_t a, uint16_t b)
488  : brush(brush), rect(centre, Size(a * 2, b * 2), Origin::Centre)
489  {
490  }
491 
492  void write(MetaWriter& meta) const override
493  {
494  meta.write("brush", brush);
495  meta.write("rect", rect);
496  }
497 
498  Renderer* createRenderer(const Location& location) const override;
499 
502 };
503 
507 class ArcObject : public ObjectTemplate<Object::Kind::Arc>
508 {
509 public:
510  ArcObject(Pen pen, const Rect& rect, int16_t startAngle, int16_t endAngle)
511  : pen(pen), rect(rect), startAngle(startAngle), endAngle(endAngle)
512  {
513  }
514 
515  void write(MetaWriter& meta) const override
516  {
517  meta.write("pen", pen);
518  meta.write("rect", rect);
519  meta.write("startAngle", startAngle);
520  meta.write("endAngle", endAngle);
521  }
522 
523  Renderer* createRenderer(const Location& location) const override;
524 
527  int16_t startAngle;
528  int16_t endAngle;
529 };
530 
534 class FilledArcObject : public ObjectTemplate<Object::Kind::FilledArc>
535 {
536 public:
537  FilledArcObject(Brush brush, const Rect& rect, int16_t startAngle, int16_t endAngle)
538  : brush(brush), rect(rect), startAngle(startAngle), endAngle(endAngle)
539  {
540  }
541 
542  void write(MetaWriter& meta) const override
543  {
544  meta.write("brush", brush);
545  meta.write("rect", rect);
546  meta.write("startAngle", startAngle);
547  meta.write("endAngle", endAngle);
548  }
549 
550  Renderer* createRenderer(const Location& location) const override;
551 
554  int16_t startAngle;
555  int16_t endAngle;
556 };
557 
561 class ImageObject : public ObjectTemplate<Object::Kind::Image>
562 {
563 public:
564  ImageObject(Size size) : imageSize(size)
565  {
566  }
567 
568  void write(MetaWriter& meta) const override
569  {
570  meta.write("size", imageSize);
571  }
572 
573  Renderer* createRenderer(const Location& location) const override;
574 
575  Size getSize() const
576  {
577  return imageSize;
578  }
579 
580  uint16_t width() const
581  {
582  return imageSize.w;
583  }
584 
585  uint16_t height() const
586  {
587  return imageSize.h;
588  }
589 
593  virtual bool init() = 0;
594 
599  virtual PixelFormat getPixelFormat() const = 0;
600 
609  virtual size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const = 0;
610 
611 protected:
612  Size imageSize{};
613 };
614 
619 {
620 public:
622  {
623  stream.reset(source);
624  }
625 
626  StreamImageObject(const FSTR::String& image) : StreamImageObject(new FSTR::Stream(image), {})
627  {
628  }
629 
630  void write(MetaWriter& meta) const override
631  {
632  ImageObject::write(meta);
633  if(stream) {
634  meta.write("stream", stream->getName());
635  }
636  }
637 
638 protected:
639  void seek(uint32_t offset) const
640  {
641  if(streamPos != offset) {
642  streamPos = stream->seekFrom(offset, SeekOrigin::Start);
643  }
644  }
645 
646  void read(void* buffer, size_t length) const
647  {
648  streamPos += stream->readBytes(static_cast<uint8_t*>(buffer), length);
649  }
650 
651  std::unique_ptr<IDataSourceStream> stream;
652  mutable uint32_t streamPos{};
653 };
654 
661 {
662 public:
664 
666  : StreamImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getSize())
667  {
668  }
669 
670  void write(MetaWriter& meta) const override
671  {
673  meta.write("size", imageSize);
674  }
675 
676  bool init() override;
677 
678  PixelFormat getPixelFormat() const override
679  {
680  return PixelFormat::RGB24;
681  }
682 
683  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
684 
685 private:
686  uint32_t imageOffset;
687  uint16_t stride;
688  bool flip;
689 };
690 
697 {
698 public:
700  : StreamImageObject(image, size), pixelFormat(format)
701  {
702  }
703 
704  RawImageObject(const FSTR::String& image, PixelFormat format, Size size)
705  : RawImageObject(new FSTR::Stream(image), format, size)
706  {
707  }
708 
710  : RawImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getFormat(), image.getSize())
711  {
712  }
713 
714  void write(MetaWriter& meta) const override
715  {
717  meta.write("pixelFormat", pixelFormat);
718  }
719 
720  bool init() override
721  {
722  return true;
723  }
724 
725  PixelFormat getPixelFormat() const override
726  {
727  return pixelFormat;
728  }
729 
730  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
731 
732 protected:
734 };
735 
740 {
741 public:
742  virtual ~RenderTarget()
743  {
744  }
745 
749  virtual Size getSize() const = 0;
750 
754  virtual PixelFormat getPixelFormat() const = 0;
755 
763  virtual Surface* createSurface(size_t bufferSize = 0) = 0;
764 
766  {
767  return pack(color, getPixelFormat());
768  }
769 };
770 
772 {
773 public:
774  MemoryImageObject(PixelFormat format, Size size);
775 
777  {
778  debug_i("[IMG] %p, destroyed", imageData);
779  }
780 
781  Surface* createSurface(const Blend* blend, size_t bufferSize = 0);
782 
783  bool isValid() const
784  {
785  return imageData != nullptr;
786  }
787 
788  /* RenderTarget */
789 
790  Size getSize() const override
791  {
792  return imageSize;
793  }
794 
795  PixelFormat getPixelFormat() const override
796  {
798  }
799 
800  Surface* createSurface(size_t bufferSize = 0) override
801  {
802  return createSurface(nullptr, bufferSize);
803  }
804 
805 private:
806  size_t imageBytes;
807  uint8_t* imageData{nullptr};
808 };
809 
811 {
812 public:
814  : RawImageObject(file, format, size), imageBytes(size.w * size.h * getBytesPerPixel(format))
815  {
816  }
817 
818  /* RenderTarget */
819 
820  Size getSize() const override
821  {
822  return imageSize;
823  }
824 
825  PixelFormat getPixelFormat() const override
826  {
828  }
829 
830  Surface* createSurface(size_t bufferSize = 0) override;
831 
832 private:
833  friend FileImageSurface;
834 
835  size_t imageBytes;
836 };
837 
850 class GlyphObject : public ImageObject
851 {
852 public:
853  using Bits = std::bitset<64>;
856 
857  GlyphObject(const Metrics& metrics, const Options& options)
858  : ImageObject(options.scale.scale(metrics.size())), metrics(metrics), options(options)
859  {
860  }
861 
862  Kind kind() const
863  {
864  return Kind::Glyph;
865  }
866 
867  PixelFormat getPixelFormat() const override
868  {
869  return PixelFormat::None;
870  }
871 
872  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
873 
874  virtual Bits getBits(uint16_t row) const = 0;
875 
885  virtual void readAlpha(void* buffer, Point origin, size_t stride) const = 0;
886 
887  const Metrics& getMetrics() const
888  {
889  return metrics;
890  }
891 
892 protected:
894  mutable Options options;
895 };
896 
902 class TextObject : public ObjectTemplate<Object::Kind::Text>
903 {
904 public:
905  TextObject(const Rect& bounds) : bounds(bounds)
906  {
907  }
908 
909  void write(MetaWriter& meta) const override
910  {
911  meta.write("bounds", bounds);
912  meta.beginArray("elements", "Element");
913  const TextElement* text{nullptr};
914  for(auto& obj : elements) {
915  meta.write(obj);
916  if(obj.kind == Element::Kind::Text) {
917  text = reinterpret_cast<const TextElement*>(&obj);
918  } else if(obj.kind == Element::Kind::Run) {
919  auto& run = reinterpret_cast<const RunElement&>(obj);
920  String s;
921  s.setLength(run.length);
922  text->text.read(run.offset, s.begin(), s.length());
923  meta.write("text", s);
924  }
925  }
926  // meta.writeArray("elements", "Element", elements);
927  meta.endArray();
928  }
929 
930  Renderer* createRenderer(const Location& location) const override;
931 
932  class Element : public LinkedObjectTemplate<Element>, public Meta
933  {
934  public:
936 
937 #define GRAPHICS_TEXT_ELEMENT_MAP(XX) \
938  XX(Text) \
939  XX(Font) \
940  XX(Color) \
941  XX(Run)
942 
943  enum class Kind : uint8_t {
944 #define XX(tag) tag,
946 #undef XX
947  };
948 
949  Element(Kind kind) : kind(kind)
950  {
951  }
952 
953  /* Meta */
954 
956  {
957  switch(kind) {
958 #define XX(tag) \
959  case Kind::tag: \
960  return F(#tag);
962 #undef XX
963  default:
964  return nullptr;
965  }
966  }
967 
968  virtual void write(MetaWriter& meta) const = 0;
969 
971  };
972  static_assert(sizeof(Element) == 12, "Element");
973 
974  class TextElement : public Element
975  {
976  public:
977  TextElement(const TextAsset& text) : Element(Kind::Text), text(text)
978  {
979  }
980 
981  void write(MetaWriter& meta) const override
982  {
983  meta.write("text", text);
984  }
985 
986  const TextAsset& text;
987  };
988 
989  class FontElement : public Element
990  {
991  public:
992  FontElement(const TypeFace& typeface, Scale scale, FontStyles style)
993  : Element(Kind::Font), scale(scale), style(style), typeface(typeface)
994  {
995  }
996 
997  void write(MetaWriter& meta) const override
998  {
999  meta.write("typeface", typeface);
1000  meta.write("scale", scale);
1001  meta.write("style", style);
1002  }
1003 
1005  {
1006  return scale.scaleY(typeface.height());
1007  }
1008 
1012  };
1013  static_assert(sizeof(FontElement) == 16, "RunElement");
1014 
1015  class ColorElement : public Element
1016  {
1017  public:
1018  ColorElement(const Brush& fore, const Brush& back) : Element(Kind::Color), fore(fore), back(back)
1019  {
1020  }
1021 
1022  void write(MetaWriter& meta) const override
1023  {
1024  meta.write("fore", fore);
1025  meta.write("back", back);
1026  }
1027 
1028  Brush fore{Color::WHITE};
1029  Brush back{Color::BLACK};
1030  };
1031 
1032  class RunElement : public Element
1033  {
1034  public:
1035  RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1036  : Element(Kind::Run), pos(pos), width(width), offset(offset), length(length)
1037  {
1038  }
1039 
1040  void write(MetaWriter& meta) const override
1041  {
1042  meta.write("pos", pos);
1043  meta.write("width", width);
1044  meta.write("offset", offset);
1045  meta.write("length", length);
1046  }
1047 
1052  };
1053  static_assert(sizeof(RunElement) == 20, "RunElement");
1054 
1055  template <typename T> T* addElement(T* elem)
1056  {
1057  elements.add(elem);
1058  return elem;
1059  }
1060 
1062  {
1063  return addElement(new TextElement(text));
1064  }
1065 
1066  FontElement* addFont(const Font& font, Scale scale, FontStyles style)
1067  {
1068  return addElement(new FontElement(*font.getFace(style), scale, style));
1069  }
1070 
1071  FontElement* addFont(const TypeFace& typeface, Scale scale, FontStyles style)
1072  {
1073  return addElement(new FontElement(typeface, scale, style));
1074  }
1075 
1076  ColorElement* addColor(const Brush& fore, const Brush& back)
1077  {
1078  return addElement(new ColorElement(fore, back));
1079  }
1080 
1081  RunElement* addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1082  {
1083  return addElement(new RunElement(pos, width, offset, length));
1084  }
1085 
1086  Rect bounds{};
1088 };
1089 
1095 class SurfaceObject : public ObjectTemplate<Object::Kind::Surface>
1096 {
1097 public:
1104  SurfaceObject(Surface& surface, const Rect& dest, Point source) : surface(surface), dest(dest), source(source)
1105  {
1106  }
1107 
1108  Renderer* createRenderer(const Location& location) const override;
1109 
1110  /* Meta */
1111 
1112  void write(MetaWriter& meta) const override;
1113 
1117 };
1118 
1122 class CopyObject : public ObjectTemplate<Object::Kind::Copy>
1123 {
1124 public:
1125  CopyObject(const Rect& source, Point dest) : source(source), dest(dest)
1126  {
1127  }
1128 
1129  Renderer* createRenderer(const Location& location) const override;
1130 
1131  /* Meta */
1132 
1133  void write(MetaWriter& meta) const override
1134  {
1135  meta.write("source", source);
1136  meta.write("dest", dest);
1137  }
1138 
1141 };
1142 
1146 class ScrollObject : public ObjectTemplate<Object::Kind::Scroll>
1147 {
1148 public:
1149  ScrollObject(const Rect& area, Point shift, bool wrapx, bool wrapy, Color fill)
1150  : area(area), shift(shift), wrapx(wrapx), wrapy(wrapy), fill(fill)
1151  {
1152  }
1153 
1154  Renderer* createRenderer(const Location& location) const override;
1155 
1156  /* Meta */
1157 
1158  void write(MetaWriter& meta) const override
1159  {
1160  meta.write("area", area);
1161  meta.write("shift", shift);
1162  meta.write("wrapx", wrapx);
1163  meta.write("wrapy", wrapy);
1164  meta.write("fill", fill);
1165  }
1166 
1169  bool wrapx;
1170  bool wrapy;
1172 };
1173 
1179 class DrawingObject : public ObjectTemplate<Object::Kind::Drawing>
1180 {
1181 public:
1183 
1185  {
1186  stream.reset(content);
1187  }
1188 
1189  DrawingObject(const FSTR::ObjectBase& source) : DrawingObject(new FSTR::Stream(source))
1190  {
1191  }
1192 
1194  {
1195  stream.reset(new MemoryDataStream(std::move(content)));
1196  }
1197 
1198  void write(MetaWriter& meta) const override;
1199 
1200  Renderer* createRenderer(const Location& location) const override;
1201 
1203  {
1204  return *stream.get();
1205  }
1206 
1207  std::unique_ptr<IDataSourceStream> stream;
1209 };
1210 
1211 } // namespace Graphics
1212 
Definition: Libraries/Graphics/src/include/Graphics/Object.h:130
A single pixel == 1x1 rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:174
StreamImageObject(IDataSourceStream *source, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:621
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1133
ImageObject(Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:564
Point operator[](unsigned index) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:346
Empty base class to support object enumeration Non-virtual to avoid bloat.
Definition: Meta.h:38
void beginArray(const String &name, const String &type)
Definition: Meta.h:118
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:352
Definition: LinkedObjectList.h:89
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:678
A filled ellipse.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:480
EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:460
FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:422
PolylineObject(Pen pen, const Rect &rect, uint8_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:316
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1015
IDataSourceStream * createSubStream(uint32_t offset, size_t size)
Graphics objects call this method to obtain access to resource data.
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:943
CircleObject(const Pen &pen, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:372
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1158
TPoint< int16_t > Point
Definition: Libraries/Graphics/src/include/Graphics/Types.h:280
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:492
#define GRAPHICS_TEXT_ELEMENT_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:937
DrawingObject(const FSTR::ObjectBase &source)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1189
std::unique_ptr< Point[]> points
Definition: Libraries/Graphics/src/include/Graphics/Object.h:361
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:501
const TypeFace & typeface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1011
Describes a copy operation within the same surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1122
PixelFormat pixelFormat
Definition: Libraries/Graphics/src/include/Graphics/Object.h:733
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:527
int16_t top() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:407
Describes a scrolling operation.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1146
Definition: Libraries/Graphics/src/include/Graphics/Object.h:810
LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:267
Image stored as raw pixels in a specific format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:696
Base class for read-only stream.
Definition: DataSourceStream.h:45
A BMP format image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:660
Metrics metrics
Definition: Libraries/Graphics/src/include/Graphics/Object.h:893
RawImageObject(const FSTR::String &image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:704
Used when defining data structures.
Definition: ObjectBase.hpp:32
GlyphObject(const Metrics &metrics, const Options &options)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:857
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:725
CopyObject(const Rect &source, Point dest)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1125
Kind kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:970
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:651
RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1035
int16_t bottom() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:412
void writeArray(const String &name, const String &type, const T *values, unsigned count)
Definition: Meta.h:135
Definition: Libraries/Graphics/src/include/Graphics/Types.h:732
uint16_t offset
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1050
Definition: Asset.h:752
ColorElement * addColor(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1076
Colour in device pixel format.
Definition: Colors.h:339
Point shift
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1168
uint16_t numPoints
Definition: Libraries/Graphics/src/include/Graphics/Object.h:362
Kind kind() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:862
int16_t right() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:402
StreamImageObject(const FSTR::String &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:626
FontElement * addFont(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1071
A block of text consisting of zero or more segments.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:902
FilledEllipseObject(const Brush &brush, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:487
SEEK_SET: Start of file.
A drawn line.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:256
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:404
FilledArcObject(Brush brush, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:537
std::bitset< 64 > Bits
Definition: Libraries/Graphics/src/include/Graphics/Object.h:853
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1032
A circle outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:369
Describes a target surface and corresponding source location.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1095
PackedColor getColor(Color color) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:765
TextElement * addText(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1061
Renderer(const Location &location)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:75
Reference to another object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:150
Rect area
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1167
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:219
uint16_t width() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:580
TextElement(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:977
Rect source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1139
A filled rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:226
Location and size of rectangular area (x, y, w, h)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:287
Surface & surface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1114
The String class.
Definition: WString.h:136
T x
Definition: Libraries/Graphics/src/include/Graphics/Types.h:134
void read(void *buffer, size_t length) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:646
Definition: Libraries/Graphics/src/include/Graphics/Object.h:932
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:795
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1207
FilledRectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:233
String getTypeStr() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:955
A character glyph image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:850
Element::OwnedList elements
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1087
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:820
BitmapObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:665
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:446
AssetList assets
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1208
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:158
Definition: Asset.h:402
bool operator==(const Object &other) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:119
DrawingObject(String &&content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1193
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:909
Definition: Delegate.h:20
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:218
Rect pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:167
char * begin()
Get a modifiable pointer to String content.
Definition: WString.h:625
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:720
RawImageObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:709
Definition: Libraries/Graphics/src/include/Graphics/Object.h:989
XX(name, r, g, b)
void seek(uint32_t offset) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:639
A rectangular outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:196
virtual ~Renderer()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:79
uint8_t length
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1051
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:275
ArcObject(Pen pen, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:510
Surface * createSurface(size_t bufferSize=0) override
Create a surface for use with this render target.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:800
Base class for a loaded typeface, e.g. Sans 16pt bold.
Definition: Asset.h:505
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:248
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:249
RectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:203
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:528
ScrollObject(const Rect &area, Point shift, bool wrapx, bool wrapy, Color fill)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1149
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:465
Writes object content in readable format for debugging.
Definition: Meta.h:47
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:447
Image surface using filing system as backing store.
Definition: ImageSurface.h:131
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1004
Identifies position within bounding rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:683
Point bottomRight() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:432
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:181
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:997
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:554
Options options
Definition: Libraries/Graphics/src/include/Graphics/Object.h:894
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:102
RectObject(const Pen &pen, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:199
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:474
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1040
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:714
Point point
Definition: Libraries/Graphics/src/include/Graphics/Object.h:190
bool isValid() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:783
const Metrics & getMetrics() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:887
size_t length(void) const
Obtain the String length in characters, excluding NUL terminator.
Definition: WString.h:243
int16_t left() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:397
RawImageObject(IDataSourceStream *image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:699
bool setLength(size_t length)
set the string length accordingly, expanding if necessary
A drawable object inherits from this virtual base class.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:96
Color
Standard colour definitions.
Definition: Colors.h:227
T * addElement(T *elem)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1055
#define GRAPHICS_OBJECT_KIND_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:34
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:542
Base class for a loaded font.
Definition: Asset.h:571
PixelBuffer pack(PixelBuffer src, PixelFormat format)
Convert RGB colour into packed format.
Virtual base class for an image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:561
#define debug_i
Definition: debug_progmem.h:99
Size of rectangular area (width x height)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:105
Location location
Definition: Libraries/Graphics/src/include/Graphics/Object.h:90
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:670
LineObject(int x0, int y0, int x1, int y1, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:271
String toString(Graphics::Object::Kind kind)
Base class template for linked items with type casting.
Definition: LinkedObject.h:61
RunElement * addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1081
TextObject(const Rect &bounds)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:905
Glyph metrics.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:838
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:500
Class template for singly-linked list of objects.
Definition: LinkedObjectList.h:174
virtual ~RenderTarget()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:742
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:553
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:403
PolylineObject(Pen pen, ParamTypes... params)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:307
uint8_t getBytesPerPixel(PixelFormat format)
Get number of bytes required to store a pixel in the given format.
Definition: Colors.h:331
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:207
uint16_t width
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1049
Definition: resource.h:112
An arc outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:507
Virtual base class to manage rendering of various types of information to a surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:65
describes a counted string stored in flash memory
Definition: String.hpp:173
Interface for objects which support writing via surfaces.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:739
The source of colour for drawing.
Definition: Asset.h:252
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:981
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:568
Image whose contents are stored in a stream, typically in a file or flash memory. ...
Definition: Libraries/Graphics/src/include/Graphics/Object.h:618
bool wrapx
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1169
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:555
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:585
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:402
SurfaceObject(Surface &surface, const Rect &dest, Point source)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1104
Size getSize() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:575
File stream class.
Definition: IFS/FileStream.h:22
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:387
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:189
~MemoryImageObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:776
A filled circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:410
Point dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1140
LineObject(Pen pen, Point pt1, Point pt2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:263
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:525
Point source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1116
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:430
A collection of line and curve drawing operations.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1179
An ellipse outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:453
const TextAsset & text
Definition: Libraries/Graphics/src/include/Graphics/Object.h:986
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:237
void init(IDataSourceStream *stream)
Application calls this method to set source for graphics resourcess.
DrawingObject(IDataSourceStream *content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1184
ReferenceObject(Object &object, const Rect &pos, const Blend *blend=nullptr)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:153
virtual bool execute(Surface &surface)=0
Called to do some writing to the surface.
PolylineObject(Pen pen, size_t count)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:301
Definition: Asset.h:665
PixelFormat
Definition: Colors.h:295
Point pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1048
FilledRectObject(Brush brush, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:229
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:790
std::enable_if< std::is_base_of< Meta, T >::value, void >::type write(const String &name, const T &value)
Definition: Meta.h:55
uint16_t width
Definition: Asset.h:433
Origin
Points on a compass.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:71
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1022
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:552
Blend operations.
Definition: Blend.h:40
A sequence of lines.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:298
void endArray()
Definition: Meta.h:129
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:867
Interface for a drawing surface.
Definition: Surface.h:41
virtual const TypeFace * getFace(FontStyles style) const =0
Definition: Libraries/Graphics/src/include/Graphics/Object.h:974
PolylineObject(const RectObject &object)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:312
Definition: Virtual.h:30
FontElement * addFont(const Font &font, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1066
Element(Kind kind)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:949
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:445
CircleObject(const Pen &pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:376
FontStyles style
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1010
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:630
ColorElement(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1018
bool wrapy
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1170
Object & object
Definition: Libraries/Graphics/src/include/Graphics/Object.h:166
Point topLeft() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:417
Definition: Libraries/Graphics/src/include/Graphics/Object.h:771
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:825
Definition: Asset.h:452
Definition: Array.hpp:107
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:436
A filled arc.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:534
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:526
LineObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:259
Kind kind() const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:133
IDataSourceStream & getStream() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1202
FilledCircleObject(Brush brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:417
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:393
Scale scale
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1009
Color fill
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1171
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:473
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:360
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:515
const Blend * blend
Definition: Libraries/Graphics/src/include/Graphics/Object.h:168
PointObject(const Brush &brush, const Point &point)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:177
FilledCircleObject(Brush brush, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:413
FilledEllipseObject(const Brush &brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:483
EllipseObject(Pen pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:456
Read/write stream using expandable memory buffer.
Definition: MemoryDataStream.h:26
FontElement(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:992
FileImageObject(IFS::FileStream *file, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:813
Base Stream class.
Definition: Wiring/Stream.h:32
CircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:380
Rect dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1115