From c13efbf8b07145339c08652ade0b438a1f17d137 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 11 Oct 2012 12:10:20 +0200 Subject: [PATCH] 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 deletion(-) diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c index 924dc2ad2e..abe95ae6c0 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 e0b7465b50..f9e4e41b75 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 17f904c4ba..dac0c2fac8 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 *