diff options
author | crupest <crupest@outlook.com> | 2022-02-24 16:06:27 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-02-24 16:06:27 +0800 |
commit | a7f5275267e1b504b119e2e3b7fcd46a88874821 (patch) | |
tree | 0a61d692e0b4bd267f11527c552175424e6105a2 /src | |
parent | 640401bf2f4b3da3708970a1408b27e159f93631 (diff) | |
download | cru-a7f5275267e1b504b119e2e3b7fcd46a88874821.tar.gz cru-a7f5275267e1b504b119e2e3b7fcd46a88874821.tar.bz2 cru-a7f5275267e1b504b119e2e3b7fcd46a88874821.zip |
...
Diffstat (limited to 'src')
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"); } |