Libraries/Graphics/src/include/Graphics/Control/Control.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../Scene.h"
4 
5 namespace Graphics
6 {
12 class Control : public CustomObject
13 {
14 public:
15  class List : public LinkedObjectListTemplate<Control>
16  {
17  public:
19  };
20 
21  enum class Flag {
22  enabled,
23  active,
24  selected,
25  dirty,
26  };
27 
28  enum class Element {
29  border,
30  back,
31  text,
32  };
33 
34  Control() : bounds(0, 0, 100, 50)
35  {
36  }
37 
39  {
40  }
41 
43  {
44  }
45 
46  Renderer* createRenderer(const Location& location) const override;
47 
48  virtual void draw(SceneObject& scene) const = 0;
49 
50  void write(MetaWriter& meta) const override
51  {
52  }
53 
55  {
56  return caption.c_str();
57  }
58 
59  void setCaption(const String& value)
60  {
61  if(caption == value) {
62  return;
63  }
64  this->caption = value;
65  flags += Flag::dirty;
66  }
67 
68  void enable(bool state)
69  {
70  setFlag(Flag::enabled, state);
71  }
72 
73  void select(bool state)
74  {
75  setFlag(Flag::selected, state);
76  }
77 
78  void setPos(Point pos)
79  {
80  setBounds(Rect{pos, bounds.size()});
81  }
82 
83  void resize(Size size)
84  {
85  setBounds(Rect{bounds.topLeft(), size});
86  }
87 
88  void setBounds(const Rect& r)
89  {
90  if(r == bounds) {
91  return;
92  }
93  bounds = r;
94  flags += Flag::dirty;
95  }
96 
97  Rect getBounds() const
98  {
99  return bounds;
100  }
101 
102  bool isEnabled() const
103  {
104  return flags[Flag::enabled];
105  }
106 
107  bool isSelected() const
108  {
109  return flags[Flag::selected];
110  }
111 
112  bool isDirty() const
113  {
114  return flags[Flag::dirty];
115  }
116 
117  void setDirty()
118  {
119  flags += Flag::dirty;
120  }
121 
122  virtual const Font* getFont() const
123  {
124  return nullptr;
125  }
126 
127  virtual Color getColor(Element element) const;
128 
129  virtual Align getTextAlign() const
130  {
131  return Align::Near;
132  }
133 
134 protected:
135  friend class Screen;
136 
137  void setFlag(Flag flag, bool state)
138  {
139  if(state == flags[flag]) {
140  return;
141  }
142  flags[flag] = state;
143  flags += Flag::dirty;
144  }
145 
149 };
150 
151 } // namespace Graphics
Class to manage a NUL-terminated C-style string When storing persistent strings in RAM the regular St...
Definition: CString.h:27
const char * c_str() const
Definition: CString.h:100
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:16
Control * find(Point pos)
Basic interactive button on screen.
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:13
Rect getBounds() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:97
Control()
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:34
void enable(bool state)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:68
Renderer * createRenderer(const Location &location) const override
Create a software renderer for this object.
bool isEnabled() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:102
void setPos(Point pos)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:78
BitSet< uint8_t, Flag > flags
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:148
bool isSelected() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:107
void setBounds(const Rect &r)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:88
Flag
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:21
@ dirty
Requires repainting.
@ enabled
Can be interacted with.
void write(MetaWriter &meta) const override
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:50
void setFlag(Flag flag, bool state)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:137
void setCaption(const String &value)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:59
Control(const Rect &bounds)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:38
virtual Color getColor(Element element) const
String getCaption() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:54
CString caption
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:147
virtual Align getTextAlign() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:129
Element
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:28
virtual void draw(SceneObject &scene) const =0
virtual const Font * getFont() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:122
void setDirty()
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:117
bool isDirty() const
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:112
Control(const Rect &bounds, const String &caption)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:42
void select(bool state)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:73
void resize(Size size)
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:83
Rect bounds
Definition: Libraries/Graphics/src/include/Graphics/Control/Control.h:146
Base class for a loaded font.
Definition: Asset.h:572
Writes object content in readable format for debugging.
Definition: Meta.h:48
Definition: Libraries/Graphics/src/include/Graphics/Object.h:131
Virtual base class to manage rendering of various types of information to a surface.
Definition: Libraries/Graphics/src/include/Graphics/Object.h:66
A Scene containing multiple objects.
Definition: Scene.h:32
Definition: Screen.h:22
Definition: LinkedObjectList.h:90
The String class.
Definition: WString.h:137
Definition: Virtual.h:31
Align
Definition: Libraries/Graphics/src/include/Graphics/Types.h:55
Color
Standard colour definitions.
Definition: Colors.h:227
Identifies position within bounding rectangle.
Definition: Libraries/Graphics/src/include/Graphics/Types.h:683
Location and size of rectangular area (x, y, w, h)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:287
Size size() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:447
Point topLeft() const
Definition: Libraries/Graphics/src/include/Graphics/Types.h:417
Size of rectangular area (width x height)
Definition: Libraries/Graphics/src/include/Graphics/Types.h:105