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  ReferenceObject(const Object& object, const Rect& pos, const Point& sourceOffset, const Blend* blend = nullptr)
160  {
161  }
162 
163  void write(MetaWriter& meta) const override
164  {
165  meta.write("pos", pos);
166  meta.write("object", object);
167  }
168 
169  Renderer* createRenderer(const Location& location) const override;
170 
171  const Object& object;
174  const Blend* blend;
175 };
176 
180 class PointObject : public ObjectTemplate<Object::Kind::Point>
181 {
182 public:
184  {
185  }
186 
187  void write(MetaWriter& meta) const override
188  {
189  meta.write("brush", brush);
190  meta.write("point", point);
191  }
192 
193  Renderer* createRenderer(const Location& location) const override;
194 
197 };
198 
202 class RectObject : public ObjectTemplate<Object::Kind::Rect>
203 {
204 public:
205  RectObject(const Pen& pen, const Rect& rect, uint8_t radius = 0) : pen(pen), rect(rect), radius(radius)
206  {
207  }
208 
209  RectObject(int x0, int y0, int w, int h, Color color) : RectObject(color, Rect(x0, y0, w, h))
210  {
211  }
212 
213  void write(MetaWriter& meta) const override
214  {
215  meta.write("pen", pen);
216  meta.write("rect", rect);
217  if(radius != 0) {
218  meta.write("radius", radius);
219  }
220  }
221 
222  Renderer* createRenderer(const Location& location) const override;
223 
226  uint8_t radius{0};
227 };
228 
232 class FilledRectObject : public ObjectTemplate<Object::Kind::FilledRect>
233 {
234 public:
236  {
237  }
238 
239  FilledRectObject(int x0, int y0, int w, int h, Color color) : FilledRectObject(color, Rect(x0, y0, w, h))
240  {
241  }
242 
243  void write(MetaWriter& meta) const override
244  {
245  meta.write("brush", brush);
246  meta.write("rect", rect);
247  if(radius != 0) {
248  meta.write("radius", radius);
249  }
250  }
251 
252  Renderer* createRenderer(const Location& location) const override;
253 
254  const Blend* blender{nullptr};
257  uint8_t radius{0};
258 };
259 
263 class LineObject : public ObjectTemplate<Object::Kind::Line>
264 {
265 public:
267  {
268  }
269 
271  {
272  }
273 
274  LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2) : LineObject(pen, Point(x1, y1), Point(x2, y2))
275  {
276  }
277 
278  LineObject(int x0, int y0, int x1, int y1, Color color) : LineObject(color, Point(x0, y0), Point(x1, y1))
279  {
280  }
281 
282  void write(MetaWriter& meta) const override
283  {
284  meta.write("pen", pen);
285  meta.write("pt1", pt1);
286  meta.write("pt2", pt2);
287  }
288 
289  Renderer* createRenderer(const Location& location) const override;
290 
291  Pen pen{};
294 };
295 
305 class PolylineObject : public ObjectTemplate<Object::Kind::Polyline>
306 {
307 public:
308  PolylineObject(Pen pen, size_t count) : pen(pen), points(std::make_unique<Point[]>(count)), numPoints(count)
309  {
310  }
311 
312  template <typename... ParamTypes>
313  PolylineObject(Pen pen, ParamTypes... params) : pen(pen), numPoints(sizeof...(ParamTypes))
314  {
315  this->points.reset(new Point[sizeof...(ParamTypes)]{params...});
316  }
317 
318  PolylineObject(const RectObject& object) : PolylineObject(object.pen, object.rect, object.radius)
319  {
320  }
321 
322  PolylineObject(Pen pen, const Rect& rect, uint8_t radius) : pen(pen)
323  {
324  auto pt1 = rect.topLeft();
325  auto pt2 = rect.bottomRight();
326  if(radius == 0) {
327  points.reset(new Point[5]{
328  pt1,
329  {pt2.x, pt1.y},
330  pt2,
331  {pt1.x, pt2.y},
332  pt1,
333  });
334  numPoints = 5;
335  } else {
336  auto t = pen.width - 1;
337  points.reset(new Point[8]{
338  Point(pt1.x + radius, pt1.y),
339  Point(pt2.x - radius, pt1.y),
340  Point(pt1.x + radius, pt2.y - t),
341  Point(pt2.x - radius, pt2.y - t),
342  Point(pt1.x, pt1.y + radius),
343  Point(pt1.x, pt2.y - radius),
344  Point(pt2.x - t, pt1.y + radius),
345  Point(pt2.x - t, pt2.y - radius),
346  });
347  numPoints = 8;
348  connected = false;
349  }
350  }
351 
352  Point operator[](unsigned index) const
353  {
354  assert(index < numPoints);
355  return points[index];
356  }
357 
358  void write(MetaWriter& meta) const override
359  {
360  meta.write("pen", pen);
361  meta.writeArray("points", "Point", points.get(), numPoints);
362  }
363 
364  Renderer* createRenderer(const Location& location) const override;
365 
367  std::unique_ptr<Point[]> points;
368  uint16_t numPoints;
369  bool connected{true};
370 };
371 
375 class CircleObject : public ObjectTemplate<Object::Kind::Circle>
376 {
377 public:
379  {
380  }
381 
382  CircleObject(const Pen& pen, const Rect& rect) : CircleObject(pen, rect.centre(), std::min(rect.w, rect.h) / 2)
383  {
384  }
385 
386  CircleObject(int16_t x, int16_t y, uint16_t radius, Color color) : CircleObject(color, Point{x, y}, radius)
387  {
388  }
389 
393  Rect getRect() const
394  {
395  uint16_t dia = radius * 2;
396  return Rect(centre.x - radius, centre.y - radius, dia, dia);
397  }
398 
399  void write(MetaWriter& meta) const override
400  {
401  meta.write("pen", pen);
402  meta.write("centre", centre);
403  meta.write("radius", radius);
404  }
405 
406  Renderer* createRenderer(const Location& location) const override;
407 
410  uint16_t radius;
411 };
412 
416 class FilledCircleObject : public ObjectTemplate<Object::Kind::FilledCircle>
417 {
418 public:
420  {
421  }
422 
424  : FilledCircleObject(brush, rect.centre(), std::min(rect.w, rect.h) / 2)
425  {
426  }
427 
428  FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
429  : FilledCircleObject(color, Point{x, y}, radius)
430  {
431  }
432 
436  Rect getRect() const
437  {
438  uint16_t dia = radius * 2;
439  return Rect(centre.x - radius, centre.y - radius, dia, dia);
440  }
441 
442  void write(MetaWriter& meta) const override
443  {
444  meta.write("brush", brush);
445  meta.write("centre", centre);
446  meta.write("radius", radius);
447  }
448 
449  Renderer* createRenderer(const Location& location) const override;
450 
453  uint16_t radius;
454 };
455 
459 class EllipseObject : public ObjectTemplate<Object::Kind::Ellipse>
460 {
461 public:
463  {
464  }
465 
466  EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
467  : pen(pen), rect(centre, Size(a * 2, b * 2), Origin::Centre)
468  {
469  }
470 
471  void write(MetaWriter& meta) const override
472  {
473  meta.write("pen", pen);
474  meta.write("rect", rect);
475  }
476 
477  Renderer* createRenderer(const Location& location) const override;
478 
481 };
482 
486 class FilledEllipseObject : public ObjectTemplate<Object::Kind::FilledEllipse>
487 {
488 public:
490  {
491  }
492 
493  FilledEllipseObject(const Brush& brush, Point centre, uint16_t a, uint16_t b)
494  : brush(brush), rect(centre, Size(a * 2, b * 2), Origin::Centre)
495  {
496  }
497 
498  void write(MetaWriter& meta) const override
499  {
500  meta.write("brush", brush);
501  meta.write("rect", rect);
502  }
503 
504  Renderer* createRenderer(const Location& location) const override;
505 
508 };
509 
513 class ArcObject : public ObjectTemplate<Object::Kind::Arc>
514 {
515 public:
516  ArcObject(Pen pen, const Rect& rect, int16_t startAngle, int16_t endAngle)
518  {
519  }
520 
521  void write(MetaWriter& meta) const override
522  {
523  meta.write("pen", pen);
524  meta.write("rect", rect);
525  meta.write("startAngle", startAngle);
526  meta.write("endAngle", endAngle);
527  }
528 
529  Renderer* createRenderer(const Location& location) const override;
530 
533  int16_t startAngle;
534  int16_t endAngle;
535 };
536 
540 class FilledArcObject : public ObjectTemplate<Object::Kind::FilledArc>
541 {
542 public:
545  {
546  }
547 
548  void write(MetaWriter& meta) const override
549  {
550  meta.write("brush", brush);
551  meta.write("rect", rect);
552  meta.write("startAngle", startAngle);
553  meta.write("endAngle", endAngle);
554  }
555 
556  Renderer* createRenderer(const Location& location) const override;
557 
560  int16_t startAngle;
561  int16_t endAngle;
562 };
563 
567 class ImageObject : public ObjectTemplate<Object::Kind::Image>
568 {
569 public:
570  ImageObject(Size size) : imageSize(size)
571  {
572  }
573 
574  void write(MetaWriter& meta) const override
575  {
576  meta.write("size", imageSize);
577  }
578 
579  Renderer* createRenderer(const Location& location) const override;
580 
581  Size getSize() const
582  {
583  return imageSize;
584  }
585 
586  uint16_t width() const
587  {
588  return imageSize.w;
589  }
590 
591  uint16_t height() const
592  {
593  return imageSize.h;
594  }
595 
599  virtual bool init() = 0;
600 
605  virtual PixelFormat getPixelFormat() const = 0;
606 
615  virtual size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const = 0;
616 
617 protected:
619 };
620 
625 {
626 public:
628  {
629  }
630 
631  StreamImageObject(const FSTR::String& image) : StreamImageObject(new FSTR::Stream(image), {})
632  {
633  }
634 
635  void write(MetaWriter& meta) const override
636  {
637  ImageObject::write(meta);
638  if(stream) {
639  meta.write("stream", stream->getName());
640  }
641  }
642 
643 protected:
644  void seek(uint32_t offset) const
645  {
646  if(streamPos != offset) {
647  streamPos = stream->seekFrom(offset, SeekOrigin::Start);
648  }
649  }
650 
651  void read(void* buffer, size_t length) const
652  {
653  streamPos += stream->readBytes(static_cast<uint8_t*>(buffer), length);
654  }
655 
656  std::unique_ptr<IDataSourceStream> stream;
657  mutable uint32_t streamPos{};
658 };
659 
666 {
667 public:
669 
671  : StreamImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getSize())
672  {
673  }
674 
675  void write(MetaWriter& meta) const override
676  {
678  meta.write("size", imageSize);
679  }
680 
681  bool init() override;
682 
683  PixelFormat getPixelFormat() const override
684  {
685  return PixelFormat::RGB24;
686  }
687 
688  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
689 
690 private:
691  uint32_t imageOffset;
692  uint16_t stride;
693  bool flip;
694 };
695 
702 {
703 public:
705  : StreamImageObject(image, size), pixelFormat(format)
706  {
707  }
708 
710  : RawImageObject(new FSTR::Stream(image), format, size)
711  {
712  }
713 
715  : RawImageObject(Resource::createSubStream(image.bmOffset, image.bmSize), image.getFormat(), image.getSize())
716  {
717  }
718 
719  void write(MetaWriter& meta) const override
720  {
722  meta.write("pixelFormat", pixelFormat);
723  }
724 
725  bool init() override
726  {
727  return true;
728  }
729 
730  PixelFormat getPixelFormat() const override
731  {
732  return pixelFormat;
733  }
734 
735  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
736 
737 protected:
739 };
740 
745 {
746 public:
747  virtual ~RenderTarget()
748  {
749  }
750 
754  virtual Size getSize() const = 0;
755 
759  virtual PixelFormat getPixelFormat() const = 0;
760 
768  virtual Surface* createSurface(size_t bufferSize = 0) = 0;
769 
771  {
772  return pack(color, getPixelFormat());
773  }
774 };
775 
777 {
778 public:
780 
782  {
783  debug_i("[IMG] %p, destroyed", imageData);
784  }
785 
786  Surface* createSurface(const Blend* blend, size_t bufferSize = 0);
787 
788  bool isValid() const
789  {
790  return imageData != nullptr;
791  }
792 
793  /* RenderTarget */
794 
795  Size getSize() const override
796  {
797  return imageSize;
798  }
799 
800  PixelFormat getPixelFormat() const override
801  {
803  }
804 
805  Surface* createSurface(size_t bufferSize = 0) override
806  {
807  return createSurface(nullptr, bufferSize);
808  }
809 
810 private:
811  size_t imageBytes;
812  uint8_t* imageData{nullptr};
813 };
814 
816 {
817 public:
819  : RawImageObject(file, format, size), imageBytes(size.w * size.h * getBytesPerPixel(format))
820  {
821  }
822 
823  /* RenderTarget */
824 
825  Size getSize() const override
826  {
827  return imageSize;
828  }
829 
830  PixelFormat getPixelFormat() const override
831  {
833  }
834 
835  Surface* createSurface(size_t bufferSize = 0) override;
836 
837 private:
838  friend FileImageSurface;
839 
840  size_t imageBytes;
841 };
842 
855 class GlyphObject : public ImageObject
856 {
857 public:
858  using Bits = std::bitset<64>;
861 
863  : ImageObject(options.scale.scale(metrics.size())), metrics(metrics), options(options)
864  {
865  }
866 
867  Kind kind() const override
868  {
869  return Kind::Glyph;
870  }
871 
872  PixelFormat getPixelFormat() const override
873  {
874  return PixelFormat::None;
875  }
876 
877  size_t readPixels(const Location& loc, PixelFormat format, void* buffer, uint16_t width) const override;
878 
879  virtual Bits getBits(uint16_t row) const = 0;
880 
890  virtual void readAlpha(void* buffer, Point origin, size_t stride) const = 0;
891 
892  const Metrics& getMetrics() const
893  {
894  return metrics;
895  }
896 
897 protected:
899  mutable Options options;
900 };
901 
907 class TextObject : public ObjectTemplate<Object::Kind::Text>
908 {
909 public:
911  {
912  }
913 
914  void write(MetaWriter& meta) const override
915  {
916  meta.write("bounds", bounds);
917  meta.beginArray("elements", "Element");
918  const TextElement* text{nullptr};
919  for(auto& obj : elements) {
920  meta.write(obj);
921  if(obj.kind == Element::Kind::Text) {
922  text = static_cast<const TextElement*>(&obj);
923  } else if(obj.kind == Element::Kind::Run) {
924  auto& run = static_cast<const RunElement&>(obj);
925  String s;
926  s.setLength(run.length);
927  text->text.read(run.offset, s.begin(), s.length());
928  meta.write("text", s);
929  }
930  }
931  // meta.writeArray("elements", "Element", elements);
932  meta.endArray();
933  }
934 
935  Renderer* createRenderer(const Location& location) const override;
936 
937  class Element : public LinkedObjectTemplate<Element>, public Meta
938  {
939  public:
941 
942 #define GRAPHICS_TEXT_ELEMENT_MAP(XX) \
943  XX(Text) \
944  XX(Font) \
945  XX(Color) \
946  XX(Run)
947 
948  enum class Kind : uint8_t {
949 #define XX(tag) tag,
951 #undef XX
952  };
953 
955  {
956  }
957 
958  /* Meta */
959 
961  {
962  switch(kind) {
963 #define XX(tag) \
964  case Kind::tag: \
965  return F(#tag);
967 #undef XX
968  default:
969  return nullptr;
970  }
971  }
972 
973  virtual void write(MetaWriter& meta) const = 0;
974 
976  };
978 
979  class TextElement : public Element
980  {
981  public:
983  {
984  }
985 
986  void write(MetaWriter& meta) const override
987  {
988  meta.write("text", text);
989  }
990 
991  const TextAsset& text;
992  };
993 
994  class FontElement : public Element
995  {
996  public:
999  {
1000  }
1001 
1002  void write(MetaWriter& meta) const override
1003  {
1004  meta.write("typeface", typeface);
1005  meta.write("scale", scale);
1006  meta.write("style", style);
1007  }
1008 
1009  uint16_t height() const
1010  {
1011  return scale.scaleY(typeface.height());
1012  }
1013 
1017  };
1019 
1020  class ColorElement : public Element
1021  {
1022  public:
1024  {
1025  }
1026 
1027  void write(MetaWriter& meta) const override
1028  {
1029  meta.write("fore", fore);
1030  meta.write("back", back);
1031  }
1032 
1033  Brush fore{Color::WHITE};
1034  Brush back{Color::BLACK};
1035  };
1036 
1037  class RunElement : public Element
1038  {
1039  public:
1040  RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1042  {
1043  }
1044 
1045  void write(MetaWriter& meta) const override
1046  {
1047  meta.write("pos", pos);
1048  meta.write("width", width);
1049  meta.write("offset", offset);
1050  meta.write("length", length);
1051  }
1052 
1054  uint16_t width;
1055  uint16_t offset;
1056  uint8_t length;
1057  };
1059 
1060  template <typename T> T* addElement(T* elem)
1061  {
1062  elements.add(elem);
1063  return elem;
1064  }
1065 
1067  {
1068  return addElement(new TextElement(text));
1069  }
1070 
1071  FontElement* addFont(const Font& font, Scale scale, FontStyles style)
1072  {
1073  return addElement(new FontElement(*font.getFace(style), scale, style));
1074  }
1075 
1076  FontElement* addFont(const TypeFace& typeface, Scale scale, FontStyles style)
1077  {
1078  return addElement(new FontElement(typeface, scale, style));
1079  }
1080 
1081  ColorElement* addColor(const Brush& fore, const Brush& back)
1082  {
1083  return addElement(new ColorElement(fore, back));
1084  }
1085 
1086  RunElement* addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
1087  {
1088  return addElement(new RunElement(pos, width, offset, length));
1089  }
1090 
1093 };
1094 
1100 class SurfaceObject : public ObjectTemplate<Object::Kind::Surface>
1101 {
1102 public:
1110  {
1111  }
1112 
1113  Renderer* createRenderer(const Location& location) const override;
1114 
1115  /* Meta */
1116 
1117  void write(MetaWriter& meta) const override;
1118 
1122 };
1123 
1127 class CopyObject : public ObjectTemplate<Object::Kind::Copy>
1128 {
1129 public:
1131  {
1132  }
1133 
1134  Renderer* createRenderer(const Location& location) const override;
1135 
1136  /* Meta */
1137 
1138  void write(MetaWriter& meta) const override
1139  {
1140  meta.write("source", source);
1141  meta.write("dest", dest);
1142  }
1143 
1146 };
1147 
1151 class ScrollObject : public ObjectTemplate<Object::Kind::Scroll>
1152 {
1153 public:
1156  {
1157  }
1158 
1159  Renderer* createRenderer(const Location& location) const override;
1160 
1161  /* Meta */
1162 
1163  void write(MetaWriter& meta) const override
1164  {
1165  meta.write("area", area);
1166  meta.write("shift", shift);
1167  meta.write("wrapx", wrapx);
1168  meta.write("wrapy", wrapy);
1169  meta.write("fill", fill);
1170  }
1171 
1174  bool wrapx;
1175  bool wrapy;
1177 };
1178 
1184 class DrawingObject : public ObjectTemplate<Object::Kind::Drawing>
1185 {
1186 public:
1187  using Callback = Delegate<void(DrawingObject* drawing)>;
1188 
1190  {
1191  }
1192 
1193  DrawingObject(const FSTR::ObjectBase& source) : DrawingObject(new FSTR::Stream(source))
1194  {
1195  }
1196 
1197  DrawingObject(String&& content) : stream(new MemoryDataStream(std::move(content)))
1198  {
1199  }
1200 
1201  void write(MetaWriter& meta) const override;
1202 
1203  Renderer* createRenderer(const Location& location) const override;
1204 
1206  {
1207  return *stream.get();
1208  }
1209 
1210  std::unique_ptr<IDataSourceStream> stream;
1212 };
1213 
1214 } // namespace Graphics
1215 
#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:942
@ Start
SEEK_SET: Start of file.
Delegate class, encapsulates a std::function Added constructor template implements lambda callback wh...
Definition: Delegate.h:24
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:514
ArcObject(Pen pen, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:516
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:533
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:532
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:531
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:534
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:521
Definition: Asset.h:760
A BMP format image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:666
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:675
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:683
BitmapObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:670
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:260
A circle outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:376
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:409
CircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:386
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:408
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:410
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:393
CircleObject(const Pen &pen, Point centre, uint16_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:378
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:399
CircleObject(const Pen &pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:382
Describes a copy operation within the same surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1128
Point dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1145
Rect source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1144
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1138
CopyObject(const Rect &source, Point dest)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1130
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:1185
AssetList assets
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1211
DrawingObject(IDataSourceStream *content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1189
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1210
DrawingObject(String &&content)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1197
IDataSourceStream & getStream() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1205
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:1193
void write(MetaWriter &meta) const override
An ellipse outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:460
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:480
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:479
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:471
EllipseObject(Pen pen, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:466
EllipseObject(Pen pen, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:462
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:816
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:830
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:818
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:825
Image surface using filing system as backing store.
Definition: ImageSurface.h:134
A filled arc.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:541
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:558
int16_t endAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:561
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:559
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:548
FilledArcObject(Brush brush, const Rect &rect, int16_t startAngle, int16_t endAngle)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:543
int16_t startAngle
Definition: Libraries/Graphics/src/include/Graphics/Object.h:560
A filled circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:417
Rect getRect() const
Get bounding retangle for this circle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:436
uint16_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:453
Point centre
Definition: Libraries/Graphics/src/include/Graphics/Object.h:452
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:442
FilledCircleObject(Brush brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:423
FilledCircleObject(int16_t x, int16_t y, uint16_t radius, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:428
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:419
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:451
A filled ellipse.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:487
FilledEllipseObject(const Brush &brush, const Rect &rect)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:489
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:498
FilledEllipseObject(const Brush &brush, Point centre, uint16_t a, uint16_t b)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:493
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:506
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:507
A filled rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:233
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:235
uint8_t radius
Definition: Libraries/Graphics/src/include/Graphics/Object.h:257
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:243
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:255
FilledRectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:239
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:256
const Blend * blender
Definition: Libraries/Graphics/src/include/Graphics/Object.h:254
Base class for a loaded font.
Definition: Asset.h:579
virtual const TypeFace * getFace(FontStyles style) const =0
A character glyph image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:856
std::bitset< 64 > Bits
Definition: Libraries/Graphics/src/include/Graphics/Object.h:858
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:872
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:862
const Metrics & getMetrics() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:892
Metrics metrics
Definition: Libraries/Graphics/src/include/Graphics/Object.h:898
virtual Bits getBits(uint16_t row) const =0
Options options
Definition: Libraries/Graphics/src/include/Graphics/Object.h:899
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:867
Virtual base class for an image.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:568
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:574
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:591
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:581
ImageObject(Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:570
Size imageSize
Definition: Libraries/Graphics/src/include/Graphics/Object.h:618
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:586
A drawn line.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:264
LineObject(int x0, int y0, int x1, int y1, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:278
LineObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:266
LineObject(Pen pen, int16_t x1, int16_t y1, int16_t x2, int16_t y2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:274
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:282
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:291
LineObject(Pen pen, Point pt1, Point pt2)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:270
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point pt1
Definition: Libraries/Graphics/src/include/Graphics/Object.h:292
Point pt2
Definition: Libraries/Graphics/src/include/Graphics/Object.h:293
Definition: Libraries/Graphics/src/include/Graphics/Object.h:777
Surface * createSurface(const Blend *blend, size_t bufferSize=0)
bool isValid() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:788
Size getSize() const override
Get target dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:795
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:800
Surface * createSurface(size_t bufferSize=0) override
Create a surface for use with this render target.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:805
~MemoryImageObject()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:781
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:410
uint16_t width
Definition: Asset.h:440
A single pixel == 1x1 rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:181
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Brush brush
Definition: Libraries/Graphics/src/include/Graphics/Object.h:195
Point point
Definition: Libraries/Graphics/src/include/Graphics/Object.h:196
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:187
PointObject(const Brush &brush, const Point &point)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:183
A sequence of lines.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:306
uint16_t numPoints
Definition: Libraries/Graphics/src/include/Graphics/Object.h:368
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:366
PolylineObject(Pen pen, const Rect &rect, uint8_t radius)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:322
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:318
std::unique_ptr< Point[]> points
Definition: Libraries/Graphics/src/include/Graphics/Object.h:367
bool connected
Definition: Libraries/Graphics/src/include/Graphics/Object.h:369
Point operator[](unsigned index) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:352
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:358
PolylineObject(Pen pen, size_t count)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:308
PolylineObject(Pen pen, ParamTypes... params)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:313
Image stored as raw pixels in a specific format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:702
PixelFormat getPixelFormat() const override
Get native pixel format.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:730
RawImageObject(const FSTR::String &image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:709
RawImageObject(IDataSourceStream *image, PixelFormat format, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:704
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:719
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:738
RawImageObject(const Resource::ImageResource &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:714
bool init() override
Initialise the object, e.g. parse header content and obtain dimensions.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:725
A rectangular outline.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:203
RectObject(int x0, int y0, int w, int h, Color color)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:209
Rect rect
Definition: Libraries/Graphics/src/include/Graphics/Object.h:225
RectObject(const Pen &pen, const Rect &rect, uint8_t radius=0)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:205
Pen pen
Definition: Libraries/Graphics/src/include/Graphics/Object.h:224
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:213
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:226
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:172
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:163
const Object & object
Definition: Libraries/Graphics/src/include/Graphics/Object.h:171
Point sourceOffset
Definition: Libraries/Graphics/src/include/Graphics/Object.h:173
ReferenceObject(const Object &object, const Rect &pos, const Point &sourceOffset, const Blend *blend=nullptr)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:158
const Blend * blend
Definition: Libraries/Graphics/src/include/Graphics/Object.h:174
Interface for objects which support writing via surfaces.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:745
virtual ~RenderTarget()
Definition: Libraries/Graphics/src/include/Graphics/Object.h:747
PackedColor getColor(Color color) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:770
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:1152
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Color fill
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1176
bool wrapy
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1175
ScrollObject(const Rect &area, Point shift, bool wrapx, bool wrapy, Color fill)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1154
Rect area
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1172
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1163
bool wrapx
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1174
Point shift
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1173
Image whose contents are stored in a stream, typically in a file or flash memory.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:625
uint32_t streamPos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:657
StreamImageObject(const FSTR::String &image)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:631
void seek(uint32_t offset) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:644
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:635
void read(void *buffer, size_t length) const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:651
StreamImageObject(IDataSourceStream *source, Size size)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:627
std::unique_ptr< IDataSourceStream > stream
Definition: Libraries/Graphics/src/include/Graphics/Object.h:656
Describes a target surface and corresponding source location.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1101
Rect dest
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1120
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
Point source
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1121
void write(MetaWriter &meta) const override
Surface & surface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1119
SurfaceObject(Surface &surface, const Rect &dest, Point source)
Constructor.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1109
Interface for a drawing surface.
Definition: Surface.h:42
Definition: Asset.h:673
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1021
Brush fore
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1033
Brush back
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1034
ColorElement(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1023
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1027
Definition: Libraries/Graphics/src/include/Graphics/Object.h:938
Kind kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:975
virtual void write(MetaWriter &meta) const =0
Element(Kind kind)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:954
Kind
Definition: Libraries/Graphics/src/include/Graphics/Object.h:948
String getTypeStr() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:960
Definition: Libraries/Graphics/src/include/Graphics/Object.h:995
uint16_t height() const
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1009
Scale scale
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1014
const TypeFace & typeface
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1016
FontElement(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:997
FontStyles style
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1015
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1002
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1038
RunElement(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1040
uint16_t offset
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1055
Point pos
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1053
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1045
uint8_t length
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1056
uint16_t width
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1054
Definition: Libraries/Graphics/src/include/Graphics/Object.h:980
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:986
const TextAsset & text
Definition: Libraries/Graphics/src/include/Graphics/Object.h:991
TextElement(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:982
A block of text consisting of zero or more segments.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:908
Rect bounds
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1091
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
GRAPHICS_VERIFY_SIZE(RunElement, 20)
FontElement * addFont(const TypeFace &typeface, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1076
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Object.h:914
RunElement * addRun(Point pos, uint16_t width, uint16_t offset, uint8_t length)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1086
FontElement * addFont(const Font &font, Scale scale, FontStyles style)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1071
T * addElement(T *elem)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1060
ColorElement * addColor(const Brush &fore, const Brush &back)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1081
TextObject(const Rect &bounds)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:910
Element::OwnedList elements
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1092
GRAPHICS_VERIFY_SIZE(FontElement, 16)
TextElement * addText(const TextAsset &text)
Definition: Libraries/Graphics/src/include/Graphics/Object.h:1066
GRAPHICS_VERIFY_SIZE(Element, 12)
Definition: Asset.h:460
Base class for a loaded typeface, e.g. Sans 16pt bold.
Definition: Asset.h:513
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:88
bool add(ObjectType *object)
Definition: LinkedObjectList.h:132
Base class template for linked items with type casting.
Definition: LinkedObject.h:60
Read/write stream using expandable memory buffer.
Definition: MemoryDataStream.h:27
Class template for singly-linked list of objects.
Definition: LinkedObjectList.h:173
Base Stream class.
Definition: Wiring/Stream.h:33
The String class.
Definition: WString.h:133
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:618
size_t length(void) const
Obtain the String length in characters, excluding NUL terminator.
Definition: WString.h:238
#define debug_i
Definition: debug_progmem.h:99
Definition: Array.hpp:118
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