summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/quartz-layers-content.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/quartz-layers-content.patch')
-rw-r--r--gfx/cairo/quartz-layers-content.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/gfx/cairo/quartz-layers-content.patch b/gfx/cairo/quartz-layers-content.patch
new file mode 100644
index 0000000000..243d1f0171
--- /dev/null
+++ b/gfx/cairo/quartz-layers-content.patch
@@ -0,0 +1,125 @@
+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);
+