From c9e972eecb3a78ea1471cecf320ac1866f9dc790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Tue, 14 Jan 2020 15:35:38 +0100 Subject: [PATCH] cssdimensionvalue: Implement transition() Instead of falling back to the generic gtk_css_number_value_transition (which can allocate multiple new css values), just implement this here. --- gtk/gtkcssdimensionvalue.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcssdimensionvalue.c b/gtk/gtkcssdimensionvalue.c index e540a7316c..708dd872f9 100644 --- a/gtk/gtkcssdimensionvalue.c +++ b/gtk/gtkcssdimensionvalue.c @@ -243,13 +243,34 @@ gtk_css_value_dimension_get_calc_term_order (const GtkCssValue *value) return 1000 + order_per_unit[value->unit]; } +static GtkCssValue * +gtk_css_value_dimension_transition (GtkCssValue *start, + GtkCssValue *end, + guint property_id, + double progress) +{ + if (progress == 0) + return _gtk_css_value_ref (start); + + if (progress == 1) + return _gtk_css_value_ref (end); + + if (start == end) + return _gtk_css_value_ref (start); + + if (start->unit != end->unit) + return NULL; + + return gtk_css_dimension_value_new (start->value + (end->value - start->value) * progress, start->unit); +} + static const GtkCssNumberValueClass GTK_CSS_VALUE_DIMENSION = { { "GtkCssDimensionValue", gtk_css_value_dimension_free, gtk_css_value_dimension_compute, gtk_css_value_dimension_equal, - gtk_css_number_value_transition, + gtk_css_value_dimension_transition, NULL, NULL, gtk_css_value_dimension_print