TGUI  0.9.1
WidgetRenderer.hpp
1 //
3 // TGUI - Texus' Graphical User Interface
4 // Copyright (C) 2012-2021 Bruno Van de Velde (vdv_b@tgui.eu)
5 //
6 // This software is provided 'as-is', without any express or implied warranty.
7 // In no event will the authors be held liable for any damages arising from the use of this software.
8 //
9 // Permission is granted to anyone to use this software for any purpose,
10 // including commercial applications, and to alter it and redistribute it freely,
11 // subject to the following restrictions:
12 //
13 // 1. The origin of this software must not be misrepresented;
14 // you must not claim that you wrote the original software.
15 // If you use this software in a product, an acknowledgment
16 // in the product documentation would be appreciated but is not required.
17 //
18 // 2. Altered source versions must be plainly marked as such,
19 // and must not be misrepresented as being the original software.
20 //
21 // 3. This notice may not be removed or altered from any source distribution.
22 //
24 
25 
26 #ifndef TGUI_WIDGET_RENDERER_HPP
27 #define TGUI_WIDGET_RENDERER_HPP
28 
29 
30 #include <TGUI/Config.hpp>
31 #include <TGUI/ObjectConverter.hpp>
32 #include <TGUI/Loading/DataIO.hpp>
33 
35 
36 namespace tgui
37 {
41  struct RendererData
42  {
43  RendererData() = default;
44 
45  static std::shared_ptr<RendererData> create(const std::map<String, ObjectConverter>& init = {})
46  {
47  auto data = std::make_shared<RendererData>();
48  data->propertyValuePairs = init;
49  return data;
50  }
51 
53  static std::shared_ptr<RendererData> createFromDataIONode(const DataIO::Node* rendererNode)
54  {
55  auto rendererData = std::make_shared<RendererData>();
56  rendererData->shared = false;
57 
58  for (const auto& pair : rendererNode->propertyValuePairs)
59  rendererData->propertyValuePairs[pair.first] = ObjectConverter(pair.second->value); // Did not compile with VS2015 Update 2 when using braces
60 
61  for (const auto& nestedProperty : rendererNode->children)
62  {
63  std::stringstream ss;
64  DataIO::emit(nestedProperty, ss);
65  rendererData->propertyValuePairs[nestedProperty->name] = {String("{\n" + ss.str() + "}")};
66  }
67 
68  return rendererData;
69  };
70 
71  std::map<String, ObjectConverter> propertyValuePairs;
72  std::map<const void*, std::function<void(const String& property)>> observers;
73  bool shared = true;
74  };
75 
76 
80  class TGUI_API WidgetRenderer
81  {
82  public:
83 
87  WidgetRenderer() = default;
88 
89 
96  WidgetRenderer(const std::shared_ptr<RendererData>& data)
97  {
98  setData(data);
99  }
100 
101 
106  virtual ~WidgetRenderer() = default;
107 
108 
115  void setOpacity(float opacity);
116 
117 
124  float getOpacity() const;
125 
126 
134  void setOpacityDisabled(float opacity);
135 
136 
143  float getOpacityDisabled() const;
144 
145 
154  void setFont(Font font);
155 
156 
163  Font getFont() const;
164 
165 
176  void setTransparentTexture(bool ignoreTransparentParts);
177 
178 
184  bool getTransparentTexture() const;
185 
186 
197  void setProperty(const String& property, ObjectConverter&& value);
198 
199 
209  ObjectConverter getProperty(const String& property) const;
210 
211 
218  const std::map<String, ObjectConverter>& getPropertyValuePairs() const;
219 
220 
228  void subscribe(const void* id, const std::function<void(const String& property)>& function);
229 
230 
237  void unsubscribe(const void* id);
238 
239 
247  void setData(const std::shared_ptr<RendererData>& data);
248 
249 
258  std::shared_ptr<RendererData> getData() const;
259 
260 
267  std::shared_ptr<RendererData> clone() const;
268 
269 
271  protected:
272 
273  std::shared_ptr<RendererData> m_data = RendererData::create();
274 
275 
277  };
278 
280 }
281 
283 
284 #endif // TGUI_WIDGETS_HPP
Definition: Font.hpp:56
Implicit converter for settable properties.
Definition: ObjectConverter.hpp:48
Wrapper class to store strings.
Definition: String.hpp:74
Base class for all renderer classes.
Definition: WidgetRenderer.hpp:81
std::shared_ptr< RendererData > clone() const
Gets a clone of the renderer data.
virtual ~WidgetRenderer()=default
Virtual destructor.
WidgetRenderer(const std::shared_ptr< RendererData > &data)
Construct the renderer from renderer data.
Definition: WidgetRenderer.hpp:96
const std::map< String, ObjectConverter > & getPropertyValuePairs() const
Gets a map with all properties and their values.
void setProperty(const String &property, ObjectConverter &&value)
Changes a property of the renderer.
bool getTransparentTexture() const
Returns whether mouse events should be ignored on transparent parts of the texture of the widget.
float getOpacity() const
Returns the opacity of the widget.
Font getFont() const
Returns the font associated with the widget (if any)
void subscribe(const void *id, const std::function< void(const String &property)> &function)
Subscribes a callback function to changes in the renderer.
std::shared_ptr< RendererData > getData() const
Returns the renderer data.
float getOpacityDisabled() const
Returns the opacity of the widget when it is disabled.
ObjectConverter getProperty(const String &property) const
Retrieves the value of a certain property.
void setOpacityDisabled(float opacity)
Changes the opacity of the widget when it is disabled.
WidgetRenderer()=default
Default constructor.
void setTransparentTexture(bool ignoreTransparentParts)
Sets whether mouse events should be ignored on transparent parts of the texture of the widget in norm...
void setOpacity(float opacity)
Changes the opacity of the widget.
void setFont(Font font)
Changes the font used for the text in the widget.
void unsubscribe(const void *id)
Subscribes a callback function to changes in the renderer.
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
Shared data used in renderer classes.
Definition: WidgetRenderer.hpp:42