]> git.saurik.com Git - wxWidgets.git/commitdiff
correcting a missing redraw area on certain resize operations when window has a border
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 6 Feb 2004 13:20:02 +0000 (13:20 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 6 Feb 2004 13:20:02 +0000 (13:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25533 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/window.cpp
src/mac/window.cpp

index 1e7584ac8d197b064d9f64d18aa6a82ce8f239e2..5e485ecf641c4e3db229a47ace13cfa7052f9478 100644 (file)
@@ -638,12 +638,40 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
                 oldRgn = NewRgn() ;
                 newRgn = NewRgn() ;
                 diffRgn = NewRgn() ;
+                
+                // invalidate the differences between the old and the new area
+                
                 SetRectRgn(oldRgn , oldPos.x , oldPos.y , oldPos.x + m_width , oldPos.y + m_height ) ;
                 SetRectRgn(newRgn , newPos.x , newPos.y , newPos.x + actualWidth , newPos.y + actualHeight ) ;
                 DiffRgn( newRgn , oldRgn , diffRgn ) ;
                 InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
                 DiffRgn( oldRgn , newRgn , diffRgn ) ;
                 InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+                
+                // we also must invalidate the border areas, someone might optimize this one day to invalidate only the really
+                // changing pixels...
+                
+                if ( MacGetLeftBorderSize() != 0 || MacGetRightBorderSize() != 0 || 
+                       MacGetTopBorderSize() != 0 || MacGetBottomBorderSize() != 0 )
+                {
+                       RgnHandle innerOldRgn, innerNewRgn ;
+                       innerOldRgn = NewRgn() ;
+                       innerNewRgn = NewRgn() ;
+                       
+                       SetRectRgn(innerOldRgn , oldPos.x + MacGetLeftBorderSize()  , oldPos.y + MacGetTopBorderSize() , 
+                               oldPos.x + m_width - MacGetRightBorderSize() , oldPos.y + m_height - MacGetBottomBorderSize() ) ;
+                   DiffRgn( oldRgn , innerOldRgn , diffRgn ) ;
+                       InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+
+                       SetRectRgn(innerNewRgn , newPos.x + MacGetLeftBorderSize()  , newPos.y + MacGetTopBorderSize() , 
+                               newPos.x + actualWidth - MacGetRightBorderSize() , newPos.y + actualHeight - MacGetBottomBorderSize() ) ;
+                   DiffRgn( newRgn , innerNewRgn , diffRgn ) ;
+                       InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+                       
+                       DisposeRgn( innerOldRgn ) ;
+                       DisposeRgn( innerNewRgn ) ;
+                }
+                
                 DisposeRgn(oldRgn) ;
                 DisposeRgn(newRgn) ;
                 DisposeRgn(diffRgn) ;
index 1e7584ac8d197b064d9f64d18aa6a82ce8f239e2..5e485ecf641c4e3db229a47ace13cfa7052f9478 100644 (file)
@@ -638,12 +638,40 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
                 oldRgn = NewRgn() ;
                 newRgn = NewRgn() ;
                 diffRgn = NewRgn() ;
+                
+                // invalidate the differences between the old and the new area
+                
                 SetRectRgn(oldRgn , oldPos.x , oldPos.y , oldPos.x + m_width , oldPos.y + m_height ) ;
                 SetRectRgn(newRgn , newPos.x , newPos.y , newPos.x + actualWidth , newPos.y + actualHeight ) ;
                 DiffRgn( newRgn , oldRgn , diffRgn ) ;
                 InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
                 DiffRgn( oldRgn , newRgn , diffRgn ) ;
                 InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+                
+                // we also must invalidate the border areas, someone might optimize this one day to invalidate only the really
+                // changing pixels...
+                
+                if ( MacGetLeftBorderSize() != 0 || MacGetRightBorderSize() != 0 || 
+                       MacGetTopBorderSize() != 0 || MacGetBottomBorderSize() != 0 )
+                {
+                       RgnHandle innerOldRgn, innerNewRgn ;
+                       innerOldRgn = NewRgn() ;
+                       innerNewRgn = NewRgn() ;
+                       
+                       SetRectRgn(innerOldRgn , oldPos.x + MacGetLeftBorderSize()  , oldPos.y + MacGetTopBorderSize() , 
+                               oldPos.x + m_width - MacGetRightBorderSize() , oldPos.y + m_height - MacGetBottomBorderSize() ) ;
+                   DiffRgn( oldRgn , innerOldRgn , diffRgn ) ;
+                       InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+
+                       SetRectRgn(innerNewRgn , newPos.x + MacGetLeftBorderSize()  , newPos.y + MacGetTopBorderSize() , 
+                               newPos.x + actualWidth - MacGetRightBorderSize() , newPos.y + actualHeight - MacGetBottomBorderSize() ) ;
+                   DiffRgn( newRgn , innerNewRgn , diffRgn ) ;
+                       InvalWindowRgn( (WindowRef) MacGetRootWindow() , diffRgn ) ;
+                       
+                       DisposeRgn( innerOldRgn ) ;
+                       DisposeRgn( innerNewRgn ) ;
+                }
+                
                 DisposeRgn(oldRgn) ;
                 DisposeRgn(newRgn) ;
                 DisposeRgn(diffRgn) ;