From a7f5275267e1b504b119e2e3b7fcd46a88874821 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 24 Feb 2022 16:06:27 +0800 Subject: ... --- .../stylers/PreferredSizeStylerEditor.cpp | 34 ++++++++++++++++++++++ .../components/stylers/PreferredSizeStylerEditor.h | 27 +++++++++++++++++ .../components/stylers/StylerEditor.cpp | 6 ++++ 3 files changed, 67 insertions(+) create mode 100644 src/theme_builder/components/stylers/PreferredSizeStylerEditor.cpp create mode 100644 src/theme_builder/components/stylers/PreferredSizeStylerEditor.h (limited to 'src/theme_builder/components/stylers') 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 +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 GetValue(); + void SetValue(ui::style::PreferredSizeStyler* styler, + bool trigger_change = true); + void SetValue(const ClonablePtr& styler, + bool trigger_change = true) { + SetValue(styler.get(), trigger_change); + } + + ClonablePtr 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 CreateStylerEditor(ui::style::Styler* styler) { auto editor = std::make_unique(); editor->SetValue(cursor_styler); return editor; + } else if (auto preferred_size_styler = + dynamic_cast(styler)) { + auto editor = std::make_unique(); + editor->SetValue(preferred_size_styler); + return editor; } else { throw Exception(u"Unknown styler type"); } -- cgit v1.2.3