aboutsummaryrefslogtreecommitdiff
path: root/src/theme_builder/components/stylers
diff options
context:
space:
mode:
Diffstat (limited to 'src/theme_builder/components/stylers')
-rw-r--r--src/theme_builder/components/stylers/MarginStylerEditor.cpp28
-rw-r--r--src/theme_builder/components/stylers/MarginStylerEditor.h25
-rw-r--r--src/theme_builder/components/stylers/PaddingStylerEditor.cpp28
-rw-r--r--src/theme_builder/components/stylers/PaddingStylerEditor.h25
-rw-r--r--src/theme_builder/components/stylers/StylerEditor.cpp12
5 files changed, 118 insertions, 0 deletions
diff --git a/src/theme_builder/components/stylers/MarginStylerEditor.cpp b/src/theme_builder/components/stylers/MarginStylerEditor.cpp
new file mode 100644
index 00000000..d7d89acb
--- /dev/null
+++ b/src/theme_builder/components/stylers/MarginStylerEditor.cpp
@@ -0,0 +1,28 @@
+#include "MarginStylerEditor.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+MarginStylerEditor::MarginStylerEditor() {
+ SetLabel(u"Margin Styler");
+ GetContainer()->AddChild(thickness_editor_.GetRootControl());
+
+ thickness_editor_.SetLabel(u"Thickness");
+
+ ConnectChangeEvent(thickness_editor_);
+}
+
+MarginStylerEditor::~MarginStylerEditor() {}
+
+ClonablePtr<ui::style::MarginStyler> MarginStylerEditor::GetValue() {
+ return ui::style::MarginStyler::Create(thickness_editor_.GetValue());
+}
+
+void MarginStylerEditor::SetValue(ui::style::MarginStyler* styler,
+ bool trigger_change) {
+ thickness_editor_.SetValue(styler->GetMargin(), false);
+
+ if (trigger_change) {
+ RaiseChangeEvent();
+ }
+}
+} // namespace cru::theme_builder::components::stylers
diff --git a/src/theme_builder/components/stylers/MarginStylerEditor.h b/src/theme_builder/components/stylers/MarginStylerEditor.h
new file mode 100644
index 00000000..9de6f1a2
--- /dev/null
+++ b/src/theme_builder/components/stylers/MarginStylerEditor.h
@@ -0,0 +1,25 @@
+#pragma once
+#include "../properties/ThicknessPropertyEditor.h"
+#include "StylerEditor.h"
+#include "cru/common/ClonablePtr.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+class MarginStylerEditor : public StylerEditor {
+ public:
+ MarginStylerEditor();
+ ~MarginStylerEditor() override;
+
+ ClonablePtr<ui::style::MarginStyler> GetValue();
+ void SetValue(ui::style::MarginStyler* styler, bool trigger_change = true);
+ void SetValue(const ClonablePtr<ui::style::MarginStyler>& styler,
+ bool trigger_change = true) {
+ SetValue(styler.get(), trigger_change);
+ }
+
+ ClonablePtr<ui::style::Styler> GetStyler() override { return GetValue(); }
+
+ private:
+ properties::ThicknessPropertyEditor thickness_editor_;
+};
+} // namespace cru::theme_builder::components::stylers
diff --git a/src/theme_builder/components/stylers/PaddingStylerEditor.cpp b/src/theme_builder/components/stylers/PaddingStylerEditor.cpp
new file mode 100644
index 00000000..476d21f1
--- /dev/null
+++ b/src/theme_builder/components/stylers/PaddingStylerEditor.cpp
@@ -0,0 +1,28 @@
+#include "PaddingStylerEditor.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+PaddingStylerEditor::PaddingStylerEditor() {
+ SetLabel(u"Padding Styler");
+ GetContainer()->AddChild(thickness_editor_.GetRootControl());
+
+ thickness_editor_.SetLabel(u"Thickness");
+
+ ConnectChangeEvent(thickness_editor_);
+}
+
+PaddingStylerEditor::~PaddingStylerEditor() {}
+
+ClonablePtr<ui::style::PaddingStyler> PaddingStylerEditor::GetValue() {
+ return ui::style::PaddingStyler::Create(thickness_editor_.GetValue());
+}
+
+void PaddingStylerEditor::SetValue(ui::style::PaddingStyler* styler,
+ bool trigger_change) {
+ thickness_editor_.SetValue(styler->GetPadding(), false);
+
+ if (trigger_change) {
+ RaiseChangeEvent();
+ }
+}
+} // namespace cru::theme_builder::components::stylers
diff --git a/src/theme_builder/components/stylers/PaddingStylerEditor.h b/src/theme_builder/components/stylers/PaddingStylerEditor.h
new file mode 100644
index 00000000..b78d310b
--- /dev/null
+++ b/src/theme_builder/components/stylers/PaddingStylerEditor.h
@@ -0,0 +1,25 @@
+#pragma once
+#include "../properties/ThicknessPropertyEditor.h"
+#include "StylerEditor.h"
+#include "cru/common/ClonablePtr.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+class PaddingStylerEditor : public StylerEditor {
+ public:
+ PaddingStylerEditor();
+ ~PaddingStylerEditor() override;
+
+ ClonablePtr<ui::style::PaddingStyler> GetValue();
+ void SetValue(ui::style::PaddingStyler* styler, bool trigger_change = true);
+ void SetValue(const ClonablePtr<ui::style::PaddingStyler>& styler,
+ bool trigger_change = true) {
+ SetValue(styler.get(), trigger_change);
+ }
+
+ ClonablePtr<ui::style::Styler> GetStyler() override { return GetValue(); }
+
+ private:
+ properties::ThicknessPropertyEditor thickness_editor_;
+};
+} // namespace cru::theme_builder::components::stylers
diff --git a/src/theme_builder/components/stylers/StylerEditor.cpp b/src/theme_builder/components/stylers/StylerEditor.cpp
index 08684edc..030a3752 100644
--- a/src/theme_builder/components/stylers/StylerEditor.cpp
+++ b/src/theme_builder/components/stylers/StylerEditor.cpp
@@ -2,6 +2,8 @@
#include "BorderStylerEditor.h"
#include "CompoundStylerEditor.h"
#include "CursorStylerEditor.h"
+#include "MarginStylerEditor.h"
+#include "PaddingStylerEditor.h"
#include "PreferredSizeStylerEditor.h"
#include "cru/ui/style/Styler.h"
@@ -33,6 +35,16 @@ std::unique_ptr<StylerEditor> CreateStylerEditor(ui::style::Styler* styler) {
auto editor = std::make_unique<PreferredSizeStylerEditor>();
editor->SetValue(preferred_size_styler);
return editor;
+ } else if (auto margin_styler =
+ dynamic_cast<ui::style::MarginStyler*>(styler)) {
+ auto editor = std::make_unique<MarginStylerEditor>();
+ editor->SetValue(margin_styler);
+ return editor;
+ } else if (auto padding_styler =
+ dynamic_cast<ui::style::PaddingStyler*>(styler)) {
+ auto editor = std::make_unique<PaddingStylerEditor>();
+ editor->SetValue(padding_styler);
+ return editor;
} else {
throw Exception(u"Unknown styler type");
}