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