Fix improper NSGraphicsContext handling in wxOSXCreateBitmapContextFromNSImage.
Don't leave currentContext set to the temporary context indefinitely, but restore the previous one when done. It's apparent from the code that this is how it was meant to be done. Not doing this can result in strange, insanely hard to debug errors in completely unrelated places, because OS X (at least < 10.9) reuses a pool of contexts. For example, this change fixes Quicklook crashes in file open panel on 10.8. For detailed explanation, see the lengthy discussion at https://code.google.com/p/chromium/issues/detail?id=90140 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75709 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
48971280a5
commit
2c260e8188
@ -461,13 +461,14 @@ CGContextRef WXDLLIMPEXP_CORE wxOSXCreateBitmapContextFromNSImage( WX_NSImage ns
|
||||
hbitmap = CGBitmapContextCreate(NULL, imageSize.width*scale, imageSize.height*scale, 8, 0, wxMacGetGenericRGBColorSpace(), kCGImageAlphaPremultipliedFirst);
|
||||
CGContextScaleCTM( hbitmap, scale, scale );
|
||||
|
||||
NSGraphicsContext *previousContext = [NSGraphicsContext currentContext];
|
||||
NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext graphicsContextWithGraphicsPort:hbitmap flipped:NO];
|
||||
[NSGraphicsContext saveGraphicsState];
|
||||
[NSGraphicsContext setCurrentContext:nsGraphicsContext];
|
||||
[[NSColor whiteColor] setFill];
|
||||
NSRectFill(NSMakeRect(0.0, 0.0, imageSize.width, imageSize.height));
|
||||
[nsimage drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
|
||||
[NSGraphicsContext setCurrentContext:nsGraphicsContext];
|
||||
[NSGraphicsContext setCurrentContext:previousContext];
|
||||
}
|
||||
return hbitmap;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user