]> git.saurik.com Git - wxWidgets.git/commitdiff
workaround because regions that were built up, were sometimes being drawn on the...
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 19 Aug 2005 16:29:09 +0000 (16:29 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 19 Aug 2005 16:29:09 +0000 (16:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35234 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/region.cpp

index 3fb09a1ad27f2c20dae9ec455e599cf55049fe8b..3e437b45990454a769f85e2361ce6b0897cd16e4 100644 (file)
@@ -89,25 +89,41 @@ wxRegion::wxRegion(size_t n, const wxPoint *points, int WXUNUSED(fillStyle))
 {
     m_refData = new wxRegionRefData;
 
-    OpenRgn();
-
-    wxCoord x1, x2 , y1 , y2 ;
-    x2 = x1 = points[0].x ;
-    y2 = y1 = points[0].y ;
-    ::MoveTo(x1,y1);
-    for (size_t i = 1; i < n; i++)
-    {
-        x2 = points[i].x ;
-        y2 = points[i].y ;
-        ::LineTo(x2, y2);
-    }
-    // close the polyline if necessary
-    if ( x1 != x2 || y1 != y2 )
+    // 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
+    
+       GWorldPtr       gWorld = NULL;
+       GWorldPtr       oldWorld;
+       GDHandle        oldGDHandle;
+    OSStatus    err ;
+       Rect            destRect = {0,0,1,1};
+    
+    ::GetGWorld( &oldWorld, &oldGDHandle );
+    err = ::NewGWorld( &gWorld, 32, &destRect, nil, nil, 0 );
+    if ( err == noErr )
     {
-        ::LineTo(x1,y1 ) ;
+        ::SetGWorld( gWorld, GetGDevice() );
+        
+        OpenRgn();
+
+        wxCoord x1, x2 , y1 , y2 ;
+        x2 = x1 = points[0].x ;
+        y2 = y1 = points[0].y ;
+        ::MoveTo(x1,y1);
+        for (size_t i = 1; i < n; i++)
+        {
+            x2 = points[i].x ;
+            y2 = points[i].y ;
+            ::LineTo(x2, y2);
+        }
+        // close the polyline if necessary
+        if ( x1 != x2 || y1 != y2 )
+        {
+            ::LineTo(x1,y1 ) ;
+        }
+        CloseRgn( M_REGION ) ;
+        ::SetGWorld( oldWorld, oldGDHandle );
     }
-    ClosePoly();
-    CloseRgn( M_REGION ) ;
 }
 
 /*!