diff --git a/cairo/Fl_Cairo.cxx b/cairo/Fl_Cairo.cxx index f627c1caa..6207d3c2e 100644 --- a/cairo/Fl_Cairo.cxx +++ b/cairo/Fl_Cairo.cxx @@ -106,13 +106,6 @@ static cairo_surface_t * cairo_create_surface(void * gc, int W, int H) { # elif defined(WIN32) return cairo_win32_surface_create((HDC) gc); # 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((CGContext*) gc, W, H); # else # error Cairo is not supported under this platform. diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index d5e3804aa..7e3b41660 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3537,6 +3537,14 @@ void Fl_Window::make_current() #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 if (views_use_CA) { i->gc = ((FLView*)[fl_window contentView])->layer_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(i->gc); + if (!CGAffineTransformIsIdentity(mat)) { // 10.4 + CGContextConcatCTM(i->gc, CGAffineTransformInvert(mat)); + } +# endif } else #endif {