Fix macOS 10.14 Mojave support of the FLTK-cairo interface.
After experimenting with a modified cairo_test program that draws both with cairo and with regular FLTK drawing functions to the same window, it seems necessary to control for possible changes to the graphics context made by cairo in Fl_Cocoa_Window_Driver::make_current() rather than in cairo_create_surface(). git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@13119 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
b325a6b4b2
commit
43b511b784
@ -103,13 +103,6 @@ static cairo_surface_t * cairo_create_surface(void * gc, int W, int H) {
|
|||||||
# elif defined(_WIN32)
|
# elif defined(_WIN32)
|
||||||
return cairo_win32_surface_create((HDC) gc);
|
return cairo_win32_surface_create((HDC) gc);
|
||||||
# elif defined(__APPLE_QUARTZ__)
|
# elif defined(__APPLE_QUARTZ__)
|
||||||
CGAffineTransform mat = CGContextGetCTM((CGContextRef)gc);
|
|
||||||
if (mat.d > 0) { // necessary for layer-backed Cairo windows
|
|
||||||
CGContextRestoreGState((CGContextRef)gc);
|
|
||||||
CGContextRestoreGState((CGContextRef)gc);
|
|
||||||
CGContextSaveGState((CGContextRef)gc);
|
|
||||||
CGContextSaveGState((CGContextRef)gc);
|
|
||||||
}
|
|
||||||
return cairo_quartz_surface_create_for_cg_context((CGContextRef) gc, W, H);
|
return cairo_quartz_surface_create_for_cg_context((CGContextRef) gc, W, H);
|
||||||
# else
|
# else
|
||||||
# error Cairo is not supported under this platform.
|
# error Cairo is not supported under this platform.
|
||||||
|
@ -3421,6 +3421,14 @@ void Fl_Cocoa_Window_Driver::make_current()
|
|||||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
|
||||||
if (views_use_CA) {
|
if (views_use_CA) {
|
||||||
gc = ((FLView*)[fl_window contentView])->layer_data.gc;
|
gc = ((FLView*)[fl_window contentView])->layer_data.gc;
|
||||||
|
# ifdef FLTK_HAVE_CAIRO
|
||||||
|
// make sure the GC starts with an identity transformation matrix as do native Cocoa GC's
|
||||||
|
// because cairo may have changed it
|
||||||
|
CGAffineTransform mat = CGContextGetCTM(gc);
|
||||||
|
if (!CGAffineTransformIsIdentity(mat)) { // 10.4
|
||||||
|
CGContextConcatCTM(gc, CGAffineTransformInvert(mat));
|
||||||
|
}
|
||||||
|
# endif
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user