No image actually implements it yet, but this is the plumbing.
return _gtk_css_image_cross_fade_new (start, end, progress);
}
+static gboolean
+gtk_css_image_real_is_dynamic (GtkCssImage *image)
+{
+ return FALSE;
+}
+
+static GtkCssImage *
+gtk_css_image_real_get_dynamic_image (GtkCssImage *image,
+ gint64 monotonic_time)
+{
+ return g_object_ref (image);
+}
+
static void
_gtk_css_image_class_init (GtkCssImageClass *klass)
{
klass->compute = gtk_css_image_real_compute;
klass->equal = gtk_css_image_real_equal;
klass->transition = gtk_css_image_real_transition;
+ klass->is_dynamic = gtk_css_image_real_is_dynamic;
+ klass->get_dynamic_image = gtk_css_image_real_get_dynamic_image;
}
static void
klass->snapshot (image, snapshot, width, height);
}
+gboolean
+gtk_css_image_is_dynamic (GtkCssImage *image)
+{
+ GtkCssImageClass *klass;
+
+ g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), FALSE);
+
+ klass = GTK_CSS_IMAGE_GET_CLASS (image);
+
+ return klass->is_dynamic (image);
+}
+
+GtkCssImage *
+gtk_css_image_get_dynamic_image (GtkCssImage *image,
+ gint64 monotonic_time)
+{
+ GtkCssImageClass *klass;
+
+ g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL);
+
+ klass = GTK_CSS_IMAGE_GET_CLASS (image);
+
+ return klass->get_dynamic_image (image, monotonic_time);
+}
+
void
_gtk_css_image_print (GtkCssImage *image,
GString *string)
GtkSnapshot *snapshot,
double width,
double height);
+ /* does this image change based on timestamp? (optional) */
+ gboolean (* is_dynamic) (GtkCssImage *image);
+ /* get image for given timestamp or @image when not dynamic (optional) */
+ GtkCssImage *(* get_dynamic_image) (GtkCssImage *image,
+ gint64 monotonic_time);
/* parse CSS, return TRUE on success */
gboolean (* parse) (GtkCssImage *image,
GtkCssParser *parser);
GtkSnapshot *snapshot,
double width,
double height);
+gboolean gtk_css_image_is_dynamic (GtkCssImage *image);
+GtkCssImage * gtk_css_image_get_dynamic_image (GtkCssImage *image,
+ gint64 monotonic_time);
void _gtk_css_image_print (GtkCssImage *image,
GString *string);
return _gtk_css_image_value_new (transition);
}
+static gboolean
+gtk_css_value_image_is_dynamic (GtkCssValue *value)
+{
+ GtkCssImage *image = _gtk_css_image_value_get_image (value);
+
+ if (image == NULL)
+ return FALSE;
+
+ return gtk_css_image_is_dynamic (image);
+}
+
+static GtkCssValue *
+gtk_css_value_image_get_dynamic_value (GtkCssValue *value,
+ gint64 monotonic_time)
+{
+ GtkCssImage *image, *dynamic;
+
+ image = _gtk_css_image_value_get_image (value);
+ if (image == NULL)
+ return gtk_css_value_ref (value);
+
+ dynamic = gtk_css_image_get_dynamic_image (image, monotonic_time);
+ if (dynamic == image)
+ {
+ g_object_unref (dynamic);
+ return gtk_css_value_ref (value);
+ }
+
+ return _gtk_css_image_value_new (dynamic);
+}
+
static void
gtk_css_value_image_print (const GtkCssValue *value,
GString *string)
gtk_css_value_image_compute,
gtk_css_value_image_equal,
gtk_css_value_image_transition,
- NULL,
- NULL,
+ gtk_css_value_image_is_dynamic,
+ gtk_css_value_image_get_dynamic_value,
gtk_css_value_image_print
};