dimensionvalue: Add gtk_css_{dimension,corner}_value_is_zero()
authorTimm Bäder <mail@baedert.org>
Sat, 25 Jan 2020 18:40:13 +0000 (19:40 +0100)
committerTimm Bäder <mail@baedert.org>
Sun, 26 Jan 2020 17:21:07 +0000 (18:21 +0100)
We can usually omit computations when the dimension value ends up being
zero anyway.

gtk/gtkcsscornervalue.c
gtk/gtkcsscornervalueprivate.h
gtk/gtkcssdimensionvalue.c
gtk/gtkcssdimensionvalueprivate.h

index 54f4480a0a3887e6448bdbf5a3ea0c22880ece9c..b25e6a6fef78cd13a0849f926907b015b7c8ecf2 100644 (file)
@@ -18,8 +18,8 @@
 #include "config.h"
 
 #include "gtkcsscornervalueprivate.h"
-
 #include "gtkcssnumbervalueprivate.h"
+#include "gtkcssdimensionvalueprivate.h"
 
 struct _GtkCssValue {
   GTK_CSS_VALUE_BASE
@@ -184,3 +184,12 @@ _gtk_css_corner_value_get_y (const GtkCssValue *corner,
   return _gtk_css_number_value_get (corner->y, one_hundred_percent);
 }
 
+gboolean
+gtk_css_corner_value_is_zero (const GtkCssValue *corner)
+{
+  if (corner->class != &GTK_CSS_VALUE_CORNER)
+    return gtk_css_dimension_value_is_zero (corner);
+
+  return gtk_css_dimension_value_is_zero (corner->x) &&
+         gtk_css_dimension_value_is_zero (corner->y);
+}
index 99fa62d6ce927c6e769269fbc520482c6de2f8df..59451a78406bbb67560732afef54f881ac8207b9 100644 (file)
@@ -33,6 +33,7 @@ double          _gtk_css_corner_value_get_x         (const GtkCssValue      *cor
                                                      double                  one_hundred_percent) G_GNUC_PURE;
 double          _gtk_css_corner_value_get_y         (const GtkCssValue      *corner,
                                                      double                  one_hundred_percent) G_GNUC_PURE;
+gboolean        gtk_css_corner_value_is_zero        (const GtkCssValue      *corner) G_GNUC_PURE;
 
 
 G_END_DECLS
index 0e7020708ab53d3bca7fa1f8129c167d054c3451..d8e06af052364bb146adc0b1fb94ab8cba22468e 100644 (file)
@@ -497,3 +497,14 @@ gtk_css_dimension_value_parse (GtkCssParser           *parser,
   return result;
 }
 
+gboolean
+gtk_css_dimension_value_is_zero (const GtkCssValue *value)
+{
+  if (!value)
+    return TRUE;
+
+  if (value->class != &GTK_CSS_VALUE_DIMENSION.value_class)
+    return FALSE;
+
+  return value->value == 0;
+}
index 2e08eba785e2688ad40d57034335bf2125605ced..f13a9281bb483f00a7a5513eedd97dc921e2b2c9 100644 (file)
@@ -30,6 +30,8 @@ GtkCssValue *   gtk_css_dimension_value_new         (double                  val
 GtkCssValue *   gtk_css_dimension_value_parse       (GtkCssParser           *parser,
                                                      GtkCssNumberParseFlags  flags);
 
+gboolean        gtk_css_dimension_value_is_zero     (const GtkCssValue      *value) G_GNUC_PURE;
+
 G_END_DECLS
 
 #endif /* __GTK_CSS_DIMENSION_VALUE_PRIVATE_H__ */