aboutsummaryrefslogtreecommitdiff
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
parentb2622f654598f82a220a98daaa84fed9ce3b92b2 (diff)
downloadcru-c1dbad5fdf0560983e6c832eddded6f610eae94e.tar.gz
cru-c1dbad5fdf0560983e6c832eddded6f610eae94e.tar.bz2
cru-c1dbad5fdf0560983e6c832eddded6f610eae94e.zip
...
-rw-r--r--demos/main/main.cpp44
-rw-r--r--demos/scroll_view/main.cpp22
-rw-r--r--include/cru/ui/components/Menu.h18
-rw-r--r--include/cru/ui/controls/Button.h6
-rw-r--r--include/cru/ui/controls/Container.h4
-rw-r--r--include/cru/ui/controls/FlexLayout.h6
-rw-r--r--include/cru/ui/controls/Popup.h4
-rw-r--r--include/cru/ui/controls/ScrollView.h6
-rw-r--r--include/cru/ui/controls/StackLayout.h6
-rw-r--r--include/cru/ui/controls/TextBlock.h12
-rw-r--r--include/cru/ui/controls/TextBox.h6
-rw-r--r--include/cru/ui/controls/TreeView.h5
-rw-r--r--include/cru/ui/controls/Window.h8
-rw-r--r--src/theme_builder/components/MainWindow.cpp27
-rw-r--r--src/theme_builder/components/MainWindow.h12
-rw-r--r--src/theme_builder/components/StyleRuleEditor.cpp9
-rw-r--r--src/theme_builder/components/StyleRuleEditor.h4
-rw-r--r--src/theme_builder/components/StyleRuleSetEditor.cpp9
-rw-r--r--src/theme_builder/components/StyleRuleSetEditor.h4
-rw-r--r--src/ui/components/Menu.cpp57
-rw-r--r--src/ui/controls/TextBlock.cpp9
-rw-r--r--src/ui/controls/Window.cpp4
22 files changed, 98 insertions, 184 deletions
diff --git a/demos/main/main.cpp b/demos/main/main.cpp
index a45b7185..2e8188a1 100644
--- a/demos/main/main.cpp
+++ b/demos/main/main.cpp
@@ -1,4 +1,3 @@
-#include <memory>
#include "cru/platform/bootstrap/Bootstrap.h"
#include "cru/platform/gui/Base.h"
#include "cru/platform/gui/UiApplication.h"
@@ -17,7 +16,8 @@ using cru::platform::gui::IUiApplication;
using namespace cru::ui::controls;
int main() {
- IUiApplication* application = cru::platform::bootstrap::CreateUiApplication();
+ std::unique_ptr<IUiApplication> application(
+ cru::platform::bootstrap::CreateUiApplication());
auto application_menu = application->GetApplicationMenu();
@@ -33,35 +33,35 @@ int main() {
mi->SetOnClickHandler([&]() { application->RequestQuit(0); });
}
- const auto window = Window::Create();
+ Window window;
- const auto flex_layout = FlexLayout::Create();
- flex_layout->SetFlexDirection(FlexDirection::Vertical);
- flex_layout->SetContentMainAlign(FlexCrossAlignment::Center);
- flex_layout->SetItemCrossAlign(FlexCrossAlignment::Center);
+ FlexLayout flex_layout;
+ flex_layout.SetFlexDirection(FlexDirection::Vertical);
+ flex_layout.SetContentMainAlign(FlexCrossAlignment::Center);
+ flex_layout.SetItemCrossAlign(FlexCrossAlignment::Center);
- window->AddChildAt(flex_layout, 0);
+ window.AddChild(&flex_layout);
- const auto text_block = TextBlock::Create(u"Hello World from CruUI!", true);
- flex_layout->AddChildAt(text_block, 0);
+ TextBlock text_block(u"Hello World from CruUI!", true);
+ flex_layout.AddChild(&text_block);
- const auto button_text_block = TextBlock::Create(u"OK");
- const auto button = Button::Create();
- button->SetChild(button_text_block);
- flex_layout->AddChildAt(button, 1);
+ TextBlock button_text_block(u"OK");
+ Button button;
+ button.SetChild(&button_text_block);
+ flex_layout.AddChild(&button);
- const auto text_box = TextBox::Create();
- text_box->SetMultiLine(true);
- flex_layout->AddChildAt(text_box, 2);
+ TextBox text_box;
+ text_box.SetMultiLine(true);
+ flex_layout.AddChild(&text_box);
- auto popup_menu = std::make_unique<cru::ui::components::PopupMenu>(window);
+ auto popup_menu = std::make_unique<cru::ui::components::PopupMenu>(&window);
popup_menu->GetMenu()->AddTextItem(u"Item 1", [] {});
popup_menu->GetMenu()->AddTextItem(u"Item 2000", [] {});
- window->MouseDownEvent()->Bubble()->AddHandler(
- [window, &popup_menu](cru::ui::events::MouseButtonEventArgs& e) {
+ window.MouseDownEvent()->Bubble()->AddHandler(
+ [&window, &popup_menu](cru::ui::events::MouseButtonEventArgs& e) {
if (e.GetButton() == cru::ui::mouse_buttons::right) {
- popup_menu->SetPosition(e.GetPoint() + window->GetWindowHost()
+ popup_menu->SetPosition(e.GetPoint() + window.GetWindowHost()
->GetNativeWindow()
->GetClientRect()
.GetLeftTop());
@@ -69,7 +69,7 @@ int main() {
}
});
- window->GetWindowHost()->GetNativeWindow()->SetVisibility(
+ window.GetWindowHost()->GetNativeWindow()->SetVisibility(
cru::platform::gui::WindowVisibilityType::Show);
return application->Run();
diff --git a/demos/scroll_view/main.cpp b/demos/scroll_view/main.cpp
index d859ce3a..b049a408 100644
--- a/demos/scroll_view/main.cpp
+++ b/demos/scroll_view/main.cpp
@@ -11,15 +11,14 @@ using cru::ui::controls::TextBlock;
using cru::ui::controls::Window;
int main() {
- IUiApplication* application = cru::platform::bootstrap::CreateUiApplication();
+ std::unique_ptr<IUiApplication> application(
+ cru::platform::bootstrap::CreateUiApplication());
- auto window = Window::Create();
+ Window window;
+ ScrollView scroll_view;
+ window.AddChild(&scroll_view);
- auto scroll_view = ScrollView::Create();
-
- window->AddChild(scroll_view);
-
- auto text_block = TextBlock::Create(
+ TextBlock text_block(
uR"([Verse 1]
The snow glows white on the mountain tonight
Not a footprint to be seen
@@ -76,13 +75,12 @@ Let it go, let it go
That perfect girl is gone
Here I stand in the light of day
Let the storm rage on!
-The cold never bothered me anyway)");
-
- text_block->SetSelectable(true);
+The cold never bothered me anyway)",
+ true);
- scroll_view->SetChild(text_block);
+ scroll_view.SetChild(&text_block);
- window->GetWindowHost()->GetNativeWindow()->SetVisibility(
+ window.GetWindowHost()->GetNativeWindow()->SetVisibility(
cru::platform::gui::WindowVisibilityType::Show);
return application->Run();
diff --git a/include/cru/ui/components/Menu.h b/include/cru/ui/components/Menu.h
index 32936f84..99668f62 100644
--- a/include/cru/ui/components/Menu.h
+++ b/include/cru/ui/components/Menu.h
@@ -22,7 +22,7 @@ class CRU_UI_API MenuItem : public Component {
~MenuItem();
public:
- controls::Control* GetRootControl() override { return container_; }
+ controls::Control* GetRootControl() override { return &container_; }
void SetText(String text);
@@ -31,8 +31,8 @@ class CRU_UI_API MenuItem : public Component {
}
private:
- controls::Button* container_;
- controls::TextBlock* text_;
+ controls::Button container_;
+ controls::TextBlock text_;
std::function<void()> on_click_;
};
@@ -46,7 +46,7 @@ class CRU_UI_API Menu : public Component {
~Menu();
public:
- controls::Control* GetRootControl() override { return container_; }
+ controls::Control* GetRootControl() override { return &container_; }
gsl::index GetItemCount() const {
return static_cast<gsl::index>(items_.size());
@@ -67,7 +67,7 @@ class CRU_UI_API Menu : public Component {
}
private:
- controls::FlexLayout* container_;
+ controls::FlexLayout container_;
std::vector<Component*> items_;
std::function<void(Index)> on_item_click_;
@@ -85,8 +85,8 @@ class CRU_UI_API PopupMenu : public Component {
public:
controls::Control* GetRootControl() override;
- controls::Popup* GetPopup() { return popup_; }
- Menu* GetMenu() { return menu_; }
+ controls::Popup* GetPopup() { return &popup_; }
+ Menu* GetMenu() { return &menu_; }
// position relative to screen left top.
void SetPosition(const Point& position);
@@ -101,7 +101,7 @@ class CRU_UI_API PopupMenu : public Component {
private:
controls::Control* attached_control_;
- controls::Popup* popup_;
- Menu* menu_;
+ controls::Popup popup_;
+ Menu menu_;
};
} // namespace cru::ui::components
diff --git a/include/cru/ui/controls/Button.h b/include/cru/ui/controls/Button.h
index d35d7ef8..1828dc57 100644
--- a/include/cru/ui/controls/Button.h
+++ b/include/cru/ui/controls/Button.h
@@ -15,12 +15,8 @@ class CRU_UI_API Button : public SingleChildControl<render::BorderRenderObject>,
public:
static constexpr StringView kControlType = u"Button";
- static Button* Create() { return new Button(); }
-
- protected:
- Button();
-
public:
+ Button();
Button(const Button& other) = delete;
Button(Button&& other) = delete;
Button& operator=(const Button& other) = delete;
diff --git a/include/cru/ui/controls/Container.h b/include/cru/ui/controls/Container.h
index adb0fad1..3df2b445 100644
--- a/include/cru/ui/controls/Container.h
+++ b/include/cru/ui/controls/Container.h
@@ -8,10 +8,8 @@ class CRU_UI_API Container
: public SingleChildControl<render::BorderRenderObject> {
static constexpr StringView kControlType = u"Container";
- protected:
- Container();
-
public:
+ Container();
CRU_DELETE_COPY(Container)
CRU_DELETE_MOVE(Container)
diff --git a/include/cru/ui/controls/FlexLayout.h b/include/cru/ui/controls/FlexLayout.h
index 15494742..148586c0 100644
--- a/include/cru/ui/controls/FlexLayout.h
+++ b/include/cru/ui/controls/FlexLayout.h
@@ -15,12 +15,8 @@ class CRU_UI_API FlexLayout
public:
static constexpr StringView kControlType = u"FlexLayout";
- static FlexLayout* Create() { return new FlexLayout(); }
-
- protected:
- FlexLayout();
-
public:
+ FlexLayout();
FlexLayout(const FlexLayout& other) = delete;
FlexLayout(FlexLayout&& other) = delete;
FlexLayout& operator=(const FlexLayout& other) = delete;
diff --git a/include/cru/ui/controls/Popup.h b/include/cru/ui/controls/Popup.h
index 271ad4b7..464e7278 100644
--- a/include/cru/ui/controls/Popup.h
+++ b/include/cru/ui/controls/Popup.h
@@ -10,10 +10,6 @@ class CRU_UI_API Popup : public RootControl {
public:
static constexpr StringView kControlType = u"Popup";
- static Popup* Create(Control* attached_control = nullptr) {
- return new Popup(attached_control);
- }
-
explicit Popup(Control* attached_control = nullptr);
CRU_DELETE_COPY(Popup)
diff --git a/include/cru/ui/controls/ScrollView.h b/include/cru/ui/controls/ScrollView.h
index 43b6390c..244977d5 100644
--- a/include/cru/ui/controls/ScrollView.h
+++ b/include/cru/ui/controls/ScrollView.h
@@ -7,17 +7,11 @@ namespace cru::ui::controls {
class CRU_UI_API ScrollView
: public SingleChildControl<render::ScrollRenderObject> {
public:
- static ScrollView* Create() { return new ScrollView(); }
-
static constexpr StringView kControlType = u"ScrollView";
- protected:
ScrollView();
-
- public:
CRU_DELETE_COPY(ScrollView)
CRU_DELETE_MOVE(ScrollView)
-
~ScrollView() override;
public:
diff --git a/include/cru/ui/controls/StackLayout.h b/include/cru/ui/controls/StackLayout.h
index 28e0e796..82826171 100644
--- a/include/cru/ui/controls/StackLayout.h
+++ b/include/cru/ui/controls/StackLayout.h
@@ -9,15 +9,9 @@ class CRU_UI_API StackLayout
public:
static constexpr StringView kControlType = u"StackLayout";
- static StackLayout* Create() { return new StackLayout(); }
-
- protected:
StackLayout();
-
- public:
CRU_DELETE_COPY(StackLayout)
CRU_DELETE_MOVE(StackLayout)
-
~StackLayout() override;
String GetControlType() const final { return kControlType.ToString(); }
diff --git a/include/cru/ui/controls/TextBlock.h b/include/cru/ui/controls/TextBlock.h
index feb5cfa3..dc47d00a 100644
--- a/include/cru/ui/controls/TextBlock.h
+++ b/include/cru/ui/controls/TextBlock.h
@@ -10,19 +10,19 @@ class CRU_UI_API TextBlock : public NoChildControl,
public:
static constexpr StringView kControlType = u"TextBlock";
- static TextBlock* Create();
- static TextBlock* Create(String text, bool selectable = false);
-
- protected:
- TextBlock();
-
public:
+ TextBlock();
TextBlock(const TextBlock& other) = delete;
TextBlock(TextBlock&& other) = delete;
TextBlock& operator=(const TextBlock& other) = delete;
TextBlock& operator=(TextBlock&& other) = delete;
~TextBlock() override;
+ TextBlock(String text, bool selectable = false) : TextBlock() {
+ SetText(std::move(text));
+ SetSelectable(selectable);
+ }
+
String GetControlType() const final { return kControlType.ToString(); }
render::RenderObject* GetRenderObject() const override;
diff --git a/include/cru/ui/controls/TextBox.h b/include/cru/ui/controls/TextBox.h
index 0632cc12..94a1ac0c 100644
--- a/include/cru/ui/controls/TextBox.h
+++ b/include/cru/ui/controls/TextBox.h
@@ -15,15 +15,9 @@ class CRU_UI_API TextBox : public NoChildControl,
public:
static constexpr StringView control_type = u"TextBox";
- static TextBox* Create() { return new TextBox(); }
-
- protected:
TextBox();
-
- public:
CRU_DELETE_COPY(TextBox)
CRU_DELETE_MOVE(TextBox)
-
~TextBox() override;
String GetControlType() const final { return control_type.ToString(); }
diff --git a/include/cru/ui/controls/TreeView.h b/include/cru/ui/controls/TreeView.h
index 2e782ee0..b36ca553 100644
--- a/include/cru/ui/controls/TreeView.h
+++ b/include/cru/ui/controls/TreeView.h
@@ -7,13 +7,10 @@ class TreeView;
class CRU_UI_API TreeViewItem : public Object {
friend TreeView;
- private:
- TreeViewItem(TreeView* tree_view, TreeViewItem* parent);
-
public:
+ TreeViewItem(TreeView* tree_view, TreeViewItem* parent);
CRU_DELETE_COPY(TreeViewItem)
CRU_DELETE_MOVE(TreeViewItem)
-
~TreeViewItem() override;
TreeView* GetTreeView() { return tree_view_; }
diff --git a/include/cru/ui/controls/Window.h b/include/cru/ui/controls/Window.h
index 5fb6d594..a1a97f87 100644
--- a/include/cru/ui/controls/Window.h
+++ b/include/cru/ui/controls/Window.h
@@ -10,15 +10,9 @@ class CRU_UI_API Window final : public RootControl {
static constexpr StringView control_type = u"Window";
public:
- static Window* Create(Control* attached_control = nullptr);
-
- private:
- explicit Window(Control* attached_control);
-
- public:
+ explicit Window(Control* attached_control = nullptr);
CRU_DELETE_COPY(Window)
CRU_DELETE_MOVE(Window)
-
~Window() override;
public:
diff --git a/src/theme_builder/components/MainWindow.cpp b/src/theme_builder/components/MainWindow.cpp
index 4c605756..91c093cc 100644
--- a/src/theme_builder/components/MainWindow.cpp
+++ b/src/theme_builder/components/MainWindow.cpp
@@ -9,27 +9,22 @@ using namespace cru::ui::controls;
using namespace cru::platform::gui;
MainWindow::MainWindow() {
- window_ = Window::Create();
- window_->GetNativeWindow()->SetTitle(u"CruUI Theme Builder");
+ window_.GetNativeWindow()->SetTitle(u"CruUI Theme Builder");
+ main_layout_.SetFlexDirection(FlexDirection::Horizontal);
+ window_.AddChild(&main_layout_);
+ main_layout_.AddChild(&preview_layout_);
- main_layout_ = FlexLayout::Create();
- main_layout_->SetFlexDirection(FlexDirection::Horizontal);
- window_->AddChild(main_layout_);
-
- preview_layout_ = StackLayout::Create();
- main_layout_->AddChild(preview_layout_);
-
- preview_button_ = Button::Create();
- preview_button_->SetChild(TextBlock::Create(u"Preview"));
- preview_layout_->AddChild(preview_button_);
- preview_layout_->SetChildLayoutData(
+ preview_button_text_.SetText(u"Preview");
+ preview_button_.SetChild(&preview_button_text_);
+ preview_layout_.AddChild(&preview_button_);
+ preview_layout_.SetChildLayoutData(
0, StackChildLayoutData{Alignment::Center, Alignment::Center});
}
-MainWindow::~MainWindow() { delete window_; }
+MainWindow::~MainWindow() {}
void MainWindow::Show() {
- window_->GetNativeWindow()->SetVisibility(WindowVisibilityType::Show);
- window_->GetNativeWindow()->SetToForeground();
+ window_.GetNativeWindow()->SetVisibility(WindowVisibilityType::Show);
+ window_.GetNativeWindow()->SetToForeground();
}
} // namespace cru::theme_builder
diff --git a/src/theme_builder/components/MainWindow.h b/src/theme_builder/components/MainWindow.h
index 101b678e..c6733111 100644
--- a/src/theme_builder/components/MainWindow.h
+++ b/src/theme_builder/components/MainWindow.h
@@ -3,6 +3,7 @@
#include "cru/ui/controls/Button.h"
#include "cru/ui/controls/FlexLayout.h"
#include "cru/ui/controls/StackLayout.h"
+#include "cru/ui/controls/TextBlock.h"
#include "cru/ui/controls/Window.h"
namespace cru::theme_builder {
@@ -15,14 +16,15 @@ class MainWindow : public ui::components::Component {
~MainWindow() override;
- ui::controls::Control* GetRootControl() override { return window_; }
+ ui::controls::Control* GetRootControl() override { return &window_; }
void Show();
private:
- ui::controls::Window* window_;
- ui::controls::FlexLayout* main_layout_;
- ui::controls::StackLayout* preview_layout_;
- ui::controls::Button* preview_button_;
+ ui::controls::Window window_;
+ ui::controls::FlexLayout main_layout_;
+ ui::controls::StackLayout preview_layout_;
+ ui::controls::Button preview_button_;
+ ui::controls::TextBlock preview_button_text_;
};
} // namespace cru::theme_builder
diff --git a/src/theme_builder/components/StyleRuleEditor.cpp b/src/theme_builder/components/StyleRuleEditor.cpp
index 1cbeaeb2..977672e3 100644
--- a/src/theme_builder/components/StyleRuleEditor.cpp
+++ b/src/theme_builder/components/StyleRuleEditor.cpp
@@ -1,14 +1,9 @@
#include "StyleRuleEditor.h"
namespace cru::theme_builder {
-StyleRuleEditor::StyleRuleEditor() {
- main_layout_ = ui::controls::FlexLayout::Create();
-}
+StyleRuleEditor::StyleRuleEditor() {}
-StyleRuleEditor::~StyleRuleEditor() {
- main_layout_->RemoveFromParent();
- delete main_layout_;
-}
+StyleRuleEditor::~StyleRuleEditor() { main_layout_.RemoveFromParent(); }
void StyleRuleEditor::BindStyleRule(ui::style::StyleRule *rule) {
style_rule_ = rule;
diff --git a/src/theme_builder/components/StyleRuleEditor.h b/src/theme_builder/components/StyleRuleEditor.h
index 181ff0ef..5a14161e 100644
--- a/src/theme_builder/components/StyleRuleEditor.h
+++ b/src/theme_builder/components/StyleRuleEditor.h
@@ -15,7 +15,7 @@ class StyleRuleEditor : public ui::components::Component {
~StyleRuleEditor() override;
public:
- ui::controls::Control* GetRootControl() override { return main_layout_; }
+ ui::controls::Control* GetRootControl() override { return &main_layout_; }
void BindStyleRule(ui::style::StyleRule* rule);
@@ -23,7 +23,7 @@ class StyleRuleEditor : public ui::components::Component {
void UpdateView();
private:
- ui::controls::FlexLayout* main_layout_;
+ ui::controls::FlexLayout main_layout_;
ui::style::StyleRule* style_rule_;
};
diff --git a/src/theme_builder/components/StyleRuleSetEditor.cpp b/src/theme_builder/components/StyleRuleSetEditor.cpp
index 313b53da..072b8307 100644
--- a/src/theme_builder/components/StyleRuleSetEditor.cpp
+++ b/src/theme_builder/components/StyleRuleSetEditor.cpp
@@ -3,14 +3,9 @@
namespace cru::theme_builder {
using namespace cru::ui::controls;
-StyleRuleSetEditor::StyleRuleSetEditor() {
- main_layout_ = FlexLayout::Create();
-}
+StyleRuleSetEditor::StyleRuleSetEditor() {}
-StyleRuleSetEditor::~StyleRuleSetEditor() {
- main_layout_->RemoveFromParent();
- delete main_layout_;
-}
+StyleRuleSetEditor::~StyleRuleSetEditor() { main_layout_.RemoveFromParent(); }
void StyleRuleSetEditor::BindStyleRuleSet(
std::shared_ptr<ui::style::StyleRuleSet> rule_set) {
diff --git a/src/theme_builder/components/StyleRuleSetEditor.h b/src/theme_builder/components/StyleRuleSetEditor.h
index 50f1c80d..75597cf4 100644
--- a/src/theme_builder/components/StyleRuleSetEditor.h
+++ b/src/theme_builder/components/StyleRuleSetEditor.h
@@ -15,7 +15,7 @@ class StyleRuleSetEditor : public ui::components::Component {
~StyleRuleSetEditor() override;
public:
- ui::controls::Control* GetRootControl() override { return main_layout_; }
+ ui::controls::Control* GetRootControl() override { return &main_layout_; }
void BindStyleRuleSet(std::shared_ptr<ui::style::StyleRuleSet> rule_set);
@@ -23,7 +23,7 @@ class StyleRuleSetEditor : public ui::components::Component {
void UpdateView();
private:
- ui::controls::FlexLayout* main_layout_;
+ ui::controls::FlexLayout main_layout_;
std::shared_ptr<ui::style::StyleRuleSet> style_rule_set_;
};
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() {}