]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/region.cpp
porting forward scrolling fix
[wxWidgets.git] / src / mac / carbon / region.cpp
index 3a4fea178e6f8998c4d4abc1821ea6f97fa752fc..3ee709f722d998b8e1f3527aa0aaaf28f555d392 100644 (file)
@@ -99,7 +99,7 @@ wxRegion::wxRegion(size_t n, const wxPoint *points, int WXUNUSED(fillStyle))
 {
     m_refData = new wxRegionRefData;
 
-#ifndef __LP64__
+#if 0 // ndef __LP64__
     // TODO : any APIs ?
     // OS X somehow does not collect the region invisibly as before, so sometimes things
     // get drawn on screen instead of just being combined into a region, therefore we allocate a temp gworld now
@@ -165,7 +165,7 @@ bool wxRegion::DoOffset(wxCoord x, wxCoord y)
         // nothing to do
         return true;
 
-    HIShapeOffset( M_REGION , x , y ) ;
+    verify_noerr( HIShapeOffset( M_REGION , x , y ) ) ;
 
     return true ;
 }
@@ -191,11 +191,11 @@ bool wxRegion::DoCombine(const wxRegion& region, wxRegionOp op)
     switch (op)
     {
         case wxRGN_AND:
-            HIShapeIntersect( M_REGION , OTHER_M_REGION(region) , M_REGION ) ;
+            verify_noerr( HIShapeIntersect( M_REGION , OTHER_M_REGION(region) , M_REGION ) );
             break ;
 
         case wxRGN_OR:
-            HIShapeUnion( M_REGION , OTHER_M_REGION(region) , M_REGION ) ;
+            verify_noerr( HIShapeUnion( M_REGION , OTHER_M_REGION(region) , M_REGION ) );
             break ;
 
         case wxRGN_XOR:
@@ -203,12 +203,12 @@ bool wxRegion::DoCombine(const wxRegion& region, wxRegionOp op)
                 // XOR is defined as the difference between union and intersection
                 wxCFRef< HIShapeRef > unionshape( HIShapeCreateUnion( M_REGION , OTHER_M_REGION(region) ) );
                 wxCFRef< HIShapeRef > intersectionshape( HIShapeCreateIntersection( M_REGION , OTHER_M_REGION(region) ) );
-                HIShapeDifference( unionshape, intersectionshape, M_REGION );
+                verify_noerr( HIShapeDifference( unionshape, intersectionshape, M_REGION ) );
             }
             break ;
 
         case wxRGN_DIFF:
-            HIShapeDifference( M_REGION , OTHER_M_REGION(region) , M_REGION ) ;
+            verify_noerr( HIShapeDifference( M_REGION , OTHER_M_REGION(region) , M_REGION ) ) ;
             break ;
 
         case wxRGN_COPY:
@@ -298,8 +298,10 @@ wxRegionContain wxRegion::DoContainsRect(const wxRect& r) const
     
     if ( HIShapeIsRectangular(intersect) && CGRectEqualToRect(rect,bounds) )
         return wxInRegion;
-    else
+    else if ( HIShapeIsEmpty( intersect ) )
         return wxOutRegion;
+    else
+        return wxPartRegion;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -443,9 +445,10 @@ void wxRegionIterator::Reset(const wxRegion& region)
         RegionToRectsUPP proc = (RegionToRectsUPP) wxMacRegionToRectsCounterCallback;
 
         OSStatus err = noErr;
-        RgnHandle rgn = NewHandle();
+        RgnHandle rgn = NewRgn();
+        HIShapeGetAsQDRgn(OTHER_M_REGION(region), rgn);
         
-        err = QDRegionToRects (OTHER_M_REGION( region ) , kQDParseRegionFromTopLeft, proc, (void*)&m_numRects);
+        err = QDRegionToRects (rgn, kQDParseRegionFromTopLeft, proc, (void*)&m_numRects);
         if (err == noErr)
         {
             proc = (RegionToRectsUPP) wxMacRegionToRectsSetterCallback;
@@ -453,12 +456,13 @@ void wxRegionIterator::Reset(const wxRegion& region)
             RegionToRectsCallbackData data ;
             data.m_rects = m_rects ;
             data.m_current = 0 ;
-            QDRegionToRects( OTHER_M_REGION( region ) , kQDParseRegionFromTopLeft, proc, (void*)&data );
+            QDRegionToRects( rgn , kQDParseRegionFromTopLeft, proc, (void*)&data );
         }
         else
         {
             m_numRects = 0;
         }
+        DisposeRgn( rgn );
 #endif
     }
 }