Avoid marking images dirty when properties are reset
authorSøren Sandmann Pedersen <ssp@redhat.com>
Tue, 15 Feb 2011 09:55:02 +0000 (04:55 -0500)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Fri, 18 Feb 2011 11:21:37 +0000 (06:21 -0500)
When an image property is set to the same value that it already is,
there is no reason to mark the image dirty and incur a recomputation
of the flags.

pixman/pixman-image.c

index e91d87c..55fc17a 100644 (file)
@@ -511,6 +511,12 @@ pixman_image_set_transform (pixman_image_t *          image,
        goto out;
     }
 
+    if (common->transform &&
+       memcmp (common->transform, transform, sizeof (pixman_transform_t) == 0))
+    {
+       return TRUE;
+    }
+
     if (common->transform == NULL)
        common->transform = malloc (sizeof (pixman_transform_t));
 
@@ -535,6 +541,9 @@ PIXMAN_EXPORT void
 pixman_image_set_repeat (pixman_image_t *image,
                          pixman_repeat_t repeat)
 {
+    if (image->common.repeat == repeat)
+       return;
+
     image->common.repeat = repeat;
 
     image_property_changed (image);
@@ -579,6 +588,9 @@ PIXMAN_EXPORT void
 pixman_image_set_source_clipping (pixman_image_t *image,
                                   pixman_bool_t   clip_sources)
 {
+    if (image->common.clip_sources == clip_sources)
+       return;
+
     image->common.clip_sources = clip_sources;
 
     image_property_changed (image);
@@ -594,6 +606,9 @@ pixman_image_set_indexed (pixman_image_t *        image,
 {
     bits_image_t *bits = (bits_image_t *)image;
 
+    if (bits->indexed == indexed)
+       return;
+
     bits->indexed = indexed;
 
     image_property_changed (image);
@@ -656,6 +671,9 @@ PIXMAN_EXPORT void
 pixman_image_set_component_alpha   (pixman_image_t *image,
                                     pixman_bool_t   component_alpha)
 {
+    if (image->common.component_alpha == component_alpha)
+       return;
+
     image->common.component_alpha = component_alpha;
 
     image_property_changed (image);