aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-11-09 20:45:27 +0800
committercrupest <crupest@outlook.com>2020-11-09 20:45:27 +0800
commitbed29872d2a7befff9d4cb7313cb40060326a95e (patch)
tree0439aa1d4a02a6bb5f92d48e5f585ad5d748059a /src
parent014aaf773fd95a7f0dd1a766023a21fb6b54a1a1 (diff)
downloadcru-bed29872d2a7befff9d4cb7313cb40060326a95e.tar.gz
cru-bed29872d2a7befff9d4cb7313cb40060326a95e.tar.bz2
cru-bed29872d2a7befff9d4cb7313cb40060326a95e.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/ui/controls/RootControl.cpp5
-rw-r--r--src/ui/host/WindowHost.cpp21
2 files changed, 22 insertions, 4 deletions
diff --git a/src/ui/controls/RootControl.cpp b/src/ui/controls/RootControl.cpp
index c6d9a577..1ebcb6e7 100644
--- a/src/ui/controls/RootControl.cpp
+++ b/src/ui/controls/RootControl.cpp
@@ -27,10 +27,7 @@ render::RenderObject* RootControl::GetRenderObject() const {
void RootControl::EnsureWindowCreated() { this->GetNativeWindow(true); }
void RootControl::SetRect(const Rect& rect) {
- auto native_window = GetNativeWindow(false);
- if (!native_window) return;
-
- native_window->SetWindowRect(rect);
+ window_host_->SetWindowRect(rect);
}
void RootControl::Show(bool create) {
diff --git a/src/ui/host/WindowHost.cpp b/src/ui/host/WindowHost.cpp
index 1550361b..5e107733 100644
--- a/src/ui/host/WindowHost.cpp
+++ b/src/ui/host/WindowHost.cpp
@@ -150,6 +150,10 @@ gsl::not_null<platform::gui::INativeWindow*> WindowHost::CreateNativeWindow(
BindNativeEvent(this, native_window, native_window->KeyUpEvent(),
&WindowHost::OnNativeKeyUp, event_revoker_guards_);
+ if (saved_rect_) {
+ native_window->SetWindowRect(saved_rect_.value());
+ }
+
native_window_change_event_.Raise(native_window);
return native_window_;
@@ -263,8 +267,25 @@ void WindowHost::RunAfterLayoutStable(std::function<void()> action) {
}
}
+Rect WindowHost::GetWindowRect() {
+ if (native_window_) return native_window_->GetWindowRect();
+ return saved_rect_.value_or(Rect{});
+}
+
+void WindowHost::SetSavedWindowRect(std::optional<Rect> rect) {
+ saved_rect_ = std::move(rect);
+}
+
+void WindowHost::SetWindowRect(const Rect& rect) {
+ SetSavedWindowRect(rect);
+ if (native_window_) native_window_->SetWindowRect(rect);
+}
+
void WindowHost::OnNativeDestroy(INativeWindow* window, std::nullptr_t) {
CRU_UNUSED(window)
+
+ saved_rect_ = this->native_window_->GetWindowRect();
+
this->native_window_ = nullptr;
event_revoker_guards_.clear();