From 19bce7226ad66127e6639b89959c469f223a460c Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 23 Aug 2009 03:06:44 +0000 Subject: [PATCH] Remove the forced resizing to preferred size when CenterIn is called, and instead just check if the size limits need to be set. The code that previously did this when processing the B_LAYOUT_WINDOW message was extracted into a private method, which is called from both places. This may be slightly wasteful in some cases (since the size limits may be set multiple times), but it is definitely needed because without it both of the current test apps (DiskProbe and Screenshot) did not have properly centered windows. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32622 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/interface/Window.h | 2 ++ src/kits/interface/Window.cpp | 30 +++++++++++++++++------------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/headers/os/interface/Window.h b/headers/os/interface/Window.h index ff4ad7fedb..b434321f91 100644 --- a/headers/os/interface/Window.h +++ b/headers/os/interface/Window.h @@ -344,6 +344,8 @@ private: void _GetDecoratorSize(float* _borderWidth, float* _tabHeight) const; + void _CheckSizeLimits(); + private: char* fTitle; int32 _unused0; diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp index b646c37cbd..da9769c1bf 100644 --- a/src/kits/interface/Window.cpp +++ b/src/kits/interface/Window.cpp @@ -1406,14 +1406,7 @@ FrameMoved(origin); case B_LAYOUT_WINDOW: { - if (fFlags & B_AUTO_UPDATE_SIZE_LIMITS) { - // Get min/max constraints of the top view and enforce window - // size limits respectively. - BSize minSize = fTopView->MinSize(); - BSize maxSize = fTopView->MaxSize(); - SetSizeLimits(minSize.width, maxSize.width, - minSize.height, maxSize.height); - } + _CheckSizeLimits(); // do the actual layout fTopView->Layout(false); @@ -2460,11 +2453,8 @@ BWindow::ResizeTo(float width, float height) void BWindow::CenterIn(const BRect& rect) { - // Force layout resizing if needed - if (GetLayout() != NULL) { - BSize size = GetLayout()->PreferredSize(); - ResizeTo(size.Width(), size.Height()); - } + // Set size limits now if needed + _CheckSizeLimits(); MoveTo(BLayoutUtils::AlignInFrame(rect, Size(), BAlignment(B_ALIGN_HORIZONTAL_CENTER, @@ -3884,6 +3874,20 @@ BWindow::_GetDecoratorSize(float* _borderWidth, float* _tabHeight) const } +void +BWindow::_CheckSizeLimits() +{ + if (fFlags & B_AUTO_UPDATE_SIZE_LIMITS) { + // Get min/max constraints of the top view and enforce window + // size limits respectively. + BSize minSize = fTopView->MinSize(); + BSize maxSize = fTopView->MaxSize(); + SetSizeLimits(minSize.width, maxSize.width, + minSize.height, maxSize.height); + } +} + + // #pragma mark - C++ binary compatibility kludge