diff options
Diffstat (limited to 'gfx/cairo/quartz-layers-content.patch')
-rw-r--r-- | gfx/cairo/quartz-layers-content.patch | 125 |
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); + |