aboutsummaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-10 19:49:06 +0800
committercrupest <crupest@outlook.com>2022-02-10 19:49:06 +0800
commitc1dbad5fdf0560983e6c832eddded6f610eae94e (patch)
tree40f22f7e6aa7ef39c49b1c007beed37130fc0b5d /src/ui
parentb2622f654598f82a220a98daaa84fed9ce3b92b2 (diff)
downloadcru-c1dbad5fdf0560983e6c832eddded6f610eae94e.tar.gz
cru-c1dbad5fdf0560983e6c832eddded6f610eae94e.tar.bz2
cru-c1dbad5fdf0560983e6c832eddded6f610eae94e.zip
...
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/components/Menu.cpp57
-rw-r--r--src/ui/controls/TextBlock.cpp9
-rw-r--r--src/ui/controls/Window.cpp4
3 files changed, 20 insertions, 50 deletions
diff --git a/src/ui/components/Menu.cpp b/src/ui/components/Menu.cpp
index af2043a9..ab897077 100644
--- a/src/ui/components/Menu.cpp
+++ b/src/ui/components/Menu.cpp
@@ -5,6 +5,7 @@
#include "cru/ui/controls/Button.h"
#include "cru/ui/controls/Control.h"
#include "cru/ui/controls/FlexLayout.h"
+#include "cru/ui/controls/Popup.h"
#include "cru/ui/controls/TextBlock.h"
#include "cru/ui/helper/ClickDetector.h"
#include "cru/ui/host/WindowHost.h"
@@ -12,44 +13,35 @@
namespace cru::ui::components {
MenuItem::MenuItem() {
- container_ = controls::Button::Create();
- text_ = controls::TextBlock::Create();
- container_->SetChild(text_);
- container_->GetStyleRuleSet()->SetParent(
+ container_.SetChild(&text_);
+ container_.GetStyleRuleSet()->SetParent(
ThemeManager::GetInstance()->GetResourceStyleRuleSet(u"menuitem.style"));
- container_->ClickEvent()->AddHandler([this](const helper::ClickEventArgs&) {
+ container_.ClickEvent()->AddHandler([this](const helper::ClickEventArgs&) {
if (this->on_click_) this->on_click_();
});
}
MenuItem::MenuItem(String text) : MenuItem() { SetText(std::move(text)); }
-MenuItem::~MenuItem() {
- container_->RemoveFromParent();
- delete container_;
-}
+MenuItem::~MenuItem() { container_.RemoveFromParent(); }
-void MenuItem::SetText(String text) { text_->SetText(std::move(text)); }
+void MenuItem::SetText(String text) { text_.SetText(std::move(text)); }
-Menu::Menu() {
- container_ = controls::FlexLayout::Create();
- container_->SetFlexDirection(controls::FlexDirection::Vertical);
-}
+Menu::Menu() { container_.SetFlexDirection(controls::FlexDirection::Vertical); }
Menu::~Menu() {
for (auto item : items_) {
delete item;
}
- container_->RemoveFromParent();
- delete container_;
+ container_.RemoveFromParent();
}
void Menu::AddItem(Component* item, gsl::index index) {
Expects(index >= 0 && index <= GetItemCount());
items_.insert(items_.cbegin() + index, item);
- container_->AddChildAt(item->GetRootControl(), index);
+ container_.AddChildAt(item->GetRootControl(), index);
}
Component* Menu::RemoveItem(gsl::index index) {
@@ -58,7 +50,7 @@ Component* Menu::RemoveItem(gsl::index index) {
Component* item = items_[index];
items_.erase(items_.cbegin() + index);
- container_->RemoveChildAt(index);
+ container_.RemoveChildAt(index);
return item;
}
@@ -70,7 +62,7 @@ void Menu::ClearItems() {
items_.clear();
- container_->ClearChildren();
+ container_.ClearChildren();
}
void Menu::AddTextItem(String text, gsl::index index,
@@ -84,33 +76,24 @@ void Menu::AddTextItem(String text, gsl::index index,
}
PopupMenu::PopupMenu(controls::Control* attached_control)
- : attached_control_(attached_control) {
- popup_ = controls::Popup::Create(attached_control);
-
- menu_ = new Menu();
-
- menu_->SetOnItemClick([this](Index) { this->Close(); });
-
- popup_->AddChildAt(menu_->GetRootControl(), 0);
+ : attached_control_(attached_control), popup_(attached_control) {
+ menu_.SetOnItemClick([this](Index) { this->Close(); });
+ popup_.AddChildAt(menu_.GetRootControl(), 0);
}
-PopupMenu::~PopupMenu() {
- delete menu_;
-
- delete popup_;
-}
+PopupMenu::~PopupMenu() {}
-controls::Control* PopupMenu::GetRootControl() { return popup_; }
+controls::Control* PopupMenu::GetRootControl() { return &popup_; }
void PopupMenu::SetPosition(const Point& position) {
- popup_->GetWindowHost()->GetNativeWindow()->SetClientRect(Rect{position, {}});
+ popup_.GetWindowHost()->GetNativeWindow()->SetClientRect(Rect{position, {}});
}
void PopupMenu::Show() {
- popup_->GetWindowHost()->RelayoutWithSize(Size::Infinate(), true);
- popup_->GetWindowHost()->GetNativeWindow()->SetVisibility(
+ popup_.GetWindowHost()->RelayoutWithSize(Size::Infinate(), true);
+ popup_.GetWindowHost()->GetNativeWindow()->SetVisibility(
platform::gui::WindowVisibilityType::Show);
}
-void PopupMenu::Close() { popup_->GetWindowHost()->GetNativeWindow()->Close(); }
+void PopupMenu::Close() { popup_.GetWindowHost()->GetNativeWindow()->Close(); }
} // namespace cru::ui::components
diff --git a/src/ui/controls/TextBlock.cpp b/src/ui/controls/TextBlock.cpp
index 80d9fe34..f3d2405b 100644
--- a/src/ui/controls/TextBlock.cpp
+++ b/src/ui/controls/TextBlock.cpp
@@ -8,15 +8,6 @@
namespace cru::ui::controls {
using render::TextRenderObject;
-TextBlock* TextBlock::Create() { return new TextBlock(); }
-
-TextBlock* TextBlock::Create(String text, bool selectable) {
- auto c = new TextBlock();
- c->SetText(text);
- c->SetSelectable(selectable);
- return c;
-}
-
TextBlock::TextBlock() {
const auto theme_manager = ThemeManager::GetInstance();
diff --git a/src/ui/controls/Window.cpp b/src/ui/controls/Window.cpp
index 6891c918..b1881136 100644
--- a/src/ui/controls/Window.cpp
+++ b/src/ui/controls/Window.cpp
@@ -1,10 +1,6 @@
#include "cru/ui/controls/Window.h"
namespace cru::ui::controls {
-Window* Window::Create(Control* attached_control) {
- return new Window(attached_control);
-}
-
Window::Window(Control* attached_control) : RootControl(attached_control) {}
Window::~Window() {}