From 5e8c9935fda0029fadba1c4106f15fb39b8eec39 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Fri, 19 Aug 2005 16:29:09 +0000 Subject: [PATCH] workaround because regions that were built up, were sometimes being drawn on the screen as well... git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35234 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/region.cpp | 50 ++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/mac/carbon/region.cpp b/src/mac/carbon/region.cpp index 3fb09a1ad2..3e437b4599 100644 --- a/src/mac/carbon/region.cpp +++ b/src/mac/carbon/region.cpp @@ -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 ) ; } /*! -- 2.45.2