[PATCH 2/5] pattern: Use pixman for REPEAT_PAD

Thomas Jaeger ThJaeger at gmail.com
Thu Feb 19 09:09:36 PST 2009


---
 configure.ac        |    2 +-
 src/cairo-pattern.c |   94 ---------------------------------------------------
 2 files changed, 1 insertions(+), 95 deletions(-)

diff --git a/configure.ac b/configure.ac
index 8afadcc..5856f59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -450,7 +450,7 @@ CAIRO_ENABLE(test_surfaces, test surfaces, no)
 dnl ===========================================================================
 
 CAIRO_ENABLE_SURFACE_BACKEND(image, image, always, [
-  pixman_REQUIRES="pixman-1 >= 0.12.0"
+  pixman_REQUIRES="pixman-1 >= 0.15.0"
   PKG_CHECK_MODULES(pixman, $pixman_REQUIRES, , [AC_MSG_RESULT(no)
   use_image="no (requires $pixman_REQUIRES http://cairographics.org/releases/)"])
   image_REQUIRES=$pixman_REQUIRES
diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c
index 0fb36bf..499a25d 100644
--- a/src/cairo-pattern.c
+++ b/src/cairo-pattern.c
@@ -1839,100 +1839,6 @@ _cairo_pattern_acquire_surface_for_surface (const cairo_surface_pattern_t   *pat
 	}
     }
 
-    /* XXX: Hack:
-     *
-     * The way we currently support CAIRO_EXTEND_REFLECT is to create
-     * an image twice bigger on each side, and create a pattern of four
-     * images such that the new image, when repeated, has the same effect
-     * of reflecting the original pattern.
-     */
-    if (attr->extend == CAIRO_EXTEND_REFLECT) {
-	cairo_t *cr;
-	cairo_surface_t *src;
-	int w, h;
-
-	status = _cairo_surface_get_extents (surface, &extents);
-	if (unlikely (status))
-	    goto BAIL;
-
-	status = _cairo_surface_clone_similar (dst, surface,
-					       extents.x, extents.y,
-					       extents.width, extents.height,
-					       &extents.x, &extents.y, &src);
-	if (unlikely (status))
-	    goto BAIL;
-
-	w = 2 * extents.width;
-	h = 2 * extents.height;
-
-	if (is_identity) {
-	    attr->x_offset = -x;
-	    x += tx;
-	    while (x <= -w)
-		x += w;
-	    while (x >= w)
-		x -= w;
-	    extents.x += x;
-	    tx = x = 0;
-
-	    attr->y_offset = -y;
-	    y += ty;
-	    while (y <= -h)
-		y += h;
-	    while (y >= h)
-		y -= h;
-	    extents.y += y;
-	    ty = y = 0;
-	}
-
-	cairo_surface_destroy (surface);
-	surface = cairo_surface_create_similar (dst, dst->content, w, h);
-	if (surface->status) {
-	    cairo_surface_destroy (src);
-	    return surface->status;
-	}
-
-	surface->device_transform = pattern->surface->device_transform;
-	surface->device_transform_inverse = pattern->surface->device_transform_inverse;
-
-	cr = cairo_create (surface);
-
-	cairo_set_source_surface (cr, src, -extents.x, -extents.y);
-	cairo_paint (cr);
-
-	cairo_scale (cr, -1, +1);
-	cairo_set_source_surface (cr, src, extents.x-w, -extents.y);
-	cairo_paint (cr);
-	cairo_set_source_surface (cr, src, extents.x, -extents.y);
-	cairo_paint (cr);
-
-	cairo_scale (cr, +1, -1);
-	cairo_set_source_surface (cr, src, extents.x-w, extents.y-h);
-	cairo_paint (cr);
-	cairo_set_source_surface (cr, src, extents.x, extents.y-h);
-	cairo_paint (cr);
-	cairo_set_source_surface (cr, src, extents.x-w, extents.y);
-	cairo_paint (cr);
-	cairo_set_source_surface (cr, src, extents.x, extents.y);
-	cairo_paint (cr);
-
-	cairo_scale (cr, -1, +1);
-	cairo_set_source_surface (cr, src, -extents.x, extents.y-h);
-	cairo_paint (cr);
-	cairo_set_source_surface (cr, src, -extents.x, extents.y);
-	cairo_paint (cr);
-
-	status = cairo_status (cr);
-	cairo_destroy (cr);
-
-	cairo_surface_destroy (src);
-
-	if (unlikely (status))
-	    goto BAIL;
-
-	attr->extend = CAIRO_EXTEND_REPEAT;
-    }
-
     status = _cairo_surface_get_extents (surface, &extents);
     if (unlikely (status))
 	goto BAIL;
-- 
1.6.3


--------------010101010805020406070805
Content-Type: text/x-patch;
 name="0003-xlib-Use-server-side-gradients-when-available.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename*0="0003-xlib-Use-server-side-gradients-when-available.patch"



More information about the cairo mailing list