aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cru/ui/controls/Control.h16
-rw-r--r--include/cru/ui/mapper/Mapper.h9
-rw-r--r--include/cru/ui/mapper/style/MarginStylerMapper.h26
-rw-r--r--include/cru/ui/mapper/style/PaddingStylerMapper.h26
-rw-r--r--include/cru/ui/style/Styler.h37
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