]> source.dussan.org Git - tigervnc.git/commitdiff
A CGImage is read-only, but it just happened to work anyway. Until 10.8
authorPierre Ossman <ossman@cendio.se>
Fri, 17 Aug 2012 13:37:42 +0000 (13:37 +0000)
committerPierre Ossman <ossman@cendio.se>
Fri, 17 Aug 2012 13:37:42 +0000 (13:37 +0000)
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

vncviewer/OSXPixelBuffer.cxx
vncviewer/OSXPixelBuffer.h

index 77b435dd63a4ad564d05c5f0c556d55fd9670772..0e03fc984498512eefd736e991c32cf5ea7d0800 100644 (file)
@@ -40,29 +40,24 @@ PlatformPixelBuffer::PlatformPixelBuffer(int width, int height) :
   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 @@ void PlatformPixelBuffer::draw(int src_x, int src_y, int x, int y, int w, int h)
   CGRect rect;
   CGContextRef gc;
   CGAffineTransform at;
+  CGImageRef image;
 
   gc = (CGContextRef)fl_gc;
 
@@ -102,7 +98,9 @@ void PlatformPixelBuffer::draw(int src_x, int src_y, int x, int y, int w, int h)
   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);
 }
index a74830c24a29256779e949fe702108ef3de6b8f2..e59015e54f52dd9a5b09a8d8afec8e0ab5b32789 100644 (file)
@@ -29,8 +29,8 @@ public:
   void draw(int src_x, int src_y, int x, int y, int w, int h);
 
 protected:
-  // This is really a CGImageRerf, but Apple headers conflict with FLTK
-  void *image;
+  // This is really a CGContextRef, but Apple headers conflict with FLTK
+  void *bitmap;
 };