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,
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;
}
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,
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,
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,
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 *