aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/theme_builder/CMakeLists.txt1
-rw-r--r--src/theme_builder/components/stylers/PreferredSizeStylerEditor.cpp34
-rw-r--r--src/theme_builder/components/stylers/PreferredSizeStylerEditor.h27
-rw-r--r--src/theme_builder/components/stylers/StylerEditor.cpp6
4 files changed, 68 insertions, 0 deletions
diff --git a/src/theme_builder/CMakeLists.txt b/src/theme_builder/CMakeLists.txt
index 0c3e1926..dff58874 100644
--- a/src/theme_builder/CMakeLists.txt
+++ b/src/theme_builder/CMakeLists.txt
@@ -21,6 +21,7 @@ add_executable(cru_theme_builder
components/stylers/BorderStylerEditor.cpp
components/stylers/CompoundStylerEditor.cpp
components/stylers/CursorStylerEditor.cpp
+ components/stylers/PreferredSizeStylerEditor.cpp
components/stylers/StylerEditor.cpp
)
diff --git a/src/theme_builder/components/stylers/PreferredSizeStylerEditor.cpp b/src/theme_builder/components/stylers/PreferredSizeStylerEditor.cpp
new file mode 100644
index 00000000..fb713c8c
--- /dev/null
+++ b/src/theme_builder/components/stylers/PreferredSizeStylerEditor.cpp
@@ -0,0 +1,34 @@
+#include "PreferredSizeStylerEditor.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+PreferredSizeStylerEditor::PreferredSizeStylerEditor() {
+ SetLabel(u"Preferred Size Styler");
+ GetContainer()->AddChild(width_editor_.GetRootControl());
+ GetContainer()->AddChild(height_editor_.GetRootControl());
+
+ width_editor_.SetLabel(u"Width");
+ height_editor_.SetLabel(u"Height");
+
+ ConnectChangeEvent(width_editor_);
+ ConnectChangeEvent(height_editor_);
+}
+
+PreferredSizeStylerEditor::~PreferredSizeStylerEditor() {}
+
+ClonablePtr<ui::style::PreferredSizeStyler>
+PreferredSizeStylerEditor::GetValue() {
+ return ui::style::PreferredSizeStyler::Create(ui::render::MeasureSize{
+ width_editor_.GetValue(), height_editor_.GetValue()});
+}
+
+void PreferredSizeStylerEditor::SetValue(ui::style::PreferredSizeStyler* styler,
+ bool trigger_change) {
+ width_editor_.SetValue(styler->GetPreferredSize().width, false);
+ height_editor_.SetValue(styler->GetPreferredSize().height, false);
+
+ if (trigger_change) {
+ RaiseChangeEvent();
+ }
+}
+} // namespace cru::theme_builder::components::stylers
diff --git a/src/theme_builder/components/stylers/PreferredSizeStylerEditor.h b/src/theme_builder/components/stylers/PreferredSizeStylerEditor.h
new file mode 100644
index 00000000..4a64da10
--- /dev/null
+++ b/src/theme_builder/components/stylers/PreferredSizeStylerEditor.h
@@ -0,0 +1,27 @@
+#pragma once
+#include "../properties/MeasureLengthPropertyEditor.h"
+#include "StylerEditor.h"
+#include "cru/common/ClonablePtr.h"
+#include "cru/ui/style/Styler.h"
+
+namespace cru::theme_builder::components::stylers {
+class PreferredSizeStylerEditor : public StylerEditor {
+ public:
+ PreferredSizeStylerEditor();
+ ~PreferredSizeStylerEditor() override;
+
+ ClonablePtr<ui::style::PreferredSizeStyler> GetValue();
+ void SetValue(ui::style::PreferredSizeStyler* styler,
+ bool trigger_change = true);
+ void SetValue(const ClonablePtr<ui::style::PreferredSizeStyler>& styler,
+ bool trigger_change = true) {
+ SetValue(styler.get(), trigger_change);
+ }
+
+ ClonablePtr<ui::style::Styler> GetStyler() override { return GetValue(); }
+
+ private:
+ properties::MeasureLengthPropertyEditor width_editor_;
+ properties::MeasureLengthPropertyEditor height_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 99eaebad..08684edc 100644
--- a/src/theme_builder/components/stylers/StylerEditor.cpp
+++ b/src/theme_builder/components/stylers/StylerEditor.cpp
@@ -2,6 +2,7 @@
#include "BorderStylerEditor.h"
#include "CompoundStylerEditor.h"
#include "CursorStylerEditor.h"
+#include "PreferredSizeStylerEditor.h"
#include "cru/ui/style/Styler.h"
namespace cru::theme_builder::components::stylers {
@@ -27,6 +28,11 @@ std::unique_ptr<StylerEditor> CreateStylerEditor(ui::style::Styler* styler) {
auto editor = std::make_unique<CursorStylerEditor>();
editor->SetValue(cursor_styler);
return editor;
+ } else if (auto preferred_size_styler =
+ dynamic_cast<ui::style::PreferredSizeStyler*>(styler)) {
+ auto editor = std::make_unique<PreferredSizeStylerEditor>();
+ editor->SetValue(preferred_size_styler);
+ return editor;
} else {
throw Exception(u"Unknown styler type");
}