]> git.saurik.com Git - wxWidgets.git/commitdiff
(Port to trunk) Fix for wxClientDC::GetAsBitmap, which partially resolves ticket...
authorKevin Ollivier <kevino@theolliviers.com>
Sun, 25 May 2008 21:54:32 +0000 (21:54 +0000)
committerKevin Ollivier <kevino@theolliviers.com>
Sun, 25 May 2008 21:54:32 +0000 (21:54 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53747 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/dcclient.cpp

index 4c2c1a8b9fc30574ff05561b3f878bea50431eba..0bd172fa844d878e4863ed3ed2ecfb3c477bb3ee 100644 (file)
@@ -121,33 +121,20 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
     int width = subrect != NULL ? subrect->width : (int)rect.size.width;
     int height = subrect !=  NULL ? subrect->height : (int)rect.size.height ;
 
-    bytesPerRow = ( ( width * 8 * 4 + 7 ) / 8 );
-
-    data = calloc( 1, bytesPerRow * height );
-    context = CGBitmapContextCreate( data, width, height, 8, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedFirst );
+    wxBitmap bmp = wxBitmap(width, height, 32);
+    
+    context = (CGContextRef)bmp.GetHBITMAP();
+    
+    CGContextSaveGState(context);
+    
+    CGContextTranslateCTM( context, 0,  height );
+    CGContextScaleCTM( context, 1, -1 );
 
     if ( subrect )
         rect = CGRectOffset( rect, -subrect->x, -subrect->y ) ;
     CGContextDrawImage( context, rect, image );
 
-    unsigned char* buffer = (unsigned char*) data;
-    wxBitmap bmp = wxBitmap(width, height, 32);
-    wxAlphaPixelData pixData(bmp, wxPoint(0,0), wxSize(width, height));
-
-    wxAlphaPixelData::Iterator p(pixData);
-    for (int y=0; y<height; y++) {
-        wxAlphaPixelData::Iterator rowStart = p;
-        for (int x=0; x<width; x++) {
-            unsigned char a = buffer[3];
-            p.Red()   = a; buffer++;
-            p.Green() = a; buffer++;
-            p.Blue()  = a; buffer++;
-            p.Alpha() = a; buffer++;
-            ++p;
-        }
-        p = rowStart;
-        p.OffsetY(pixData, 1);
-    }
+    CGContextRestoreGState(context);
 
     return bmp;
 #endif