Correct test for parent being on screen in wxTLW::DoCentre().

The old test was needlessly complicated, didn't take all cases into account
and had a typo in it which prevented it from working in half of the cases
which it did [try to] take into account.

Correct this by simply checking if the parent rectangle intersects the visible
display area at all.

Also simplify the code a little by checking for the window being maximized
from the beginning as centering a maximized window on either screen or parent
is a no-op.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63171 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2010-01-18 00:28:53 +00:00
parent f19259fce0
commit ca67f0d859

View File

@ -226,7 +226,10 @@ void wxTopLevelWindowBase::DoCentre(int dir)
{
// on some platforms centering top level windows is impossible
// because they are always maximized by guidelines or limitations
if(IsAlwaysMaximized())
//
// and centering a maximized window doesn't make sense as its position
// can't change
if ( IsAlwaysMaximized() || IsMaximized() )
return;
// we need the display rect anyhow so store it first: notice that we should
@ -248,25 +251,19 @@ void wxTopLevelWindowBase::DoCentre(int dir)
// parent frame under Mac but could happen elsewhere too if the frame
// was hidden/moved away for some reason), don't use it as otherwise
// this window wouldn't be visible at all
if ( !rectDisplay.Contains(rectParent.GetTopLeft()) &&
!rectParent.Contains(rectParent.GetBottomRight()) )
if ( !rectParent.Intersects(rectDisplay) )
{
// this is enough to make IsEmpty() test below pass
rectParent.width = 0;
// just centre on screen then
rectParent = rectDisplay;
}
}
if ( rectParent.IsEmpty() )
else
{
// we were explicitly asked to centre this window on the entire screen
// or if we have no parent anyhow and so can't centre on it
rectParent = rectDisplay;
}
// centering maximized window on screen is no-op
if((rectParent == rectDisplay) && IsMaximized())
return;
if ( !(dir & wxBOTH) )
dir |= wxBOTH; // if neither is specified, center in both directions