[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cairo-commit
Subject:    [cairo-commit] src/cairo-image-surface.c
From:       ickle () kemper ! freedesktop ! org (Chris Wilson)
Date:       2010-02-28 9:11:04
Message-ID: 20100228091104.E620A10058 () kemper ! freedesktop ! org
[Download RAW message or body]

 src/cairo-image-surface.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

New commits:
commit 620cd9c2be4a6bef790e6818652470a5c53d578d
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sun Feb 28 09:09:20 2010 +0000

    image: Allow reduction of repeat modes for unity scaled patterns.

diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c
index 9b86419..9d74350 100644
--- a/src/cairo-image-surface.c
+++ b/src/cairo-image-surface.c
@@ -1196,6 +1196,7 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern,
 			   int *ix, int *iy)
 {
     pixman_image_t *pixman_image;
+    cairo_bool_t is_pixel_exact;
     cairo_extend_t extend;
     double tx, ty;
 
@@ -1203,13 +1204,12 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern,
     ty = pattern->base.matrix.y0;
 
     extend = pattern->base.extend;
+    is_pixel_exact = _cairo_matrix_is_pixel_exact (&pattern->base.matrix);
 
     pixman_image = NULL;
     if (pattern->surface->type == CAIRO_SURFACE_TYPE_IMAGE) {
 	cairo_image_surface_t *source = (cairo_image_surface_t *) pattern->surface;
 	cairo_surface_type_t type;
-	cairo_bool_t has_identity_transform =
-	    _cairo_matrix_is_identity (&pattern->base.matrix);
 
 	if (source->base.backend->type == CAIRO_INTERNAL_SURFACE_TYPE_SNAPSHOT)
 	    source = (cairo_image_surface_t *) ((cairo_surface_snapshot_t *) pattern->surface)->target;
@@ -1217,7 +1217,7 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern,
 	type = source->base.backend->type;
 	if (type == CAIRO_SURFACE_TYPE_IMAGE) {
 	    if (extend != CAIRO_EXTEND_NONE &&
-		has_identity_transform &&
+		is_pixel_exact &&
 		extents->x >= 0 && extents->y >= 0 &&
 		extents->x + extents->width  <= source->width &&
 		extents->y + extents->height <= source->height)
@@ -1250,7 +1250,7 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern,
 	    source = (cairo_image_surface_t *) sub->target;
 
 	    if (extend != CAIRO_EXTEND_NONE &&
-		has_identity_transform &&
+		is_pixel_exact &&
 		extents->x >= 0 && extents->y >= 0 &&
 		extents->x + extents->width  <= sub->extents.width &&
 		extents->y + extents->height <= sub->extents.height)
@@ -1301,6 +1301,7 @@ _pixman_image_for_surface (const cairo_surface_pattern_t *pattern,
 
 	source = cleanup->image;
 	if (extend != CAIRO_EXTEND_NONE &&
+	    is_pixel_exact &&
 	    extents->x >= 0 && extents->y >= 0 &&
 	    extents->x + extents->width <= source->width &&
 	    extents->y + extents->height <= source->height)
_______________________________________________
cairo-commit mailing list
cairo-commit@lists.cairographics.org
http://lists.cairographics.org/mailman/listinfo/cairo-commit
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic