26#ifndef TGUI_RENDERER_DEFINES_HPP
27#define TGUI_RENDERER_DEFINES_HPP
30#include <TGUI/Loading/Theme.hpp>
34#define TGUI_RENDERER_PROPERTY_OUTLINE(CLASS, NAME) \
35 Outline CLASS::get##NAME() const \
37 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
38 if (it != m_data->propertyValuePairs.end()) \
39 return it->second.getOutline(); \
43 void CLASS::set##NAME(const Outline& outline) \
45 setProperty(toLower(#NAME), {outline}); \
50#define TGUI_RENDERER_PROPERTY_COLOR(CLASS, NAME, DEFAULT) \
51 Color CLASS::get##NAME() const \
53 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
54 if (it != m_data->propertyValuePairs.end()) \
55 return it->second.getColor(); \
59 void CLASS::set##NAME(Color color) \
61 setProperty(toLower(#NAME), {color}); \
66#define TGUI_RENDERER_PROPERTY_TEXT_STYLE(CLASS, NAME, DEFAULT) \
67 TextStyle CLASS::get##NAME() const \
69 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
70 if (it != m_data->propertyValuePairs.end()) \
71 return it->second.getTextStyle(); \
75 void CLASS::set##NAME(TextStyle style) \
77 setProperty(toLower(#NAME), ObjectConverter{style}); \
82#define TGUI_RENDERER_PROPERTY_GET_NUMBER(CLASS, NAME, DEFAULT) \
83 float CLASS::get##NAME() const \
85 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
86 if (it != m_data->propertyValuePairs.end()) \
87 return it->second.getNumber(); \
92#define TGUI_RENDERER_PROPERTY_NUMBER(CLASS, NAME, DEFAULT) \
93 TGUI_RENDERER_PROPERTY_GET_NUMBER(CLASS, NAME, DEFAULT) \
94 void CLASS::set##NAME(float number) \
96 setProperty(toLower(#NAME), ObjectConverter{number}); \
101#define TGUI_RENDERER_PROPERTY_GET_BOOL(CLASS, NAME, DEFAULT) \
102 bool CLASS::get##NAME() const \
104 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
105 if (it != m_data->propertyValuePairs.end()) \
106 return it->second.getBool(); \
111#define TGUI_RENDERER_PROPERTY_BOOL(CLASS, NAME, DEFAULT) \
112 TGUI_RENDERER_PROPERTY_GET_BOOL(CLASS, NAME, DEFAULT) \
113 void CLASS::set##NAME(bool flag) \
115 setProperty(toLower(#NAME), ObjectConverter{flag}); \
121#define TGUI_RENDERER_PROPERTY_TEXTURE(CLASS, NAME) \
122 Texture& CLASS::get##NAME() const \
124 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
125 if (it != m_data->propertyValuePairs.end()) \
126 return it->second.getTexture(); \
129 m_data->propertyValuePairs[toLower(#NAME)] = {Texture{}}; \
130 return m_data->propertyValuePairs[toLower(#NAME)].getTexture(); \
133 void CLASS::set##NAME(const Texture& texture) \
135 setProperty(toLower(#NAME), {texture}); \
140#define TGUI_RENDERER_PROPERTY_RENDERER(CLASS, NAME, RENDERER) \
141 std::shared_ptr<RendererData> CLASS::get##NAME() const \
143 const auto it = m_data->propertyValuePairs.find(toLower(#NAME)); \
144 if (it != m_data->propertyValuePairs.end()) \
145 return it->second.getRenderer(); \
148 const auto& renderer = Theme::getDefault()->getRendererNoThrow(RENDERER); \
149 m_data->propertyValuePairs[toLower(#NAME)] = {renderer ? renderer : RendererData::create()}; \
153 void CLASS::set##NAME(std::shared_ptr<RendererData> renderer) \
155 setProperty(toLower(#NAME), {renderer}); \