[gtk/wip/baedert/for-master: 4/5] dimensionvalue: Add gtk_css_dimension_value_is_zero()



commit 2ee9d7ed4cf198ab434a46650ac910a1aa0f4473
Author: Timm Bäder <mail baedert org>
Date:   Sat Jan 25 19:40:13 2020 +0100

    dimensionvalue: Add gtk_css_dimension_value_is_zero()
    
    We can usually omit computations when the dimension value ends up being
    zero anyway.

 gtk/gtkcsscornervalue.c           | 11 ++++++++++-
 gtk/gtkcsscornervalueprivate.h    |  1 +
 gtk/gtkcssdimensionvalue.c        | 11 +++++++++++
 gtk/gtkcssdimensionvalueprivate.h |  2 ++
 4 files changed, 24 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkcsscornervalue.c b/gtk/gtkcsscornervalue.c
index 54f4480a0a..b25e6a6fef 100644
--- a/gtk/gtkcsscornervalue.c
+++ b/gtk/gtkcsscornervalue.c
@@ -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);
+}
diff --git a/gtk/gtkcsscornervalueprivate.h b/gtk/gtkcsscornervalueprivate.h
index 99fa62d6ce..59451a7840 100644
--- a/gtk/gtkcsscornervalueprivate.h
+++ b/gtk/gtkcsscornervalueprivate.h
@@ -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
diff --git a/gtk/gtkcssdimensionvalue.c b/gtk/gtkcssdimensionvalue.c
index 0e7020708a..d8e06af052 100644
--- a/gtk/gtkcssdimensionvalue.c
+++ b/gtk/gtkcssdimensionvalue.c
@@ -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;
+}
diff --git a/gtk/gtkcssdimensionvalueprivate.h b/gtk/gtkcssdimensionvalueprivate.h
index 2e08eba785..f13a9281bb 100644
--- a/gtk/gtkcssdimensionvalueprivate.h
+++ b/gtk/gtkcssdimensionvalueprivate.h
@@ -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__ */


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