A CGImage is read-only, but it just happened to work anyway. Until 10.8
that is. Do it the documented way by having a CGBitmapContext instead.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4956 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/OSXPixelBuffer.cxx b/vncviewer/OSXPixelBuffer.cxx
index 77b435d..0e03fc9 100644
--- a/vncviewer/OSXPixelBuffer.cxx
+++ b/vncviewer/OSXPixelBuffer.cxx
@@ -40,29 +40,24 @@
   ManagedPixelBuffer(rfb::PixelFormat(32, 24, false, true,
                                       255, 255, 255, 16, 8, 0),
                      width, height),
-  image(NULL)
+  bitmap(NULL)
 {
   CGColorSpaceRef lut;
-  CGDataProviderRef provider;
 
   lut = CGColorSpaceCreateDeviceRGB();
   assert(lut);
-  provider = CGDataProviderCreateWithData(NULL, data, datasize, NULL);
-  assert(provider);
 
-  image = CGImageCreate(width, height, 8, 32, width*4, lut,
-                        kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little,
-                        provider, NULL, false, kCGRenderingIntentDefault);
-  assert(image);
+  bitmap = CGBitmapContextCreate(data, width, height, 8, width*4, lut,
+                                 kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little);
+  assert(bitmap);
 
-  CGDataProviderRelease(provider);
   CGColorSpaceRelease(lut);
 }
 
 
 PlatformPixelBuffer::~PlatformPixelBuffer()
 {
-  CGImageRelease((CGImageRef)image);
+  CFRelease((CGContextRef)bitmap);
 }
 
 
@@ -71,6 +66,7 @@
   CGRect rect;
   CGContextRef gc;
   CGAffineTransform at;
+  CGImageRef image;
 
   gc = (CGContextRef)fl_gc;
 
@@ -102,7 +98,9 @@
   rect.size.width = width();
   rect.size.height = -height(); // Negative height does _not_ flip the image
 
-  CGContextDrawImage(gc, rect, (CGImageRef)image);
+  image = CGBitmapContextCreateImage((CGContextRef)bitmap);
+  CGContextDrawImage(gc, rect, image);
+  CGImageRelease(image);
 
   CGContextRestoreGState(gc);
 }