summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/cairo-mask-extends-bug.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/cairo-mask-extends-bug.patch')
-rw-r--r--gfx/cairo/cairo-mask-extends-bug.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/gfx/cairo/cairo-mask-extends-bug.patch b/gfx/cairo/cairo-mask-extends-bug.patch
new file mode 100644
index 000000000..325772d82
--- /dev/null
+++ b/gfx/cairo/cairo-mask-extends-bug.patch
@@ -0,0 +1,41 @@
+diff --git a/gfx/cairo/cairo/src/cairo-image-surface.c b/gfx/cairo/cairo/src/cairo-image-surface.c
+--- a/gfx/cairo/cairo/src/cairo-image-surface.c
++++ b/gfx/cairo/cairo/src/cairo-image-surface.c
+@@ -1788,18 +1788,35 @@ static cairo_status_t
+ cairo_boxes_t *boxes)
+ {
+ cairo_boxes_t clear;
+ cairo_box_t box;
+ cairo_status_t status;
+ struct _cairo_boxes_chunk *chunk;
+ int i;
+
+- if (boxes->num_boxes < 1 && clip_region == NULL)
+- return _cairo_image_surface_fixup_unbounded (dst, extents, NULL);
++ // If we have no boxes then we need to clear the entire extents
++ // because we have nothing to draw.
++ if (boxes->num_boxes < 1 && clip_region == NULL) {
++ int x = extents->unbounded.x;
++ int y = extents->unbounded.y;
++ int width = extents->unbounded.width;
++ int height = extents->unbounded.height;
++
++ pixman_color_t color = { 0 };
++ pixman_box32_t box = { x, y, x + width, y + height };
++
++ if (! pixman_image_fill_boxes (PIXMAN_OP_CLEAR,
++ dst->pixman_image,
++ &color,
++ 1, &box)) {
++ return _cairo_error (CAIRO_STATUS_NO_MEMORY);
++ }
++ return CAIRO_STATUS_SUCCESS;
++ }
+
+ _cairo_boxes_init (&clear);
+
+ box.p1.x = _cairo_fixed_from_int (extents->unbounded.x + extents->unbounded.width);
+ box.p1.y = _cairo_fixed_from_int (extents->unbounded.y);
+ box.p2.x = _cairo_fixed_from_int (extents->unbounded.x);
+ box.p2.y = _cairo_fixed_from_int (extents->unbounded.y + extents->unbounded.height);
+