numbervalue: Add early-out to multiply()
authorTimm Bäder <mail@baedert.org>
Tue, 14 Jan 2020 14:39:48 +0000 (15:39 +0100)
committerTimm Bäder <mail@baedert.org>
Sat, 18 Jan 2020 07:49:52 +0000 (08:49 +0100)
If the factor is 1, we already know what the result is going to be.

gtk/gtkcsscalcvalue.c
gtk/gtkcssdimensionvalue.c
gtk/gtkcssnumbervalue.c
gtk/gtkcssnumbervalueprivate.h

index 162f948b551aed824ecca31b2e5642e893cd2535..55fb47a43eaed1d470837beeadab4e1b132944af 100644 (file)
@@ -211,8 +211,8 @@ gtk_css_value_calc_has_percent (const GtkCssValue *value)
 }
 
 static GtkCssValue *
-gtk_css_value_calc_multiply (const GtkCssValue *value,
-                             double             factor)
+gtk_css_value_calc_multiply (GtkCssValue *value,
+                             double       factor)
 {
   GtkCssValue *result;
   gsize i;
index 708dd872f97d10facbf66634bd4be0f75a919589..87c290ad8a6d7a74cc4f2e39155806bfdd38f095 100644 (file)
@@ -194,8 +194,8 @@ gtk_css_value_dimension_has_percent (const GtkCssValue *value)
 }
 
 static GtkCssValue *
-gtk_css_value_dimension_multiply (const GtkCssValue *value,
-                                  double             factor)
+gtk_css_value_dimension_multiply (GtkCssValue *value,
+                                  double       factor)
 {
   return gtk_css_dimension_value_new (value->value * factor, value->unit);
 }
index 508ba35c99fd30856e76a5288d1e9adbcb06b37d..625559580e1fda0f8432ea73bcfa2e20735a0675 100644 (file)
@@ -44,11 +44,14 @@ gtk_css_number_value_has_percent (const GtkCssValue *value)
 }
 
 GtkCssValue *
-gtk_css_number_value_multiply (const GtkCssValue *value,
-                               double             factor)
+gtk_css_number_value_multiply (GtkCssValue *value,
+                               double       factor)
 {
   GtkCssNumberValueClass *number_value_class = (GtkCssNumberValueClass *) value->class;
 
+  if (factor == 1)
+    return _gtk_css_value_ref (value);
+
   return number_value_class->multiply (value, factor);
 }
 
index e18b69afcba78f9e34856a90282cf3fbbb9120e2..040ba902da20a264bd729b90ab24f8b9477afa83 100644 (file)
@@ -44,7 +44,7 @@ struct _GtkCssNumberValueClass {
                                                      double                  one_hundred_percent);
   GtkCssDimension       (* get_dimension)           (const GtkCssValue      *value);
   gboolean              (* has_percent)             (const GtkCssValue      *value);
-  GtkCssValue *         (* multiply)                (const GtkCssValue      *value,
+  GtkCssValue *         (* multiply)                (GtkCssValue            *value,
                                                      double                  factor);
   GtkCssValue *         (* try_add)                 (GtkCssValue            *value1,
                                                      GtkCssValue            *value2);
@@ -63,7 +63,7 @@ GtkCssValue *   _gtk_css_number_value_parse         (GtkCssParser           *par
 
 GtkCssDimension gtk_css_number_value_get_dimension  (const GtkCssValue      *value) G_GNUC_PURE;
 gboolean        gtk_css_number_value_has_percent    (const GtkCssValue      *value) G_GNUC_PURE;
-GtkCssValue *   gtk_css_number_value_multiply       (const GtkCssValue      *value,
+GtkCssValue *   gtk_css_number_value_multiply       (GtkCssValue            *value,
                                                      double                  factor);
 GtkCssValue *   gtk_css_number_value_add            (GtkCssValue            *value1,
                                                      GtkCssValue            *value2);