summaryrefslogtreecommitdiffstats
path: root/gfx/cairo/fix-xcopyarea-with-clips.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/cairo/fix-xcopyarea-with-clips.patch')
-rw-r--r--gfx/cairo/fix-xcopyarea-with-clips.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/gfx/cairo/fix-xcopyarea-with-clips.patch b/gfx/cairo/fix-xcopyarea-with-clips.patch
new file mode 100644
index 0000000000..6bf3320b62
--- /dev/null
+++ b/gfx/cairo/fix-xcopyarea-with-clips.patch
@@ -0,0 +1,38 @@
+From: Benjamin Otte <otte@redhat.com>
+Date: Thu, 29 Apr 2010 16:20:59 +0000
+Subject: xlib: Don't modify variables that are needed later
+
+In the XCopyArea region code, don't modify src_x/y when they are later
+used in the unbounded fixup code.
+
+Exposed by composite-integer-translate-source test.
+---
+diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c
+index bedc3fd..30c08d3 100644
+--- a/gfx/cairo/cairo/src/cairo-xlib-surface.c
++++ b/gfx/cairo/cairo/src/cairo-xlib-surface.c
+@@ -2322,10 +2322,10 @@ _cairo_xlib_surface_composite (cairo_operator_t op,
+ width, height,
+ dst_x, dst_y);
+ } else {
+- int n, num_rects;
++ int n, num_rects, x, y;
+
+- src_x += src_attr.x_offset + itx - dst_x;
+- src_y += src_attr.y_offset + ity - dst_y;
++ x = src_x + src_attr.x_offset + itx - dst_x;
++ y = src_y + src_attr.y_offset + ity - dst_y;
+
+ num_rects = cairo_region_num_rectangles (clip_region);
+ for (n = 0; n < num_rects; n++) {
+@@ -2333,7 +2333,7 @@ _cairo_xlib_surface_composite (cairo_operator_t op,
+
+ cairo_region_get_rectangle (clip_region, n, &rect);
+ XCopyArea (dst->dpy, src->drawable, dst->drawable, gc,
+- rect.x + src_x, rect.y + src_y,
++ rect.x + x, rect.y + y,
+ rect.width, rect.height,
+ rect.x, rect.y);
+ }
+--
+cgit v0.8.3-6-g21f6