diff options
Diffstat (limited to 'include/cru/ui/Window.hpp')
-rw-r--r-- | include/cru/ui/Window.hpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/cru/ui/Window.hpp b/include/cru/ui/Window.hpp new file mode 100644 index 00000000..eb2ecfbb --- /dev/null +++ b/include/cru/ui/Window.hpp @@ -0,0 +1,40 @@ +#pragma once +#include "ContentControl.hpp" + +namespace cru::ui { +class Window final : public ContentControl { + friend UiHost; + + public: + static constexpr std::string_view control_type = "Window"; + + public: + static Window* CreateOverlapped(); + + private: + struct tag_overlapped_constructor {}; + + explicit Window(tag_overlapped_constructor); + + public: + Window(const Window& other) = delete; + Window(Window&& other) = delete; + Window& operator=(const Window& other) = delete; + Window& operator=(Window&& other) = delete; + ~Window() override; + + public: + std::string_view GetControlType() const final; + + render::RenderObject* GetRenderObject() const override; + + protected: + void OnChildChanged(Control* old_child, Control* new_child) override; + + private: + std::unique_ptr<UiHost> managed_ui_host_; + + // UiHost is responsible to take care of lifetime of this. + render::WindowRenderObject* render_object_; +}; +} // namespace cru::ui |