summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/quartz-cg-layers-fix-fallback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/quartz-cg-layers-fix-fallback.patch')
-rw-r--r--gfx/cairo/quartz-cg-layers-fix-fallback.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/gfx/cairo/quartz-cg-layers-fix-fallback.patch b/gfx/cairo/quartz-cg-layers-fix-fallback.patch
new file mode 100644
index 000000000..bcebab350
--- /dev/null
+++ b/gfx/cairo/quartz-cg-layers-fix-fallback.patch
@@ -0,0 +1,42 @@
+Bug 572912. Fix surface type passed to cairo_quartz_surface_create during fallback for CGLayers. r=jrmuizel
+
+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
+@@ -2026,17 +2026,17 @@ _cairo_quartz_surface_acquire_image (voi
+
+ /* ND((stderr, "%p _cairo_quartz_surface_acquire_image\n", surface)); */
+
+ status = _cairo_quartz_get_image (surface, image_out);
+
+ if (status == CAIRO_INT_STATUS_UNSUPPORTED && surface->cgLayer) {
+ /* copy the layer into a Quartz bitmap context so we can get the data */
+ cairo_surface_t *tmp =
+- cairo_quartz_surface_create (CAIRO_CONTENT_COLOR_ALPHA,
++ cairo_quartz_surface_create (CAIRO_FORMAT_ARGB32,
+ surface->extents.width,
+ surface->extents.height);
+ cairo_quartz_surface_t *tmp_surface = (cairo_quartz_surface_t *) tmp;
+
+ /* if surface creation failed, we won't have a Quartz surface here */
+ if (cairo_surface_get_type (tmp) == CAIRO_SURFACE_TYPE_QUARTZ &&
+ tmp_surface->imageSurfaceEquiv) {
+ CGContextSaveGState (tmp_surface->cgContext);
+@@ -2049,16 +2049,17 @@ _cairo_quartz_surface_acquire_image (voi
+ CGContextDrawLayerAtPoint (tmp_surface->cgContext,
+ CGPointMake (0.0, 0.0),
+ surface->cgLayer);
+ CGContextRestoreGState (tmp_surface->cgContext);
+
+ *image_out = (cairo_image_surface_t*)
+ cairo_surface_reference(tmp_surface->imageSurfaceEquiv);
+ *image_extra = tmp;
++ status = CAIRO_STATUS_SUCCESS;
+ } else {
+ cairo_surface_destroy (tmp);
+ }
+ }
+
+ if (status)
+ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
+