[gtk] GdkQuartz: Handle NULL from [NSGraphicsContext currentContext].



commit e31187e1cf5ca9901a9f435e75375e5fd8723888
Author: John Ralls <jralls ceridwen us>
Date:   Sat Oct 20 12:27:46 2018 -0700

    GdkQuartz: Handle NULL from [NSGraphicsContext currentContext].
    
    By returning a default surface. The situation where there's no
    currentContext arises when GtkCSS is trying to determine the
    layout sizes so no actual display is necessary.
    
    Closes: #1411

 gdk/quartz/gdksurface-quartz.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)
---
diff --git a/gdk/quartz/gdksurface-quartz.c b/gdk/quartz/gdksurface-quartz.c
index ff7c62a688..ca4a54aaab 100644
--- a/gdk/quartz/gdksurface-quartz.c
+++ b/gdk/quartz/gdksurface-quartz.c
@@ -135,9 +135,11 @@ gdk_surface_impl_quartz_get_context (GdkSurfaceImplQuartz *surface_impl,
         return NULL;
     }
   if (gdk_quartz_osx_version () < GDK_OSX_YOSEMITE)
-       cg_context = [[NSGraphicsContext currentContext] graphicsPort];
+    cg_context = [[NSGraphicsContext currentContext] graphicsPort];
   else
-       cg_context = [[NSGraphicsContext currentContext] CGContext];
+    cg_context = [[NSGraphicsContext currentContext] CGContext];
+  if (!cg_context)
+    return NULL;
   CGContextSaveGState (cg_context);
   CGContextSetAllowsAntialiasing (cg_context, antialias);
 
@@ -278,15 +280,15 @@ gdk_quartz_create_cairo_surface (GdkSurfaceImplQuartz *impl,
 
   cg_context = gdk_quartz_surface_get_context (impl, TRUE);
 
-  if (!cg_context)
-    return NULL;
-
   surface_data = g_new (GdkQuartzCairoSurfaceData, 1);
   surface_data->surface_impl = impl;
   surface_data->cg_context = cg_context;
 
-  surface = cairo_quartz_surface_create_for_cg_context (cg_context,
-                                                        width, height);
+  if (cg_context)
+    surface = cairo_quartz_surface_create_for_cg_context (cg_context,
+                                                          width, height);
+  else
+    surface = cairo_quartz_surface_create(CAIRO_FORMAT_ARGB32, width, height);
 
   cairo_surface_set_user_data (surface, &gdk_quartz_cairo_key,
                                surface_data,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]