X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/327788acc5e4915df4e9e97db7fb08a4c4a00cdd..2ad99bc1398db5a619b3682e90ad7a99485ae4c9:/src/mac/window.cpp?ds=sidebyside diff --git a/src/mac/window.cpp b/src/mac/window.cpp index 143edf6c1e..471c87c462 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -1542,7 +1542,7 @@ wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const return win ; } -const wxRegion& wxWindowMac::MacGetVisibleRegion() +const wxRegion& wxWindowMac::MacGetVisibleRegion( bool respectChildrenAndSiblings ) { RgnHandle visRgn = NewRgn() ; RgnHandle tempRgn = NewRgn() ; @@ -1569,49 +1569,57 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion() x = y = 0 ; parent->MacWindowToRootWindow( &x, &y ) ; MacRootWindowToWindow( &x , &y ) ; - SetRectRgn( tempRgn , x , y , x + size.x , y + size.y ) ; + + SetRectRgn( tempRgn , + x + parent->MacGetLeftBorderSize() , y + parent->MacGetTopBorderSize() , + x + size.x - parent->MacGetLeftBorderSize() - parent->MacGetRightBorderSize(), + y + size.y - parent->MacGetTopBorderSize() - parent->MacGetBottomBorderSize()) ; + SectRgn( visRgn , tempRgn , visRgn ) ; if ( parent->IsTopLevel() ) break ; parent = parent->GetParent() ; } } - if ( GetWindowStyle() & wxCLIP_CHILDREN ) + if ( respectChildrenAndSiblings ) { - for (wxNode *node = GetChildren().First(); node; node = node->Next()) - { - wxWindowMac *child = (wxWindowMac*)node->Data(); - - if ( !child->IsTopLevel() && child->IsShown() ) + if ( GetWindowStyle() & wxCLIP_CHILDREN ) + { + for (wxNode *node = GetChildren().First(); node; node = node->Next()) { - SetRectRgn( tempRgn , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; - DiffRgn( visRgn , tempRgn , visRgn ) ; - } - } - } + wxWindowMac *child = (wxWindowMac*)node->Data(); - if ( (GetWindowStyle() & wxCLIP_SIBLINGS) && GetParent() ) - { - bool thisWindowThrough = false ; - for (wxNode *node = GetParent()->GetChildren().First(); node; node = node->Next()) - { - wxWindowMac *sibling = (wxWindowMac*)node->Data(); - if ( sibling == this ) - { - thisWindowThrough = true ; - continue ; - } - if( !thisWindowThrough ) - { - continue ; + if ( !child->IsTopLevel() && child->IsShown() ) + { + SetRectRgn( tempRgn , child->m_x , child->m_y , child->m_x + child->m_width , child->m_y + child->m_height ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } } + } - if ( !sibling->IsTopLevel() && sibling->IsShown() ) + if ( (GetWindowStyle() & wxCLIP_SIBLINGS) && GetParent() ) + { + bool thisWindowThrough = false ; + for (wxNode *node = GetParent()->GetChildren().First(); node; node = node->Next()) { - SetRectRgn( tempRgn , sibling->m_x - m_x , sibling->m_y - m_y , sibling->m_x + sibling->m_width - m_x , sibling->m_y + sibling->m_height - m_y ) ; - DiffRgn( visRgn , tempRgn , visRgn ) ; + wxWindowMac *sibling = (wxWindowMac*)node->Data(); + if ( sibling == this ) + { + thisWindowThrough = true ; + continue ; + } + if( !thisWindowThrough ) + { + continue ; + } + + if ( !sibling->IsTopLevel() && sibling->IsShown() ) + { + SetRectRgn( tempRgn , sibling->m_x - m_x , sibling->m_y - m_y , sibling->m_x + sibling->m_width - m_x , sibling->m_y + sibling->m_height - m_y ) ; + DiffRgn( visRgn , tempRgn , visRgn ) ; + } } - } + } } m_macVisibleRegion = visRgn ; DisposeRgn( visRgn ) ;