1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/cairo/quartz-fix-PAD.patch Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,64 @@ 1.4 +From: Robert O'Callahan <robert@ocallahan.org> 1.5 +Bug 593270. Part 2: Treat EXTEND_PAD like EXTEND_NONE when painting. r=jrmuizel,a=joe 1.6 + 1.7 +diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c 1.8 +--- a/gfx/cairo/cairo/src/cairo-quartz-surface.c 1.9 ++++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c 1.10 +@@ -1464,35 +1464,35 @@ static void 1.11 + _cairo_quartz_setup_surface_source (cairo_quartz_surface_t *surface, 1.12 + const cairo_surface_pattern_t *spat, 1.13 + cairo_rectangle_int_t *extents, 1.14 + cairo_quartz_drawing_state_t *state) 1.15 + { 1.16 + const cairo_pattern_t *source = &spat->base; 1.17 + CGContextRef context = state->context; 1.18 + 1.19 +- if (source->extend == CAIRO_EXTEND_NONE || 1.20 ++ if (source->extend == CAIRO_EXTEND_NONE || source->extend == CAIRO_EXTEND_PAD || 1.21 + (CGContextDrawTiledImagePtr && source->extend == CAIRO_EXTEND_REPEAT)) 1.22 + { 1.23 + cairo_surface_t *pat_surf = spat->surface; 1.24 + CGImageRef img; 1.25 + cairo_matrix_t m = spat->base.matrix; 1.26 + cairo_rectangle_int_t extents; 1.27 + CGAffineTransform xform; 1.28 + CGRect srcRect; 1.29 + cairo_fixed_t fw, fh; 1.30 + cairo_bool_t is_bounded; 1.31 ++ cairo_bool_t repeat = source->extend == CAIRO_EXTEND_REPEAT; 1.32 + cairo_status_t status; 1.33 + 1.34 + cairo_matrix_invert(&m); 1.35 + _cairo_quartz_cairo_matrix_to_quartz (&m, &state->transform); 1.36 + 1.37 + /* Draw nonrepeating CGLayer surface using DO_LAYER */ 1.38 +- if (source->extend == CAIRO_EXTEND_NONE || 1.39 +- (CGContextDrawTiledImagePtr && source->extend == CAIRO_EXTEND_REPEAT)) 1.40 ++ if (!repeat && cairo_surface_get_type (pat_surf) == CAIRO_SURFACE_TYPE_QUARTZ) { 1.41 + cairo_quartz_surface_t *quartz_surf = (cairo_quartz_surface_t *) pat_surf; 1.42 + if (quartz_surf->cgLayer) { 1.43 + state->imageRect = CGRectMake (0, 0, quartz_surf->extents.width, quartz_surf->extents.height); 1.44 + state->layer = quartz_surf->cgLayer; 1.45 + state->action = DO_LAYER; 1.46 + return; 1.47 + } 1.48 + } 1.49 +@@ -1510,17 +1510,17 @@ _cairo_quartz_setup_surface_source (cair 1.50 + /* XXXroc what is this for? */ 1.51 + CGContextSetRGBFillColor (surface->cgContext, 0, 0, 0, 1); 1.52 + 1.53 + state->image = img; 1.54 + 1.55 + is_bounded = _cairo_surface_get_extents (pat_surf, &extents); 1.56 + assert (is_bounded); 1.57 + 1.58 +- if (source->extend == CAIRO_EXTEND_NONE) { 1.59 ++ if (!repeat) { 1.60 + state->imageRect = CGRectMake (0, 0, extents.width, extents.height); 1.61 + state->action = DO_IMAGE; 1.62 + return; 1.63 + } 1.64 + 1.65 + /* Quartz seems to tile images at pixel-aligned regions only -- this 1.66 + * leads to seams if the image doesn't end up scaling to fill the 1.67 + * space exactly. The CGPattern tiling approach doesn't have this