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.
This commit is contained in:
Timm Bäder 2020-01-14 15:35:38 +01:00
parent 45455f1bdb
commit c9e972eecb

View File

@ -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