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 
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(const 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  const Object& object;
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 
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:
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};
251  uint8_t radius{0};
252 };
253 
257 class LineObject : public ObjectTemplate<Object::Kind::Line>
258 {
259 public:
261  {
262  }
263 
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{};
288 };
289 
299 class PolylineObject : public ObjectTemplate<Object::Kind::Polyline>
300 {
301 public:
302  PolylineObject(Pen pen, size_t count) : pen(pen), points(std::make_unique<Point[]>(count)), numPoints(count)
303  {
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  auto pt1 = rect.topLeft();
319  auto pt2 = rect.bottomRight();
320  if(radius == 0) {
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(pt1.x + radius, pt1.y),
333  Point(pt2.x - radius, pt1.y),
334  Point(pt1.x + radius, pt2.y - t),
335  Point(pt2.x - radius, pt2.y - t),
336  Point(pt1.x, pt1.y + radius),
337  Point(pt1.x, pt2.y - radius),
338  Point(pt2.x - t, pt1.y + radius),
339  Point(pt2.x - t, pt2.y - 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;
362  uint16_t numPoints;
363  bool connected{true};
364 };
365 
369 class CircleObject : public ObjectTemplate<Object::Kind::Circle>
370 {
371 public:
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 
404  uint16_t radius;
405 };
406 
410 class FilledCircleObject : public ObjectTemplate<Object::Kind::FilledCircle>
411 {
412 public:
414  {
415  }
416 
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 
447  uint16_t radius;
448 };
449 
453 class EllipseObject : public ObjectTemplate<Object::Kind::Ellipse>
454 {
455 public:
457  {
458  }
459 
460  EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
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:
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)
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:
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:
613 };
614 
619 {
620 public:
622  {
623  }
624 
625  StreamImageObject(const FSTR::String& image) : StreamImageObject(new FSTR::Stream(image), {})
626  {
627  }
628 
629  void write(MetaWriter& meta) const override
630  {
631  ImageObject::write(meta);
632  if(stream) {
633  meta.write("stream", stream->getName());
634  }
635  }
636 
637 protected:
638  void seek(uint32_t offset) const
639  {
640  if(streamPos != offset) {
641  streamPos = stream->seekFrom(offset, SeekOrigin::Start);
642  }
643  }
644 
645  void read(void* buffer, size_t length) const
646  {
647  streamPos += stream->readBytes(static_cast<uint8_t*>(buffer), length);
648  }
649 
650  std::unique_ptr<IDataSourceStream> stream;
651  mutable uint32_t streamPos{};
652 };
653 
660 {
661 public:
663 
665  : StreamImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getSize())
666  {
667  }
668 
669  void write(MetaWriter& meta) const override
670  {
672  meta.write("size", imageSize);
673  }
674 
675  bool init() override;
676 
677  PixelFormat getPixelFormat() const override
678  {
679  return PixelFormat::RGB24;
680  }
681 
682  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
683 
684 private:
685  uint32_t imageOffset;
686  uint16_t stride;
687  bool flip;
688 };
689 
696 {
697 public:
699  : StreamImageObject(image, size), pixelFormat(format)
700  {
701  }
702 
703  RawImageObject(const FSTR::String& image, PixelFormat format, Size size)
704  : RawImageObject(new FSTR::Stream(image), format, size)
705  {
706  }
707 
709  : RawImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getFormat(), image.getSize())
710  {
711  }
712 
713  void write(MetaWriter& meta) const override
714  {
716  meta.write("pixelFormat", pixelFormat);
717  }
718 
719  bool init() override
720  {
721  return true;
722  }
723 
724  PixelFormat getPixelFormat() const override
725  {
726  return pixelFormat;
727  }
728 
729  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
730 
731 protected:
733 };
734 
739 {
740 public:
741  virtual ~RenderTarget()
742  {
743  }
744 
748  virtual Size getSize() const = 0;
749 
753  virtual PixelFormat getPixelFormat() const = 0;
754 
762  virtual Surface* createSurface(size_t bufferSize = 0) = 0;
763 
765  {
766  return pack(color, getPixelFormat());
767  }
768 };
769 
771 {
772 public:
774 
776  {
777  debug_i("[IMG] %p, destroyed", imageData);
778  }
779 
780  Surface* createSurface(const Blend* blend, size_t bufferSize = 0);
781 
782  bool isValid() const
783  {
784  return imageData != nullptr;
785  }
786 
787  /* RenderTarget */
788 
789  Size getSize() const override
790  {
791  return imageSize;
792  }
793 
794  PixelFormat getPixelFormat() const override
795  {
797  }
798 
799  Surface* createSurface(size_t bufferSize = 0) override
800  {
801  return createSurface(nullptr, bufferSize);
802  }
803 
804 private:
805  size_t imageBytes;
806  uint8_t* imageData{nullptr};
807 };
808 
810 {
811 public:
813  : RawImageObject(file, format, size), imageBytes(size.w * size.h * getBytesPerPixel(format))
814  {
815  }
816 
817  /* RenderTarget */
818 
819  Size getSize() const override
820  {
821  return imageSize;
822  }
823 
824  PixelFormat getPixelFormat() const override
825  {
827  }
828 
829  Surface* createSurface(size_t bufferSize = 0) override;
830 
831 private:
832  friend FileImageSurface;
833 
834  size_t imageBytes;
835 };
836 
849 class GlyphObject : public ImageObject
850 {
851 public:
852  using Bits = std::bitset<64>;
855 
857  : ImageObject(options.scale.scale(metrics.size())), metrics(metrics), options(options)
858  {
859  }
860 
861  Kind kind() const override
862  {
863  return Kind::Glyph;
864  }
865 
866  PixelFormat getPixelFormat() const override
867  {
868  return PixelFormat::None;
869  }
870 
871  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
872 
873  virtual Bits getBits(uint16_t row) const = 0;
874 
884  virtual void readAlpha(void* buffer, Point origin, size_t stride) const = 0;
885 
886  const Metrics& getMetrics() const
887  {
888  return metrics;
889  }
890 
891 protected:
893  mutable Options options;
894 };
895 
901 class TextObject : public ObjectTemplate<Object::Kind::Text>
902 {
903 public:
905  {
906  }
907 
908  void write(MetaWriter& meta) const override
909  {
910  meta.write("bounds", bounds);
911  meta.beginArray("elements", "Element");
912  const TextElement* text{nullptr};
913  for(auto& obj : elements) {
914  meta.write(obj);
915  if(obj.kind == Element::Kind::Text) {
916  text = static_cast<const TextElement*>(&obj);
917  } else if(obj.kind == Element::Kind::Run) {
918  auto& run = static_cast<const RunElement&>(obj);
919  String s;
920  s.setLength(run.length);
921  text->text.read(run.offset, s.begin(), s.length());
922  meta.write("text", s);
923  }
924  }
925  // meta.writeArray("elements", "Element", elements);
926  meta.endArray();
927  }
928 
929  Renderer* createRenderer(const Location& location) const override;
930 
931  class Element : public LinkedObjectTemplate<Element>, public Meta
932  {
933  public:
935 
936 #define GRAPHICS_TEXT_ELEMENT_MAP(XX) \
937  XX(Text) \
938  XX(Font) \
939  XX(Color) \
940  XX(Run)
941 
942  enum class Kind : uint8_t {
943 #define XX(tag) tag,
945 #undef XX
946  };
947 
949  {
950  }
951 
952  /* Meta */
953 
955  {
956  switch(kind) {
957 #define XX(tag) \
958  case Kind::tag: \
959  return F(#tag);
961 #undef XX
962  default:
963  return nullptr;
964  }
965  }
966 
967  virtual void write(MetaWriter& meta) const = 0;
968 
970  };
971  static_assert(sizeof(Element) == 12, "Element");
972 
973  class TextElement : public Element
974  {
975  public:
977  {
978  }
979 
980  void write(MetaWriter& meta) const override
981  {
982  meta.write("text", text);
983  }
984 
985  const TextAsset& text;
986  };
987 
988  class FontElement : public Element
989  {
990  public:
993  {
994  }
995 
996  void write(MetaWriter& meta) const override
997  {
998  meta.write("typeface", typeface);
999  meta.write("scale", scale);
1000  meta.write("style", style);
1001  }
1002 
1003  uint16_t height() const
1004  {
1005  return scale.scaleY(typeface.height());
1006  }
1007 
1011  };
1012  static_assert(sizeof(FontElement) == 16, "RunElement");
1013 
1014  class ColorElement : public Element
1015  {
1016  public:
1018  {
1019  }
1020 
1021  void write(MetaWriter& meta) const override
1022  {
1023  meta.write("fore", fore);
1024  meta.write("back", back);
1025  }
1026 
1027  Brush fore{Color::WHITE};
1028  Brush back{Color::BLACK};
1029  };
1030 
1031  class RunElement : public Element
1032  {
1033  public:
1034  RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1036  {
1037  }
1038 
1039  void write(MetaWriter& meta) const override
1040  {
1041  meta.write("pos", pos);
1042  meta.write("width", width);
1043  meta.write("offset", offset);
1044  meta.write("length", length);
1045  }
1046 
1048  uint16_t width;
1049  uint16_t offset;
1050  uint8_t length;
1051  };
1052  static_assert(sizeof(RunElement) == 20, "RunElement");
1053 
1054  template <typename T> T* addElement(T* elem)
1055  {
1056  elements.add(elem);
1057  return elem;
1058  }
1059 
1061  {
1062  return addElement(new TextElement(text));
1063  }
1064 
1065  FontElement* addFont(const Font& font, Scale scale, FontStyles style)
1066  {
1067  return addElement(new FontElement(*font.getFace(style), scale, style));
1068  }
1069 
1070  FontElement* addFont(const TypeFace& typeface, Scale scale, FontStyles style)
1071  {
1072  return addElement(new FontElement(typeface, scale, style));
1073  }
1074 
1075  ColorElement* addColor(const Brush& fore, const Brush& back)
1076  {
1077  return addElement(new ColorElement(fore, back));
1078  }
1079 
1080  RunElement* addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1081  {
1082  return addElement(new RunElement(pos, width, offset, length));
1083  }
1084 
1087 };
1088 
1094 class SurfaceObject : public ObjectTemplate<Object::Kind::Surface>
1095 {
1096 public:
1104  {
1105  }
1106 
1107  Renderer* createRenderer(const Location& location) const override;
1108 
1109  /* Meta */
1110 
1111  void write(MetaWriter& meta) const override;
1112 
1116 };
1117 
1121 class CopyObject : public ObjectTemplate<Object::Kind::Copy>
1122 {
1123 public:
1125  {
1126  }
1127 
1128  Renderer* createRenderer(const Location& location) const override;
1129 
1130  /* Meta */
1131 
1132  void write(MetaWriter& meta) const override
1133  {
1134  meta.write("source", source);
1135  meta.write("dest", dest);
1136  }
1137 
1140 };
1141 
1145 class ScrollObject : public ObjectTemplate<Object::Kind::Scroll>
1146 {
1147 public:
1150  {
1151  }
1152 
1153  Renderer* createRenderer(const Location& location) const override;
1154 
1155  /* Meta */
1156 
1157  void write(MetaWriter& meta) const override
1158  {
1159  meta.write("area", area);
1160  meta.write("shift", shift);
1161  meta.write("wrapx", wrapx);
1162  meta.write("wrapy", wrapy);
1163  meta.write("fill", fill);
1164  }
1165 
1168  bool wrapx;
1169  bool wrapy;
1171 };
1172 
1178 class DrawingObject : public ObjectTemplate<Object::Kind::Drawing>
1179 {
1180 public:
1181  using Callback = Delegate<void(DrawingObject* drawing)>;
1182 
1184  {
1185  }
1186 
1187  DrawingObject(const FSTR::ObjectBase& source) : DrawingObject(new FSTR::Stream(source))
1188  {
1189  }
1190 
1191  DrawingObject(String&& content) : stream(new MemoryDataStream(std::move(content)))
1192  {
1193  }
1194 
1195  void write(MetaWriter& meta) const override;
1196 
1197  Renderer* createRenderer(const Location& location) const override;
1198 
1200  {
1201  return *stream.get();
1202  }
1203 
1204  std::unique_ptr<IDataSourceStream> stream;
1206 };
1207 
1208 } // namespace Graphics
1209 
#define XX(name, comment)
Definition: DirectoryTemplate.h:47
#define GRAPHICS_OBJECT_KIND_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:34
String toString(Graphics::Object::Kind kind)
#define GRAPHICS_TEXT_ELEMENT_MAP(XX)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:936
@ Start
SEEK_SET: Start of file.
Definition: Delegate.h:20
Used when defining data structures.
Definition: ObjectBase.hpp:33
describes a counted string stored in flash memory
Definition: String.hpp:174
An arc outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:508
ArcObject(Pen pen, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:510
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:527
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:526
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:525
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:528
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:515
Definition: Asset.h:753
A BMP format image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:660
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:669
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:677
BitmapObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:664
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
Blend operations.
Definition: Blend.h:42
The source of colour for drawing.
Definition: Asset.h:253
A circle outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:370
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:403
CircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:380
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:402
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:404
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:387
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:393
CircleObject(const Pen &pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:376
Describes a copy operation within the same surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1122
Point dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1139
Rect source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1138
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1132
CopyObject(const Rect &source, Point dest)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1124
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
A collection of line and curve drawing operations.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1179
AssetList assets
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1205
DrawingObject(IDataSourceStream *content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1183
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1204
DrawingObject(String &&content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1191
IDataSourceStream & getStream() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1199
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
DrawingObject(const FSTR::ObjectBase &source)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1187
void write(MetaWriter &meta) const override
An ellipse outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:454
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:474
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:473
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:465
EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:460
EllipseObject(Pen pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:456
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:810
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:824
Surface * createSurface(size_t bufferSize=0) override
Create a surface for use with this render target.
FileImageObject(IFS::FileStream *file, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:812
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:819
Image surface using filing system as backing store.
Definition: ImageSurface.h:134
A filled arc.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:535
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:552
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:555
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:553
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:542
FilledArcObject(Brush brush, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:537
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:554
A filled circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:411
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:430
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:447
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:446
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:436
FilledCircleObject(Brush brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:417
FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:422
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
FilledCircleObject(Brush brush, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:413
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:445
A filled ellipse.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:481
FilledEllipseObject(const Brush &brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:483
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:492
FilledEllipseObject(const Brush &brush, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:487
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:500
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:501
A filled rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:227
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
FilledRectObject(Brush brush, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:229
uint8_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:251
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:237
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:249
FilledRectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:233
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:250
const Blend * blender
Definition: Libraries/Graphics/src/include/Graphics/Object.h:248
Base class for a loaded font.
Definition: Asset.h:572
virtual const TypeFace * getFace(FontStyles style) const =0
A character glyph image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:850
std::bitset< 64 > Bits
Definition: Libraries/Graphics/src/include/Graphics/Object.h:852
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:866
virtual void readAlpha(void *buffer, Point origin, size_t stride) const =0
Obtain glyph information as block of 8-bit alpha values.
GlyphObject(const Metrics &metrics, const Options &options)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:856
const Metrics & getMetrics() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:886
Metrics metrics
Definition: Libraries/Graphics/src/include/Graphics/Object.h:892
virtual Bits getBits(uint16_t row) const =0
Options options
Definition: Libraries/Graphics/src/include/Graphics/Object.h:893
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
Kind kind() const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:861
Virtual base class for an image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:562
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:568
virtual bool init()=0
Initialise the object, e.g. parse header content and obtain dimensions.
virtual PixelFormat getPixelFormat() const =0
Get native pixel format.
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:585
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Size getSize() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:575
ImageObject(Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:564
Size imageSize
Definition: Libraries/Graphics/src/include/Graphics/Object.h:612
virtual size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const =0
Read pixels in requested format.
uint16_t width() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:580
A drawn line.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:258
LineObject(int x0, int y0, int x1, int y1, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:272
LineObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:260
LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:268
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:276
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:285
LineObject(Pen pen, Point pt1, Point pt2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:264
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point pt1
Definition: Libraries/Graphics/src/include/Graphics/Object.h:286
Point pt2
Definition: Libraries/Graphics/src/include/Graphics/Object.h:287
Definition: Libraries/Graphics/src/include/Graphics/Object.h:771
Surface * createSurface(const Blend *blend, size_t bufferSize=0)
bool isValid() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:782
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:789
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:794
Surface * createSurface(size_t bufferSize=0) override
Create a surface for use with this render target.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:799
~MemoryImageObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:775
MemoryImageObject(PixelFormat format, Size size)
Writes object content in readable format for debugging.
Definition: Meta.h:48
void writeArray(const String &name, const String &type, const T *values, unsigned count)
Definition: Meta.h:135
void beginArray(const String &name, const String &type)
Definition: Meta.h:118
void endArray()
Definition: Meta.h:129
std::enable_if< std::is_base_of< Meta, T >::value, void >::type write(const String &name, const T &value)
Definition: Meta.h:55
Empty base class to support object enumeration Non-virtual to avoid bloat.
Definition: Meta.h:39
Definition: Libraries/Graphics/src/include/Graphics/Object.h:131
Kind kind() const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:133
A drawable object inherits from this virtual base class.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:97
virtual void write(MetaWriter &meta) const =0
virtual Renderer * createRenderer(const Location &location) const =0
Create a software renderer for this object.
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:102
bool operator==(const Object &other) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:119
virtual String getTypeStr() const
virtual Kind kind() const =0
Definition: Asset.h:403
uint16_t width
Definition: Asset.h:433
A single pixel == 1x1 rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:175
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:189
Point point
Definition: Libraries/Graphics/src/include/Graphics/Object.h:190
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:181
PointObject(const Brush &brush, const Point &point)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:177
A sequence of lines.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:300
uint16_t numPoints
Definition: Libraries/Graphics/src/include/Graphics/Object.h:362
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:360
PolylineObject(Pen pen, const Rect &rect, uint8_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:316
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
PolylineObject(const RectObject &object)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:312
std::unique_ptr< Point[]> points
Definition: Libraries/Graphics/src/include/Graphics/Object.h:361
bool connected
Definition: Libraries/Graphics/src/include/Graphics/Object.h:363
Point operator[](unsigned index) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:346
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:352
PolylineObject(Pen pen, size_t count)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:302
PolylineObject(Pen pen, ParamTypes... params)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:307
Image stored as raw pixels in a specific format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:696
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:724
RawImageObject(const FSTR::String &image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:703
RawImageObject(IDataSourceStream *image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:698
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:713
size_t readPixels(const Location &loc, PixelFormat format, void *buffer, uint16_t width) const override
Read pixels in requested format.
PixelFormat pixelFormat
Definition: Libraries/Graphics/src/include/Graphics/Object.h:732
RawImageObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:708
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:719
A rectangular outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:197
RectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:203
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:219
RectObject(const Pen &pen, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:199
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:218
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:207
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
uint8_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:220
Reference to another object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:151
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Rect pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:167
ReferenceObject(const Object &object, const Rect &pos, const Blend *blend=nullptr)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:153
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:158
const Object & object
Definition: Libraries/Graphics/src/include/Graphics/Object.h:166
const Blend * blend
Definition: Libraries/Graphics/src/include/Graphics/Object.h:168
Interface for objects which support writing via surfaces.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:739
virtual ~RenderTarget()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:741
PackedColor getColor(Color color) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:764
virtual PixelFormat getPixelFormat() const =0
All surfaces support the same pixel format.
virtual Size getSize() const =0
Get target dimensions.
virtual Surface * createSurface(size_t bufferSize=0)=0
Create a surface for use with this render target.
Virtual base class to manage rendering of various types of information to a surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:66
virtual bool execute(Surface &surface)=0
Called to do some writing to the surface.
Location location
Definition: Libraries/Graphics/src/include/Graphics/Object.h:90
virtual ~Renderer()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:79
Renderer(const Location &location)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:75
Definition: Libraries/Graphics/src/include/Graphics/Types.h:733
constexpr uint8_t scaleY() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:772
Describes a scrolling operation.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1146
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Color fill
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1170
bool wrapy
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1169
ScrollObject(const Rect &area, Point shift, bool wrapx, bool wrapy, Color fill)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1148
Rect area
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1166
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1157
bool wrapx
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1168
Point shift
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1167
Image whose contents are stored in a stream, typically in a file or flash memory.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:619
uint32_t streamPos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:651
StreamImageObject(const FSTR::String &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:625
void seek(uint32_t offset) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:638
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:629
void read(void *buffer, size_t length) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:645
StreamImageObject(IDataSourceStream *source, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:621
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:650
Describes a target surface and corresponding source location.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1095
Rect dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1114
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1115
void write(MetaWriter &meta) const override
Surface & surface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1113
SurfaceObject(Surface &surface, const Rect &dest, Point source)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1103
Interface for a drawing surface.
Definition: Surface.h:42
Definition: Asset.h:666
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1015
Brush fore
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1027
Brush back
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1028
ColorElement(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1017
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1021
Definition: Libraries/Graphics/src/include/Graphics/Object.h:932
Kind kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:969
virtual void write(MetaWriter &meta) const =0
Element(Kind kind)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:948
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:942
String getTypeStr() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:954
Definition: Libraries/Graphics/src/include/Graphics/Object.h:989
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1003
Scale scale
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1008
const TypeFace & typeface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1010
FontElement(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:991
FontStyles style
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1009
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:996
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1032
RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1034
uint16_t offset
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1049
Point pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1047
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1039
uint8_t length
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1050
uint16_t width
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1048
Definition: Libraries/Graphics/src/include/Graphics/Object.h:974
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:980
const TextAsset & text
Definition: Libraries/Graphics/src/include/Graphics/Object.h:985
TextElement(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:976
A block of text consisting of zero or more segments.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:902
Rect bounds
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1085
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
FontElement * addFont(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1070
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:908
RunElement * addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1080
FontElement * addFont(const Font &font, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1065
T * addElement(T *elem)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1054
ColorElement * addColor(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1075
TextObject(const Rect &bounds)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:904
Element::OwnedList elements
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1086
TextElement * addText(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1060
Definition: Asset.h:453
Base class for a loaded typeface, e.g. Sans 16pt bold.
Definition: Asset.h:506
virtual uint8_t height() const =0
Get height of typeface, same for all characters.
Base class for read-only stream.
Definition: DataSourceStream.h:46
File stream class.
Definition: IFS/FileStream.h:23
Definition: LinkedObjectList.h:90
bool add(ObjectType *object)
Definition: LinkedObjectList.h:134
Base class template for linked items with type casting.
Definition: LinkedObject.h:62
Read/write stream using expandable memory buffer.
Definition: MemoryDataStream.h:27
Class template for singly-linked list of objects.
Definition: LinkedObjectList.h:175
Base Stream class.
Definition: Wiring/Stream.h:33
The String class.
Definition: WString.h:137
bool setLength(size_t length)
set the string length accordingly, expanding if necessary
char * begin()
Get a modifiable pointer to String content.
Definition: WString.h:626
size_t length(void) const
Obtain the String length in characters, excluding NUL terminator.
Definition: WString.h:244
#define debug_i
Definition: debug_progmem.h:99
Definition: Array.hpp:108
IDataSourceStream * createSubStream(uint32_t offset, size_t size)
Graphics objects call this method to obtain access to resource data.
Definition: Virtual.h:31
PixelBuffer pack(PixelBuffer src, PixelFormat format)
Convert RGB colour into packed format.
TPoint< int16_t > Point
Definition: Libraries/Graphics/src/include/Graphics/Types.h:280
Origin
Points on a compass.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:71
PixelFormat
Definition: Colors.h:295
uint8_t getBytesPerPixel(PixelFormat format)
Get number of bytes required to store a pixel in the given format.
Definition: Colors.h:331
Color
Standard colour definitions.
Definition: Colors.h:227
Glyph metrics.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:838
Identifies position within bounding rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:683
Colour in device pixel format.
Definition: Colors.h:339
Location and size of rectangular area (x, y, w, h)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:287
Point topLeft() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:417
Point bottomRight() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:432
Definition: resource.h:112
Size of rectangular area (width x height)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:105
uint16_t w
Definition: Libraries/Graphics/src/include/Graphics/Types.h:106
uint16_t h
Definition: Libraries/Graphics/src/include/Graphics/Types.h:107
T x
Definition: Libraries/Graphics/src/include/Graphics/Types.h:134
T y
Definition: Libraries/Graphics/src/include/Graphics/Types.h:135