From 04e3fee3fc584c2c7562b29c375cedcf020bcbc6 Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 9 Dec 2020 23:15:15 +0800 Subject: ... --- src/ui/components/Menu.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/ui/components/Menu.cpp (limited to 'src/ui/components/Menu.cpp') diff --git a/src/ui/components/Menu.cpp b/src/ui/components/Menu.cpp new file mode 100644 index 00000000..ea9dcdb6 --- /dev/null +++ b/src/ui/components/Menu.cpp @@ -0,0 +1,57 @@ +#include "cru/ui/components/Menu.hpp" +#include "cru/ui/controls/Button.hpp" +#include "cru/ui/controls/FlexLayout.hpp" +#include "cru/ui/controls/TextBlock.hpp" + +#include + +namespace cru::ui::components { +MenuItem::MenuItem() { + container_ = controls::Button::Create(); + text_ = controls::TextBlock::Create(); + container_->SetChild(text_); +} + +MenuItem::MenuItem(std::u16string text) : MenuItem() { + SetText(std::move(text)); +} + +MenuItem::~MenuItem() { + if (!container_->GetWindowHost()) { + delete container_; + delete text_; + } +} + +void MenuItem::SetText(std::u16string text) { text_->SetText(std::move(text)); } + +Menu::Menu() { container_ = controls::FlexLayout::Create(); } + +Menu::~Menu() { + if (!container_->GetWindowHost()) { + delete container_; + } + + for (auto item : items_) { + delete item; + } +} + +void Menu::AddItem(Component* item, gsl::index index) { + Expects(index >= 0 && index <= GetItemCount()); + + items_.insert(items_.cbegin() + index, item); + container_->AddChild(item->GetRootControl(), index); +} + +Component* Menu::RemoveItem(gsl::index index) { + Expects(index >= 0 && index < GetItemCount()); + + Component* item = items_[index]; + + items_.erase(items_.cbegin() + index); + container_->RemoveChild(index); + + return item; +} +} // namespace cru::ui::components -- cgit v1.2.3 From d23cdd9c6f2fbec1329c704bde7e183b5ef07e2e Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 24 Dec 2020 23:57:51 +0800 Subject: ... --- src/ui/UiManager.cpp | 6 ++++++ src/ui/components/Menu.cpp | 4 ++++ 2 files changed, 10 insertions(+) (limited to 'src/ui/components/Menu.cpp') diff --git a/src/ui/UiManager.cpp b/src/ui/UiManager.cpp index 07812a96..5b4d4931 100644 --- a/src/ui/UiManager.cpp +++ b/src/ui/UiManager.cpp @@ -98,6 +98,12 @@ UiManager::UiManager() { BorderStyler::Create(ApplyBorderStyleInfo{ CreateSolidColorBrush(factory, Color::FromHex(0x495057))}), u"DefaultTextBoxFocus"}); + + theme_resource_.menu_item_style.AddStyleRule( + {NoCondition::Create(), + BorderStyler::Create( + ApplyBorderStyleInfo{std::nullopt, Thickness{0}, CornerRadius{0}}), + u"DefaultMenuItem"}); } UiManager::~UiManager() = default; diff --git a/src/ui/components/Menu.cpp b/src/ui/components/Menu.cpp index ea9dcdb6..d45bc44f 100644 --- a/src/ui/components/Menu.cpp +++ b/src/ui/components/Menu.cpp @@ -1,7 +1,9 @@ #include "cru/ui/components/Menu.hpp" +#include "cru/ui/UiManager.hpp" #include "cru/ui/controls/Button.hpp" #include "cru/ui/controls/FlexLayout.hpp" #include "cru/ui/controls/TextBlock.hpp" +#include "cru/ui/style/StyleRuleSet.hpp" #include @@ -10,6 +12,8 @@ MenuItem::MenuItem() { container_ = controls::Button::Create(); text_ = controls::TextBlock::Create(); container_->SetChild(text_); + container_->GetStyleRuleSet()->SetParent( + &UiManager::GetInstance()->GetThemeResources()->menu_item_style); } MenuItem::MenuItem(std::u16string text) : MenuItem() { -- cgit v1.2.3