aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls/ControlHost.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/controls/ControlHost.cpp')
-rw-r--r--src/ui/controls/ControlHost.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/ui/controls/ControlHost.cpp b/src/ui/controls/ControlHost.cpp
index 09639465..f83aa1a2 100644
--- a/src/ui/controls/ControlHost.cpp
+++ b/src/ui/controls/ControlHost.cpp
@@ -15,11 +15,14 @@ ControlHost::ControlHost(Control* root_control)
mouse_hover_control_(nullptr),
mouse_captured_control_(nullptr),
layout_prefer_to_fill_window_(true) {
- root_control->TraverseDescendents(
+ root_control_->TraverseDescendents(
[this](Control* control) { control->host_ = this; }, true);
}
-ControlHost::~ControlHost() {}
+ControlHost::~ControlHost() {
+ root_control_->TraverseDescendents(
+ [this](Control* control) { control->host_ = nullptr; }, true);
+}
platform::gui::INativeWindow* ControlHost::GetNativeWindow() {
return native_window_.get();
@@ -121,11 +124,7 @@ ControlHost::CreateNativeWindow() {
return std::unique_ptr<platform::gui::INativeWindow>(native_window);
}
-void ControlHost::InvalidatePaint() {
- repaint_schedule_canceler_.Reset(
- platform::gui::IUiApplication::GetInstance()->SetImmediate(
- [this] { Repaint(); }));
-}
+void ControlHost::InvalidatePaint() { native_window_->RequestRepaint(); }
void ControlHost::InvalidateLayout() {
relayout_schedule_canceler_.Reset(
@@ -244,7 +243,7 @@ void ControlHost::OnNativeDestroy(platform::gui::INativeWindow* window,
void ControlHost::OnNativePaint(platform::gui::INativeWindow* window,
std::nullptr_t) {
CRU_UNUSED(window)
- InvalidatePaint();
+ Repaint();
}
void ControlHost::OnNativeResize(platform::gui::INativeWindow* window,