diff options
Diffstat (limited to 'include/cru')
-rw-r--r-- | include/cru/ui/controls/Control.h | 16 | ||||
-rw-r--r-- | include/cru/ui/mapper/Mapper.h | 9 | ||||
-rw-r--r-- | include/cru/ui/mapper/style/MarginStylerMapper.h | 26 | ||||
-rw-r--r-- | include/cru/ui/mapper/style/PaddingStylerMapper.h | 26 | ||||
-rw-r--r-- | include/cru/ui/style/Styler.h | 37 |
5 files changed, 110 insertions, 4 deletions
diff --git a/include/cru/ui/controls/Control.h b/include/cru/ui/controls/Control.h index c52a53af..3b58222c 100644 --- a/include/cru/ui/controls/Control.h +++ b/include/cru/ui/controls/Control.h @@ -52,13 +52,25 @@ class CRU_UI_API Control : public Object { public: virtual render::RenderObject* GetRenderObject() const = 0; - render::MeasureSize GetPreferredSize() { + virtual render::MeasureSize GetPreferredSize() const { return GetRenderObject()->GetPreferredSize(); } - void SetPreferredSize(const render::MeasureSize& size) { + virtual void SetPreferredSize(const render::MeasureSize& size) { GetRenderObject()->SetPreferredSize(size); } + virtual Thickness GetMargin() const { return GetRenderObject()->GetMargin(); } + virtual void SetMargin(const Thickness& margin) { + GetRenderObject()->SetMargin(margin); + } + + virtual Thickness GetPadding() const { + return GetRenderObject()->GetPadding(); + } + virtual void SetPadding(const Thickness& padding) { + GetRenderObject()->SetPadding(padding); + } + //*************** region: focus *************** public: bool HasFocus(); diff --git a/include/cru/ui/mapper/Mapper.h b/include/cru/ui/mapper/Mapper.h index fa7f8cef..5bf140cd 100644 --- a/include/cru/ui/mapper/Mapper.h +++ b/include/cru/ui/mapper/Mapper.h @@ -38,12 +38,17 @@ class CRU_UI_API MapperBase : public Object { virtual bool SupportMapFromString() { return false; } virtual bool SupportMapFromXml() { return false; } - virtual bool XmlElementIsOfThisType(xml::XmlElementNode* node) { - return false; + virtual bool XmlElementIsOfThisType(xml::XmlElementNode* node); + + protected: + void SetAllowedTags(std::vector<String> allowed_tags) { + allowed_tags_ = std::move(allowed_tags); } private: std::type_index type_index_; + + std::vector<String> allowed_tags_; }; template <typename T> diff --git a/include/cru/ui/mapper/style/MarginStylerMapper.h b/include/cru/ui/mapper/style/MarginStylerMapper.h new file mode 100644 index 00000000..99e292b2 --- /dev/null +++ b/include/cru/ui/mapper/style/MarginStylerMapper.h @@ -0,0 +1,26 @@ +#pragma once +#include "../Mapper.h" +#include "cru/ui/mapper/style/IStylerMapper.h" +#include "cru/ui/style/Styler.h" + +namespace cru::ui::mapper::style { +class CRU_UI_API MarginStylerMapper + : public BasicPtrMapper<ui::style::MarginStyler>, + public virtual IStylerMapper { + public: + MarginStylerMapper(); + ~MarginStylerMapper(); + + public: + bool SupportMapFromXml() override { return true; } + + ClonablePtr<ui::style::Styler> MapStylerFromXml( + xml::XmlElementNode* node) override { + return MapFromXml(node); + } + + protected: + ClonablePtr<ui::style::MarginStyler> DoMapFromXml( + xml::XmlElementNode* node) override; +}; +} // namespace cru::ui::mapper::style diff --git a/include/cru/ui/mapper/style/PaddingStylerMapper.h b/include/cru/ui/mapper/style/PaddingStylerMapper.h new file mode 100644 index 00000000..2c0b4340 --- /dev/null +++ b/include/cru/ui/mapper/style/PaddingStylerMapper.h @@ -0,0 +1,26 @@ +#pragma once +#include "../Mapper.h" +#include "cru/ui/mapper/style/IStylerMapper.h" +#include "cru/ui/style/Styler.h" + +namespace cru::ui::mapper::style { +class CRU_UI_API PaddingStylerMapper + : public BasicPtrMapper<ui::style::PaddingStyler>, + public virtual IStylerMapper { + public: + PaddingStylerMapper(); + ~PaddingStylerMapper(); + + public: + bool SupportMapFromXml() override { return true; } + + ClonablePtr<ui::style::Styler> MapStylerFromXml( + xml::XmlElementNode* node) override { + return MapFromXml(node); + } + + protected: + ClonablePtr<ui::style::PaddingStyler> DoMapFromXml( + xml::XmlElementNode* node) override; +}; +} // namespace cru::ui::mapper::style diff --git a/include/cru/ui/style/Styler.h b/include/cru/ui/style/Styler.h index 4759c2ea..e2e05c5b 100644 --- a/include/cru/ui/style/Styler.h +++ b/include/cru/ui/style/Styler.h @@ -112,4 +112,41 @@ class CRU_UI_API PreferredSizeStyler : public Styler { private: render::MeasureSize size_; }; + +class CRU_UI_API MarginStyler : public Styler { + public: + static ClonablePtr<MarginStyler> Create(const Thickness& margin) { + return ClonablePtr<MarginStyler>(new MarginStyler(margin)); + } + + explicit MarginStyler(const Thickness& margin) : margin_(margin) {} + + void Apply(controls::Control* control) const override; + + MarginStyler* Clone() const override { return new MarginStyler(margin_); } + + Thickness GetMargin() const { return margin_; } + + private: + Thickness margin_; +}; + +class CRU_UI_API PaddingStyler : public Styler { + public: + static ClonablePtr<PaddingStyler> Create(const Thickness& padding) { + return ClonablePtr<PaddingStyler>(new PaddingStyler(padding)); + } + + explicit PaddingStyler(const Thickness& padding) : padding_(padding) {} + + void Apply(controls::Control* control) const override; + + PaddingStyler* Clone() const override { return new PaddingStyler(padding_); } + + Thickness GetPadding() const { return padding_; } + + private: + Thickness padding_; +}; + } // namespace cru::ui::style |