diff options
author | crupest <crupest@outlook.com> | 2020-11-09 20:06:04 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-11-09 20:06:04 +0800 |
commit | 68fc33443981fcd499dfe263c228787e213ae943 (patch) | |
tree | 6a11d424a958d9c566e4c0b85b32212bfad9a1dc /src/ui/controls/RootControl.cpp | |
parent | ddc6d6478f849ef10b832bc8b1d8ab7fe9454601 (diff) | |
download | cru-68fc33443981fcd499dfe263c228787e213ae943.tar.gz cru-68fc33443981fcd499dfe263c228787e213ae943.tar.bz2 cru-68fc33443981fcd499dfe263c228787e213ae943.zip |
...
Diffstat (limited to 'src/ui/controls/RootControl.cpp')
-rw-r--r-- | src/ui/controls/RootControl.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/ui/controls/RootControl.cpp b/src/ui/controls/RootControl.cpp new file mode 100644 index 00000000..61d272f8 --- /dev/null +++ b/src/ui/controls/RootControl.cpp @@ -0,0 +1,45 @@ +#include "cru/ui/controls/RootControl.hpp" + +#include "cru/common/Base.hpp" +#include "cru/platform/gui/Base.hpp" +#include "cru/ui/host/WindowHost.hpp" +#include "cru/ui/render/Base.hpp" +#include "cru/ui/render/StackLayoutRenderObject.hpp" +#include "gsl/pointers" + +#include <memory> + +namespace cru::ui::controls { +RootControl::RootControl(Control* attached_control) + : attached_control_(attached_control) { + render_object_ = std::make_unique<render::StackLayoutRenderObject>(); + render_object_->SetAttachedControl(this); + SetContainerRenderObject(render_object_.get()); + window_host_ = std::make_unique<host::WindowHost>(this); +} + +RootControl::~RootControl() {} + +render::RenderObject* RootControl::GetRenderObject() const { + return render_object_.get(); +} + +void RootControl::Show(bool create) { + platform::gui::INativeWindow* native_window = GetNativeWindow(create); + if (!native_window) return; + native_window->SetVisible(true); +} + +platform::gui::INativeWindow* RootControl::GetNativeWindow(bool create) { + const auto host = GetWindowHost(); + platform::gui::INativeWindow* native_window = host->GetNativeWindow(); + if (!create) return native_window; + if (!native_window) { + native_window = this->CreateNativeWindow( + host, attached_control_ + ? attached_control_->GetWindowHost()->GetNativeWindow() + : nullptr); + } + return native_window; +} +} // namespace cru::ui::controls |