Raw File
quartz-layers-content.patch
diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c
--- a/gfx/cairo/cairo/src/cairo-quartz-surface.c
+++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c
@@ -2040,17 +2040,18 @@ _cairo_quartz_surface_create_similar (vo
 				       cairo_content_t content,
 				       int width,
 				       int height)
 {
     cairo_quartz_surface_t *surface = (cairo_quartz_surface_t *) abstract_surface;
     cairo_format_t format;
 
     if (surface->cgLayer)
-        return cairo_quartz_surface_create_cg_layer (abstract_surface, width, height);
+        return cairo_quartz_surface_create_cg_layer (abstract_surface, content,
+                                                     width, height);
 
     if (content == CAIRO_CONTENT_COLOR_ALPHA)
 	format = CAIRO_FORMAT_ARGB32;
     else if (content == CAIRO_CONTENT_COLOR)
 	format = CAIRO_FORMAT_RGB24;
     else if (content == CAIRO_CONTENT_ALPHA)
 	format = CAIRO_FORMAT_A8;
     else
@@ -2960,54 +2961,55 @@ cairo_quartz_surface_create_for_cg_conte
 
     return (cairo_surface_t *) surf;
 }
 
 /**
  * cairo_quartz_cglayer_surface_create_similar
  * @surface: The returned surface can be efficiently drawn into this
  * destination surface (if tiling is not used)."
+ * @content: the content type of the surface
  * @width: width of the surface, in pixels
  * @height: height of the surface, in pixels
  *
  * Creates a Quartz surface backed by a CGLayer, if the given surface
  * is a Quartz surface; the CGLayer is created to match the surface's
- * Quartz context. Otherwise just calls cairo_surface_create_similar
- * with CAIRO_CONTENT_COLOR_ALPHA.
+ * Quartz context. Otherwise just calls cairo_surface_create_similar.
  * The returned surface can be efficiently blitted to the given surface,
  * but tiling and 'extend' modes other than NONE are not so efficient.
  *
  * Return value: the newly created surface.
  *
  * Since: 1.10
  **/
 cairo_surface_t *
 cairo_quartz_surface_create_cg_layer (cairo_surface_t *surface,
+                                      cairo_content_t content,
                                       unsigned int width,
                                       unsigned int height)
 {
     cairo_quartz_surface_t *surf;
     CGLayerRef layer;
     CGContextRef ctx;
     CGContextRef cgContext;
 
     cgContext = cairo_quartz_surface_get_cg_context (surface);
     if (!cgContext)
-        return cairo_surface_create_similar (surface, CAIRO_CONTENT_COLOR_ALPHA,
+        return cairo_surface_create_similar (surface, content,
                                              width, height);
 
     if (!_cairo_quartz_verify_surface_size(width, height))
         return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_SIZE));
 
     /* If we pass zero width or height into CGLayerCreateWithContext below,
      * it will fail.
      */
     if (width == 0 || height == 0) {
         return (cairo_surface_t*)
-            _cairo_quartz_surface_create_internal (NULL, CAIRO_CONTENT_COLOR_ALPHA,
+            _cairo_quartz_surface_create_internal (NULL, content,
                                                    width, height);
     }
 
     layer = CGLayerCreateWithContext (cgContext,
                                       CGSizeMake (width, height),
                                       NULL);
     if (!layer)
       return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
@@ -3016,18 +3018,18 @@ cairo_quartz_surface_create_cg_layer (ca
     /* Flip it when we draw into it, so that when we finally composite it
      * to a flipped target, the directions match and Quartz will optimize
      * the composition properly
      */
     CGContextTranslateCTM (ctx, 0, height);
     CGContextScaleCTM (ctx, 1, -1);
 
     CGContextRetain (ctx);
-    surf = _cairo_quartz_surface_create_internal (ctx, CAIRO_CONTENT_COLOR_ALPHA,
-              width, height);
+    surf = _cairo_quartz_surface_create_internal (ctx, content,
+                                                  width, height);
     if (surf->base.status) {
         CGLayerRelease (layer);
         // create_internal will have set an error
         return (cairo_surface_t*) surf;
     }
     surf->cgLayer = layer;
 
     return (cairo_surface_t *) surf;
diff --git a/gfx/cairo/cairo/src/cairo-quartz.h b/gfx/cairo/cairo/src/cairo-quartz.h
--- a/gfx/cairo/cairo/src/cairo-quartz.h
+++ b/gfx/cairo/cairo/src/cairo-quartz.h
@@ -46,16 +46,17 @@ CAIRO_BEGIN_DECLS
 
 cairo_public cairo_surface_t *
 cairo_quartz_surface_create (cairo_format_t format,
                              unsigned int width,
                              unsigned int height);
 
 cairo_public cairo_surface_t *
 cairo_quartz_surface_create_cg_layer (cairo_surface_t *surface,
+                                      cairo_content_t content,
                                       unsigned int width,
                                       unsigned int height);
 
 cairo_public cairo_surface_t *
 cairo_quartz_surface_create_for_cg_context (CGContextRef cgContext,
                                             unsigned int width,
                                             unsigned int height);
 
back to top