[gtk/wip/baedert/css-values: 14/31] cssdimensionvalue: Implement transition()



commit c00dedcd5b8018fe992c610a7473b36ed96e0baf
Author: Timm Bäder <mail baedert org>
Date:   Tue Jan 14 15:35:38 2020 +0100

    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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]