From 9dfa8a92a9ea0465f485d90f20fe0c18c0742e64 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Fri, 9 Nov 2018 14:46:49 +0000 Subject: [PATCH] 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_Window::make_current() rather than in cairo_create_surface(). git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@13120 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- cairo/Fl_Cairo.cxx | 7 ------- src/Fl_cocoa.mm | 8 ++++++++ 2 files changed, 8 insertions(+), 7 deletions(-) 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 {