gecko-dev/gfx/cairo/quartz-layers-content.patch

126 lines
5.1 KiB
Diff

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);