Browse Source

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
tags/v1.2.90
Pierre Ossman 11 years ago
parent
commit
cb9eefabc5
2 changed files with 11 additions and 13 deletions
  1. 9
    11
      vncviewer/OSXPixelBuffer.cxx
  2. 2
    2
      vncviewer/OSXPixelBuffer.h

+ 9
- 11
vncviewer/OSXPixelBuffer.cxx View 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);
}

+ 2
- 2
vncviewer/OSXPixelBuffer.h View 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;
};



Loading…
Cancel
Save