aboutsummaryrefslogtreecommitdiff
path: root/src/ui/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/window.cpp')
-rw-r--r--src/ui/window.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/ui/window.cpp b/src/ui/window.cpp
index 2737b70b..41104924 100644
--- a/src/ui/window.cpp
+++ b/src/ui/window.cpp
@@ -429,10 +429,32 @@ namespace cru::ui
}
+ void Window::WindowInvalidateLayout()
+ {
+ if (is_layout_invalid_)
+ return;
+
+ is_layout_invalid_ = true;
+ InvokeLater([this]
+ {
+ if (is_layout_invalid_)
+ Relayout();
+ });
+ }
+
void Window::Relayout()
{
OnMeasureCore(GetSize());
OnLayoutCore(Rect(Point::Zero(), GetSize()));
+ is_layout_invalid_ = false;
+ }
+
+ void Window::SetSizeFitContent(const Size& max_size)
+ {
+ OnMeasureCore(max_size);
+ SetClientSize(GetDesiredSize());
+ OnLayoutCore(Rect(Point::Zero(), GetSize()));
+ is_layout_invalid_ = false;
}
void Window::RefreshControlList() {
@@ -597,7 +619,7 @@ namespace cru::ui
void Window::OnResizeInternal(const int new_width, const int new_height) {
render_target_->ResizeBuffer(new_width, new_height);
if (!(new_width == 0 && new_height == 0))
- InvalidateLayout();
+ WindowInvalidateLayout();
}
void Window::OnSetFocusInternal()