+ return klass->compute (image, property_id, provider, values, parent_values, dependencies);
+}
+
+GtkCssImage *
+_gtk_css_image_transition (GtkCssImage *start,
+ GtkCssImage *end,
+ guint property_id,
+ double progress)
+{
+ GtkCssImageClass *klass;
+
+ g_return_val_if_fail (start == NULL || GTK_IS_CSS_IMAGE (start), NULL);
+ g_return_val_if_fail (end == NULL || GTK_IS_CSS_IMAGE (end), NULL);
+
+ progress = CLAMP (progress, 0.0, 1.0);
+
+ if (start == NULL)
+ {
+ if (end == NULL)
+ return NULL;
+ else
+ {
+ start = end;
+ end = NULL;
+ progress = 1.0 - progress;
+ }
+ }
+
+ klass = GTK_CSS_IMAGE_GET_CLASS (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);