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 
166  Object& object;
167  Rect pos;
168  const Blend* blend;
169 };
170 
174 class PointObject : public ObjectTemplate<Object::Kind::Point>
175 {
176 public:
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 
189  Brush brush;
190  Point point;
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 
219  Rect rect;
220  uint8_t radius{0};
221 };
222 
226 class FilledRectObject : public ObjectTemplate<Object::Kind::FilledRect>
227 {
228 public:
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 
248  const Blend* blender{nullptr};
249  Brush brush;
250  Rect rect;
251  uint8_t radius{0};
252 };
253 
257 class LineObject : public ObjectTemplate<Object::Kind::Line>
258 {
259 public:
260  LineObject()
261  {
262  }
263 
264  LineObject(Pen pen, Point pt1, Point pt2) : pen(pen), pt1(pt1), pt2(pt2)
265  {
266  }
267 
268  LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2) : LineObject(pen, Point(x1, y1), Point(x2, y2))
269  {
270  }
271 
272  LineObject(int x0, int y0, int x1, int y1, Color color) : LineObject(color, Point(x0, y0), Point(x1, y1))
273  {
274  }
275 
276  void write(MetaWriter& meta) const override
277  {
278  meta.write("pen", pen);
279  meta.write("pt1", pt1);
280  meta.write("pt2", pt2);
281  }
282 
283  Renderer* createRenderer(const Location& location) const override;
284 
285  Pen pen{};
286  Point pt1{};
288 };
289 
299 class PolylineObject : public ObjectTemplate<Object::Kind::Polyline>
300 {
301 public:
302  PolylineObject(Pen pen, size_t count) : pen(pen), numPoints(count)
303  {
304  this->points.reset(new Point[numPoints]);
305  }
306 
307  template <typename... ParamTypes>
308  PolylineObject(Pen pen, ParamTypes... params) : pen(pen), numPoints(sizeof...(ParamTypes))
309  {
310  this->points.reset(new Point[sizeof...(ParamTypes)]{params...});
311  }
312 
313  PolylineObject(const RectObject& object) : PolylineObject(object.pen, object.rect, object.radius)
314  {
315  }
316 
317  PolylineObject(Pen pen, const Rect& rect, uint8_t radius) : pen(pen)
318  {
319  auto pt1 = rect.topLeft();
320  auto pt2 = rect.bottomRight();
321  if(radius == 0) {
322  points.reset(new Point[5]{
323  pt1,
324  {pt2.x, pt1.y},
325  pt2,
326  {pt1.x, pt2.y},
327  pt1,
328  });
329  numPoints = 5;
330  } else {
331  auto t = pen.width - 1;
332  points.reset(new Point[8]{
333  Point(pt1.x + radius, pt1.y),
334  Point(pt2.x - radius, pt1.y),
335  Point(pt1.x + radius, pt2.y - t),
336  Point(pt2.x - radius, pt2.y - t),
337  Point(pt1.x, pt1.y + radius),
338  Point(pt1.x, pt2.y - radius),
339  Point(pt2.x - t, pt1.y + radius),
340  Point(pt2.x - t, pt2.y - radius),
341  });
342  numPoints = 8;
343  connected = false;
344  }
345  }
346 
347  Point operator[](unsigned index) const
348  {
349  assert(index < numPoints);
350  return points[index];
351  }
352 
353  void write(MetaWriter& meta) const override
354  {
355  meta.write("pen", pen);
356  meta.writeArray("points", "Point", points.get(), numPoints);
357  }
358 
359  Renderer* createRenderer(const Location& location) const override;
360 
361  Pen pen;
362  std::unique_ptr<Point[]> points;
364  bool connected{true};
365 };
366 
370 class CircleObject : public ObjectTemplate<Object::Kind::Circle>
371 {
372 public:
374  {
375  }
376 
377  CircleObject(const Pen& pen, const Rect& rect) : CircleObject(pen, rect.centre(), std::min(rect.w, rect.h) / 2)
378  {
379  }
380 
381  CircleObject(int16_t x, int16_t y, uint16_t radius, Color color) : CircleObject(color, Point{x, y}, radius)
382  {
383  }
384 
388  Rect getRect() const
389  {
390  uint16_t dia = radius * 2;
391  return Rect(centre.x - radius, centre.y - radius, dia, dia);
392  }
393 
394  void write(MetaWriter& meta) const override
395  {
396  meta.write("pen", pen);
397  meta.write("centre", centre);
398  meta.write("radius", radius);
399  }
400 
401  Renderer* createRenderer(const Location& location) const override;
402 
403  Pen pen;
404  Point centre;
406 };
407 
411 class FilledCircleObject : public ObjectTemplate<Object::Kind::FilledCircle>
412 {
413 public:
415  {
416  }
417 
418  FilledCircleObject(Brush brush, const Rect& rect)
419  : FilledCircleObject(brush, rect.centre(), std::min(rect.w, rect.h) / 2)
420  {
421  }
422 
423  FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
424  : FilledCircleObject(color, Point{x, y}, radius)
425  {
426  }
427 
431  Rect getRect() const
432  {
433  uint16_t dia = radius * 2;
434  return Rect(centre.x - radius, centre.y - radius, dia, dia);
435  }
436 
437  void write(MetaWriter& meta) const override
438  {
439  meta.write("brush", brush);
440  meta.write("centre", centre);
441  meta.write("radius", radius);
442  }
443 
444  Renderer* createRenderer(const Location& location) const override;
445 
446  Brush brush;
447  Point centre;
449 };
450 
454 class EllipseObject : public ObjectTemplate<Object::Kind::Ellipse>
455 {
456 public:
457  EllipseObject(Pen pen, const Rect& rect) : pen(pen), rect(rect)
458  {
459  }
460 
461  EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
462  : pen(pen), rect(centre, Size(a * 2, b * 2), Origin::Centre)
463  {
464  }
465 
466  void write(MetaWriter& meta) const override
467  {
468  meta.write("pen", pen);
469  meta.write("rect", rect);
470  }
471 
472  Renderer* createRenderer(const Location& location) const override;
473 
474  Pen pen;
475  Rect rect;
476 };
477 
481 class FilledEllipseObject : public ObjectTemplate<Object::Kind::FilledEllipse>
482 {
483 public:
485  {
486  }
487 
488  FilledEllipseObject(const Brush& brush, Point centre, uint16_t a, uint16_t b)
489  : brush(brush), rect(centre, Size(a * 2, b * 2), Origin::Centre)
490  {
491  }
492 
493  void write(MetaWriter& meta) const override
494  {
495  meta.write("brush", brush);
496  meta.write("rect", rect);
497  }
498 
499  Renderer* createRenderer(const Location& location) const override;
500 
501  Brush brush;
502  Rect rect;
503 };
504 
508 class ArcObject : public ObjectTemplate<Object::Kind::Arc>
509 {
510 public:
511  ArcObject(Pen pen, const Rect& rect, int16_t startAngle, int16_t endAngle)
513  {
514  }
515 
516  void write(MetaWriter& meta) const override
517  {
518  meta.write("pen", pen);
519  meta.write("rect", rect);
520  meta.write("startAngle", startAngle);
521  meta.write("endAngle", endAngle);
522  }
523 
524  Renderer* createRenderer(const Location& location) const override;
525 
526  Pen pen;
528  int16_t startAngle;
529  int16_t endAngle;
530 };
531 
535 class FilledArcObject : public ObjectTemplate<Object::Kind::FilledArc>
536 {
537 public:
538  FilledArcObject(Brush brush, const Rect& rect, int16_t startAngle, int16_t endAngle)
540  {
541  }
542 
543  void write(MetaWriter& meta) const override
544  {
545  meta.write("brush", brush);
546  meta.write("rect", rect);
547  meta.write("startAngle", startAngle);
548  meta.write("endAngle", endAngle);
549  }
550 
551  Renderer* createRenderer(const Location& location) const override;
552 
553  Brush brush;
555  int16_t startAngle;
556  int16_t endAngle;
557 };
558 
562 class ImageObject : public ObjectTemplate<Object::Kind::Image>
563 {
564 public:
565  ImageObject(Size size) : imageSize(size)
566  {
567  }
568 
569  void write(MetaWriter& meta) const override
570  {
571  meta.write("size", imageSize);
572  }
573 
574  Renderer* createRenderer(const Location& location) const override;
575 
576  Size getSize() const
577  {
578  return imageSize;
579  }
580 
581  uint16_t width() const
582  {
583  return imageSize.w;
584  }
585 
586  uint16_t height() const
587  {
588  return imageSize.h;
589  }
590 
594  virtual bool init() = 0;
595 
600  virtual PixelFormat getPixelFormat() const = 0;
601 
610  virtual size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const = 0;
611 
612 protected:
613  Size imageSize{};
614 };
615 
619 class StreamImageObject : public ImageObject
620 {
621 public:
622  StreamImageObject(IDataSourceStream* source, Size size) : ImageObject(size)
623  {
624  stream.reset(source);
625  }
626 
627  StreamImageObject(const FSTR::String& image) : StreamImageObject(new FSTR::Stream(image), {})
628  {
629  }
630 
631  void write(MetaWriter& meta) const override
632  {
633  ImageObject::write(meta);
634  if(stream) {
635  meta.write("stream", stream->getName());
636  }
637  }
638 
639 protected:
640  void seek(uint32_t offset) const
641  {
642  if(streamPos != offset) {
643  streamPos = stream->seekFrom(offset, SeekOrigin::Start);
644  }
645  }
646 
647  void read(void* buffer, size_t length) const
648  {
649  streamPos += stream->readBytes(static_cast<uint8_t*>(buffer), length);
650  }
651 
652  std::unique_ptr<IDataSourceStream> stream;
653  mutable uint32_t streamPos{};
654 };
655 
661 class BitmapObject : public StreamImageObject
662 {
663 public:
665 
667  : StreamImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getSize())
668  {
669  }
670 
671  void write(MetaWriter& meta) const override
672  {
674  meta.write("size", imageSize);
675  }
676 
677  bool init() override;
678 
679  PixelFormat getPixelFormat() const override
680  {
681  return PixelFormat::RGB24;
682  }
683 
684  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
685 
686 private:
687  uint32_t imageOffset;
688  uint16_t stride;
689  bool flip;
690 };
691 
697 class RawImageObject : public StreamImageObject
698 {
699 public:
700  RawImageObject(IDataSourceStream* image, PixelFormat format, Size size)
701  : StreamImageObject(image, size), pixelFormat(format)
702  {
703  }
704 
705  RawImageObject(const FSTR::String& image, PixelFormat format, Size size)
706  : RawImageObject(new FSTR::Stream(image), format, size)
707  {
708  }
709 
711  : RawImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getFormat(), image.getSize())
712  {
713  }
714 
715  void write(MetaWriter& meta) const override
716  {
718  meta.write("pixelFormat", pixelFormat);
719  }
720 
721  bool init() override
722  {
723  return true;
724  }
725 
726  PixelFormat getPixelFormat() const override
727  {
728  return pixelFormat;
729  }
730 
731  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
732 
733 protected:
735 };
736 
741 {
742 public:
743  virtual ~RenderTarget()
744  {
745  }
746 
750  virtual Size getSize() const = 0;
751 
755  virtual PixelFormat getPixelFormat() const = 0;
756 
764  virtual Surface* createSurface(size_t bufferSize = 0) = 0;
765 
766  PackedColor getColor(Color color) const
767  {
768  return pack(color, getPixelFormat());
769  }
770 };
771 
772 class MemoryImageObject : public RawImageObject, public RenderTarget
773 {
774 public:
775  MemoryImageObject(PixelFormat format, Size size);
776 
778  {
779  debug_i("[IMG] %p, destroyed", imageData);
780  }
781 
782  Surface* createSurface(const Blend* blend, size_t bufferSize = 0);
783 
784  bool isValid() const
785  {
786  return imageData != nullptr;
787  }
788 
789  /* RenderTarget */
790 
791  Size getSize() const override
792  {
793  return imageSize;
794  }
795 
796  PixelFormat getPixelFormat() const override
797  {
799  }
800 
801  Surface* createSurface(size_t bufferSize = 0) override
802  {
803  return createSurface(nullptr, bufferSize);
804  }
805 
806 private:
807  size_t imageBytes;
808  uint8_t* imageData{nullptr};
809 };
810 
811 class FileImageObject : public RawImageObject, public RenderTarget
812 {
813 public:
814  FileImageObject(IFS::FileStream* file, PixelFormat format, Size size)
815  : RawImageObject(file, format, size), imageBytes(size.w * size.h * getBytesPerPixel(format))
816  {
817  }
818 
819  /* RenderTarget */
820 
821  Size getSize() const override
822  {
823  return imageSize;
824  }
825 
826  PixelFormat getPixelFormat() const override
827  {
829  }
830 
831  Surface* createSurface(size_t bufferSize = 0) override;
832 
833 private:
834  friend FileImageSurface;
835 
836  size_t imageBytes;
837 };
838 
851 class GlyphObject : public ImageObject
852 {
853 public:
854  using Bits = std::bitset<64>;
855  using Options = TextOptions;
856  using Metrics = GlyphMetrics;
857 
858  GlyphObject(const Metrics& metrics, const Options& options)
860  {
861  }
862 
863  Kind kind() const
864  {
865  return Kind::Glyph;
866  }
867 
868  PixelFormat getPixelFormat() const override
869  {
871  }
872 
873  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
874 
875  virtual Bits getBits(uint16_t row) const = 0;
876 
886  virtual void readAlpha(void* buffer, Point origin, size_t stride) const = 0;
887 
888  const Metrics& getMetrics() const
889  {
890  return metrics;
891  }
892 
893 protected:
895  mutable Options options;
896 };
897 
903 class TextObject : public ObjectTemplate<Object::Kind::Text>
904 {
905 public:
906  TextObject(const Rect& bounds) : bounds(bounds)
907  {
908  }
909 
910  void write(MetaWriter& meta) const override
911  {
912  meta.write("bounds", bounds);
913  meta.beginArray("elements", "Element");
914  const TextElement* text{nullptr};
915  for(auto& obj : elements) {
916  meta.write(obj);
917  if(obj.kind == Element::Kind::Text) {
918  text = reinterpret_cast<const TextElement*>(&obj);
919  } else if(obj.kind == Element::Kind::Run) {
920  auto& run = reinterpret_cast<const RunElement&>(obj);
921  String s;
922  s.setLength(run.length);
923  text->text.read(run.offset, s.begin(), s.length());
924  meta.write("text", s);
925  }
926  }
927  // meta.writeArray("elements", "Element", elements);
928  meta.endArray();
929  }
930 
931  Renderer* createRenderer(const Location& location) const override;
932 
933  class Element : public LinkedObjectTemplate<Element>, public Meta
934  {
935  public:
937 
938 #define GRAPHICS_TEXT_ELEMENT_MAP(XX) \
939  XX(Text) \
940  XX(Font) \
941  XX(Color) \
942  XX(Run)
943 
944  enum class Kind : uint8_t {
945 #define XX(tag) tag,
947 #undef XX
948  };
949 
951  {
952  }
953 
954  /* Meta */
955 
956  String getTypeStr() const
957  {
958  switch(kind) {
959 #define XX(tag) \
960  case Kind::tag: \
961  return F(#tag);
963 #undef XX
964  default:
965  return nullptr;
966  }
967  }
968 
969  virtual void write(MetaWriter& meta) const = 0;
970 
971  Kind kind;
972  };
973  static_assert(sizeof(Element) == 12, "Element");
974 
975  class TextElement : public Element
976  {
977  public:
978  TextElement(const TextAsset& text) : Element(Kind::Text), text(text)
979  {
980  }
981 
982  void write(MetaWriter& meta) const override
983  {
984  meta.write("text", text);
985  }
986 
987  const TextAsset& text;
988  };
989 
990  class FontElement : public Element
991  {
992  public:
995  {
996  }
997 
998  void write(MetaWriter& meta) const override
999  {
1000  meta.write("typeface", typeface);
1001  meta.write("scale", scale);
1002  meta.write("style", style);
1003  }
1004 
1005  uint16_t height() const
1006  {
1007  return scale.scaleY(typeface.height());
1008  }
1010  Scale scale;
1011  FontStyles style;
1013  };
1014  static_assert(sizeof(FontElement) == 16, "RunElement");
1015 
1016  class ColorElement : public Element
1017  {
1018  public:
1020  {
1021  }
1022 
1023  void write(MetaWriter& meta) const override
1024  {
1025  meta.write("fore", fore);
1026  meta.write("back", back);
1027  }
1028 
1029  Brush fore{Color::WHITE};
1030  Brush back{Color::BLACK};
1031  };
1032 
1033  class RunElement : public Element
1034  {
1035  public:
1038  {
1039  }
1040 
1041  void write(MetaWriter& meta) const override
1042  {
1043  meta.write("pos", pos);
1044  meta.write("width", width);
1045  meta.write("offset", offset);
1046  meta.write("length", length);
1047  }
1050  uint16_t width;
1051  uint16_t offset;
1053  };
1054  static_assert(sizeof(RunElement) == 20, "RunElement");
1056  template <typename T> T* addElement(T* elem)
1057  {
1058  elements.add(elem);
1059  return elem;
1060  }
1061 
1062  TextElement* addText(const TextAsset& text)
1063  {
1064  return addElement(new TextElement(text));
1065  }
1066 
1067  FontElement* addFont(const Font& font, Scale scale, FontStyles style)
1068  {
1069  return addElement(new FontElement(*font.getFace(style), scale, style));
1070  }
1072  FontElement* addFont(const TypeFace& typeface, Scale scale, FontStyles style)
1073  {
1074  return addElement(new FontElement(typeface, scale, style));
1075  }
1076 
1077  ColorElement* addColor(const Brush& fore, const Brush& back)
1078  {
1079  return addElement(new ColorElement(fore, back));
1080  }
1082  RunElement* addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1083  {
1084  return addElement(new RunElement(pos, width, offset, length));
1085  }
1087  Rect bounds{};
1089 };
1090 
1096 class SurfaceObject : public ObjectTemplate<Object::Kind::Surface>
1097 {
1098 public:
1106  {
1107  }
1108 
1109  Renderer* createRenderer(const Location& location) const override;
1110 
1111  /* Meta */
1112 
1113  void write(MetaWriter& meta) const override;
1114 
1116  Rect dest;
1117  Point source;
1118 };
1119 
1123 class CopyObject : public ObjectTemplate<Object::Kind::Copy>
1125 public:
1127  {
1128  }
1129 
1130  Renderer* createRenderer(const Location& location) const override;
1131 
1132  /* Meta */
1133 
1134  void write(MetaWriter& meta) const override
1135  {
1136  meta.write("source", source);
1137  meta.write("dest", dest);
1138  }
1139 
1140  Rect source;
1141  Point dest;
1142 };
1143 
1147 class ScrollObject : public ObjectTemplate<Object::Kind::Scroll>
1148 {
1149 public:
1150  ScrollObject(const Rect& area, Point shift, bool wrapx, bool wrapy, Color fill)
1152  {
1153  }
1154 
1155  Renderer* createRenderer(const Location& location) const override;
1156 
1157  /* Meta */
1158 
1159  void write(MetaWriter& meta) const override
1160  {
1161  meta.write("area", area);
1162  meta.write("shift", shift);
1163  meta.write("wrapx", wrapx);
1164  meta.write("wrapy", wrapy);
1165  meta.write("fill", fill);
1166  }
1167 
1168  Rect area;
1170  bool wrapx;
1171  bool wrapy;
1172  Color fill;
1173 };
1174 
1180 class DrawingObject : public ObjectTemplate<Object::Kind::Drawing>
1181 {
1182 public:
1183  using Callback = Delegate<void(DrawingObject* drawing)>;
1184 
1186  {
1187  stream.reset(content);
1188  }
1190  DrawingObject(const FSTR::ObjectBase& source) : DrawingObject(new FSTR::Stream(source))
1191  {
1192  }
1193 
1194  DrawingObject(String&& content)
1195  {
1196  stream.reset(new MemoryDataStream(std::move(content)));
1197  }
1198 
1199  void write(MetaWriter& meta) const override;
1200 
1201  Renderer* createRenderer(const Location& location) const override;
1203  IDataSourceStream& getStream() const
1204  {
1205  return *stream.get();
1206  }
1207 
1208  std::unique_ptr<IDataSourceStream> stream;
1210 };
1211 
1212 } // namespace Graphics
Metrics metrics
Definition: Libraries/Graphics/src/include/Graphics/Object.h:913
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:734
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:545
Base class for read-only stream.
Definition: DataSourceStream.h:45
Base Stream class.
Definition: Wiring/Stream.h:32
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:994
Size size() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:864
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:422
const TextAsset & text
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1006
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:304
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:535
virtual void write(MetaWriter &meta) const =0
RunElement * addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1101
LinkedObjectListTemplate< Renderer > List
Definition: Libraries/Graphics/src/include/Graphics/Object.h:87
virtual void write(MetaWriter &meta) const =0
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:547
Read/write stream using expandable memory buffer.
Definition: MemoryDataStream.h:26
Base class template for linked items with type casting.
Definition: LinkedObject.h:61
virtual void readAlpha(void *buffer, Point origin, size_t stride) const =0
Obtain glyph information as block of 8-bit alpha values.
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:423
TextObject(const Rect &bounds)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:925
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:295
GlyphObject(const Metrics &metrics, const Options &options)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:877
A drawn line.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:276
Point pt2
Definition: Libraries/Graphics/src/include/Graphics/Object.h:306
uint16_t w
Definition: Libraries/Graphics/src/include/Graphics/Types.h:125
Definition: Libraries/Graphics/src/include/Graphics/Object.h:830
Scale scale
Definition: Asset.h:476
Definition: Libraries/Graphics/src/include/Graphics/Object.h:952
T x
Definition: Libraries/Graphics/src/include/Graphics/Types.h:153
virtual ~Renderer()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:98
uint8_t getBytesPerPixel(PixelFormat format)
Get number of bytes required to store a pixel in the given format.
Definition: Colors.h:331
LineObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:279
Base class for a loaded font.
Definition: Asset.h:590
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1042
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:269
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:840
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
A character glyph image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:870
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
uint32_t bmOffset
Definition: resource.h:152
Surface * createSurface(const Blend *blend, size_t bufferSize=0)
DrawingObject(IDataSourceStream *content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1204
FontStyles style
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1030
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:671
describes a counted string stored in flash memory
Definition: String.hpp:173
Definition: Asset.h:771
virtual ~RenderTarget()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:762
virtual Size getSize() const =0
Get target dimensions.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:690
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
A circle outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:389
EllipseObject(Pen pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:476
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1001
T y
Definition: Libraries/Graphics/src/include/Graphics/Types.h:154
A filled rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:245
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:494
FilledRectObject(Brush brush, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:248
A sequence of lines.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:318
ImageObject(Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:584
Class template for singly-linked list of objects.
Definition: LinkedObjectList.h:174
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Location and size of rectangular area (x, y, w, h)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:306
Surface & surface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1134
char * begin()
Get a modifiable pointer to String content.
Definition: WString.h:625
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:963
The String class.
Definition: WString.h:136
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:226
Virtual base class to manage rendering of various types of information to a surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:84
A collection of line and curve drawing operations.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1199
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:177
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
bool operator==(const Object &other) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:138
String getTypeStr() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:975
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:485
File stream class.
Definition: IFS/FileStream.h:30
CircleObject(const Pen &pen, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:392
TextElement(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:997
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:572
ReferenceObject(Object &object, const Rect &pos, const Blend *blend=nullptr)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:172
Image whose contents are stored in a stream, typically in a file or flash memory.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:638
Writes object content in readable format for debugging.
Definition: Meta.h:66
bool add(ObjectType *object)
Definition: LinkedObjectList.h:134
Point pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1068
TextOptions Options
Definition: Libraries/Graphics/src/include/Graphics/Object.h:874
bool connected
Definition: Libraries/Graphics/src/include/Graphics/Object.h:383
A filled ellipse.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:500
uint16_t offset
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1070
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
A single pixel == 1x1 rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:193
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:815
OwnedLinkedObjectListTemplate< Renderer > OwnedList
Definition: Libraries/Graphics/src/include/Graphics/Object.h:88
Definition: LinkedObjectList.h:89
FontElement * addFont(const Font &font, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1086
Definition: Asset.h:421
Kind kind() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:882
bool setLength(size_t length)
set the string length accordingly, expanding if necessary
Rect dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1135
void seek(uint32_t offset) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:659
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:512
Identifies position within bounding rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:702
Reference to another object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:169
Interface for a drawing surface.
Definition: Surface.h:60
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:200
Brush fore
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1048
uint16_t width() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:600
uint8_t length
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1071
Size getSize() const
Definition: resource.h:158
std::enable_if< std::is_base_of< Meta, T >::value, void >::type write(const String &name, const T &value)
Definition: Meta.h:74
Rect bounds
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1106
Element(Kind kind)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:969
Color fill
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1191
Definition: Array.hpp:107
std::bitset< 64 > Bits
Definition: Libraries/Graphics/src/include/Graphics/Object.h:873
Point dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1160
void endArray()
Definition: Meta.h:148
The source of colour for drawing.
Definition: Asset.h:271
Used when defining data structures.
Definition: ObjectBase.hpp:51
Point shift
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1188
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1060
Definition: Asset.h:471
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:465
#define GRAPHICS_TEXT_ELEMENT_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:957
GlyphMetrics Metrics
Definition: Libraries/Graphics/src/include/Graphics/Object.h:875
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:256
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:546
Scale scale
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1029
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:372
virtual PixelFormat getPixelFormat() const =0
Get native pixel format.
Point source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1136
#define XX(name, comment)
Definition: DirectoryTemplate.h:47
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
Size of rectangular area (width x height)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:124
virtual uint8_t height() const =0
Get height of typeface, same for all characters.
constexpr Size scale() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:806
void read(void *buffer, size_t length) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:666
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:740
bool wrapy
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1190
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:845
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:575
Kind kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:990
PixelFormat pixelFormat
Definition: Libraries/Graphics/src/include/Graphics/Object.h:753
SurfaceObject(Surface &surface, const Rect &dest, Point source)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1124
PackedColor getColor(Color color) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:785
Point point
Definition: Libraries/Graphics/src/include/Graphics/Object.h:209
uint16_t width
Definition: Asset.h:452
String toString(Graphics::Object::Kind kind)
virtual Surface * createSurface(size_t bufferSize=0)=0
Create a surface for use with this render target.
Definition: Virtual.h:30
MemoryImageObject(PixelFormat format, Size size)
FileImageObject(IFS::FileStream *file, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:833
virtual const TypeFace * getFace(FontStyles style) const =0
TPoint< int16_t > Point
Definition: Libraries/Graphics/src/include/Graphics/Types.h:299
Surface * createSurface(size_t bufferSize=0) override
Create a surface for use with this render target.
FilledEllipseObject(const Brush &brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:503
CopyObject(const Rect &source, Point dest)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1145
virtual Bits getBits(uint16_t row) const =0
A drawable object inherits from this virtual base class.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:115
An arc outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:527
uint16_t h
Definition: Libraries/Graphics/src/include/Graphics/Types.h:126
IDataSourceStream * createSubStream(uint32_t offset, size_t size)
Graphics objects call this method to obtain access to resource data.
Origin
Points on a compass.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:90
uint16_t width
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1069
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Definition: Stream.hpp:53
FilledCircleObject(Brush brush, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:433
bool isValid() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:803
virtual Kind kind() const =0
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1052
OwnedLinkedObjectListTemplate< Element > OwnedList
Definition: Libraries/Graphics/src/include/Graphics/Object.h:955
Object & object
Definition: Libraries/Graphics/src/include/Graphics/Object.h:185
An ellipse outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:473
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1178
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:605
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1009
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1017
Rect source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1159
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:413
void beginArray(const String &name, const String &type)
Definition: Meta.h:137
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:520
Options options
Definition: Libraries/Graphics/src/include/Graphics/Object.h:914
constexpr uint8_t scaleY() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:791
virtual bool init()=0
Initialise the object, e.g. parse header content and obtain dimensions.
Image stored as raw pixels in a specific format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:716
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:467
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:456
virtual bool execute(Surface &surface)=0
Called to do some writing to the surface.
const Metrics & getMetrics() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:907
uint8_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:270
PixelFormat getFormat() const
Definition: resource.h:163
ScrollObject(const Rect &area, Point shift, bool wrapx, bool wrapy, Color fill)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1169
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
A filled circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:430
Point operator[](unsigned index) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:366
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
PolylineObject(Pen pen, size_t count)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:321
Definition: Asset.h:684
Size imageSize
Definition: Libraries/Graphics/src/include/Graphics/Object.h:632
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:149
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:745
uint8_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:239
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:121
#define GRAPHICS_OBJECT_KIND_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:53
Definition: Libraries/Graphics/src/include/Graphics/Types.h:751
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
const Blend * blender
Definition: Libraries/Graphics/src/include/Graphics/Object.h:267
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:208
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:650
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:380
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:698
Glyph metrics.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:857
Delegate< void(DrawingObject *drawing)> Callback
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1202
std::unique_ptr< Point[]> points
Definition: Libraries/Graphics/src/include/Graphics/Object.h:381
Blend operations.
Definition: Blend.h:60
Rect pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:186
~MemoryImageObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:796
TextElement * addText(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1081
ColorElement * addColor(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1096
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:887
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:548
PixelFormat
Definition: Colors.h:295
RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1055
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:407
void write(MetaWriter &meta) const override
RawImageObject(IDataSourceStream *image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:719
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:493
virtual String getTypeStr() const
ColorElement(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1038
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:237
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:588
FontElement(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1012
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1153
BitmapObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:685
Point pt1
Definition: Libraries/Graphics/src/include/Graphics/Object.h:305
PixelBuffer pack(PixelBuffer src, PixelFormat format)
Convert RGB colour into packed format.
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:450
Brush back
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1049
const TypeFace & typeface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1031
A filled arc.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:554
Rect area
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1187
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:562
Size getSize() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:595
Describes a copy operation within the same surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1142
Base class for a loaded typeface, e.g. Sans 16pt bold.
Definition: Asset.h:524
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1035
uint16_t numPoints
Definition: Libraries/Graphics/src/include/Graphics/Object.h:382
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Empty base class to support object enumeration Non-virtual to avoid bloat.
Definition: Meta.h:57
Describes a target surface and corresponding source location.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1115
Kind kind() const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:152
virtual PixelFormat getPixelFormat() const =0
All surfaces support the same pixel format.
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:810
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:466
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:573
Interface for objects which support writing via surfaces.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:759
AssetList assets
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1228
uint32_t bmSize
Definition: resource.h:153
FilledArcObject(Brush brush, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:557
Describes a scrolling operation.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1166
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:574
Virtual base class for an image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:581
Renderer(const Location &location)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:94
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
StreamImageObject(IDataSourceStream *source, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:641
A rectangular outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:215
Element::OwnedList elements
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1107
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
bool wrapx
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1189
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:268
Image surface using filing system as backing store.
Definition: ImageSurface.h:152
Colour in device pixel format.
Definition: Colors.h:339
PointObject(const Brush &brush, const Point &point)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:196
ArcObject(Pen pen, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:530
virtual size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const =0
Read pixels in requested format.
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:238
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:929
Definition: Delegate.h:20
Definition: resource.h:150
#define debug_i
Definition: debug_progmem.h:107
virtual Renderer * createRenderer(const Location &location) const =0
Create a software renderer for this object.
size_t length(void) const
Obtain the String length in characters, excluding NUL terminator.
Definition: WString.h:243
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1024
@ Start
SEEK_SET: Start of file.
RectObject(const Pen &pen, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:218
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:424
const Blend * blend
Definition: Libraries/Graphics/src/include/Graphics/Object.h:187
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:521
uint32_t streamPos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:672
IDataSourceStream & getStream() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1222
Location location
Definition: Libraries/Graphics/src/include/Graphics/Object.h:109
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1227
T * addElement(T *elem)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1075
Color
Standard colour definitions.
Definition: Colors.h:227