aboutsummaryrefslogtreecommitdiff
path: root/src/ui/Window.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-06-28 00:03:11 +0800
committercrupest <crupest@outlook.com>2020-06-28 00:03:11 +0800
commit06d1d0442276a05b6caad6e3468f4afb1e8ee5df (patch)
treeebd46f0fb7343dc57bf947b7b5fffc139c3ddeac /src/ui/Window.cpp
parente11be6caa9ef9b2b198ca61846e32f469627556e (diff)
downloadcru-06d1d0442276a05b6caad6e3468f4afb1e8ee5df.tar.gz
cru-06d1d0442276a05b6caad6e3468f4afb1e8ee5df.tar.bz2
cru-06d1d0442276a05b6caad6e3468f4afb1e8ee5df.zip
...
Diffstat (limited to 'src/ui/Window.cpp')
-rw-r--r--src/ui/Window.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/ui/Window.cpp b/src/ui/Window.cpp
new file mode 100644
index 00000000..de7044dd
--- /dev/null
+++ b/src/ui/Window.cpp
@@ -0,0 +1,28 @@
+#include "cru/ui/Window.hpp"
+
+#include "cru/ui/render/WindowRenderObject.hpp"
+#include "cru/ui/UiHost.hpp"
+
+namespace cru::ui {
+Window* Window::CreateOverlapped() {
+ return new Window(tag_overlapped_constructor{});
+}
+
+Window::Window(tag_overlapped_constructor) {
+ managed_ui_host_ = std::make_unique<UiHost>(this);
+}
+
+Window::~Window() {
+ // explicit destroy ui host first.
+ managed_ui_host_.reset();
+}
+
+std::string_view Window::GetControlType() const { return control_type; }
+
+render::RenderObject* Window::GetRenderObject() const { return render_object_; }
+
+void Window::OnChildChanged(Control* old_child, Control* new_child) {
+ if (old_child) render_object_->RemoveChild(0);
+ if (new_child) render_object_->AddChild(new_child->GetRenderObject(), 0);
+}
+} // namespace cru::ui