[gtk+] cssimage: Add an equal vfunc



commit c13efbf8b07145339c08652ade0b438a1f17d137
Author: Benjamin Otte <otte redhat com>
Date:   Thu Oct 11 12:10:20 2012 +0200

    cssimage: Add an equal vfunc
    
    No implementations for it exist yet.

 gtk/gtkcssimage.c        |   31 +++++++++++++++++++++++++++++++
 gtk/gtkcssimageprivate.h |    5 +++++
 gtk/gtkcssimagevalue.c   |    2 +-
 3 files changed, 37 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c
index 924dc2a..abe95ae 100644
--- a/gtk/gtkcssimage.c
+++ b/gtk/gtkcssimage.c
@@ -69,6 +69,13 @@ gtk_css_image_real_compute (GtkCssImage             *image,
   return g_object_ref (image);
 }
 
+static gboolean
+gtk_css_image_real_equal (GtkCssImage *image1,
+                          GtkCssImage *image2)
+{
+  return FALSE;
+}
+
 static GtkCssImage *
 gtk_css_image_real_transition (GtkCssImage *start,
                                GtkCssImage *end,
@@ -90,6 +97,7 @@ _gtk_css_image_class_init (GtkCssImageClass *klass)
   klass->get_height = gtk_css_image_real_get_height;
   klass->get_aspect_ratio = gtk_css_image_real_get_aspect_ratio;
   klass->compute = gtk_css_image_real_compute;
+  klass->equal = gtk_css_image_real_equal;
   klass->transition = gtk_css_image_real_transition;
 }
 
@@ -188,6 +196,29 @@ _gtk_css_image_transition (GtkCssImage *start,
   return klass->transition (start, end, property_id, progress);
 }
 
+gboolean
+_gtk_css_image_equal (GtkCssImage *image1,
+                      GtkCssImage *image2)
+{
+  GtkCssImageClass *klass;
+
+  g_return_val_if_fail (image1 == NULL || GTK_IS_CSS_IMAGE (image1), FALSE);
+  g_return_val_if_fail (image2 == NULL || GTK_IS_CSS_IMAGE (image2), FALSE);
+
+  if (image1 == image2)
+    return TRUE;
+
+  if (image1 == NULL || image2 == NULL)
+    return FALSE;
+
+  if (G_OBJECT_TYPE (image1) != G_OBJECT_TYPE (image2))
+    return FALSE;
+
+  klass = GTK_CSS_IMAGE_GET_CLASS (image1);
+
+  return klass->equal (image1, image2);
+}
+
 void
 _gtk_css_image_draw (GtkCssImage        *image,
                      cairo_t            *cr,
diff --git a/gtk/gtkcssimageprivate.h b/gtk/gtkcssimageprivate.h
index e0b7465..f9e4e41 100644
--- a/gtk/gtkcssimageprivate.h
+++ b/gtk/gtkcssimageprivate.h
@@ -61,6 +61,9 @@ struct _GtkCssImageClass
                                                     GtkCssComputedValues       *values,
                                                     GtkCssComputedValues       *parent_values,
                                                     GtkCssDependencies         *dependencies);
+  /* compare two images for equality */
+  gboolean     (* equal)                           (GtkCssImage                *image1,
+                                                    GtkCssImage                *image2);
   /* transition between start and end image (end may be NULL), returns new reference */
   GtkCssImage *(* transition)                      (GtkCssImage                *start,
                                                     GtkCssImage                *end,
@@ -95,6 +98,8 @@ GtkCssImage *  _gtk_css_image_compute              (GtkCssImage                *
                                                     GtkCssComputedValues       *values,
                                                     GtkCssComputedValues       *parent_values,
                                                     GtkCssDependencies         *dependencies);
+gboolean       _gtk_css_image_equal                (GtkCssImage                *image1,
+                                                    GtkCssImage                *image2);
 GtkCssImage *  _gtk_css_image_transition           (GtkCssImage                *start,
                                                     GtkCssImage                *end,
                                                     guint                       property_id,
diff --git a/gtk/gtkcssimagevalue.c b/gtk/gtkcssimagevalue.c
index 17f904c..dac0c2f 100644
--- a/gtk/gtkcssimagevalue.c
+++ b/gtk/gtkcssimagevalue.c
@@ -63,7 +63,7 @@ static gboolean
 gtk_css_value_image_equal (const GtkCssValue *value1,
                            const GtkCssValue *value2)
 {
-  return value1->image == value2->image;
+  return _gtk_css_image_equal (value1->image, value2->image);
 }
 
 static GtkCssValue *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]