diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-01-10 10:04:22 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-01-10 14:50:13 -0500 |
commit | 4f6ea7c418fb06c88c425012e3541305906f048d (patch) | |
tree | b04320f8e2ef2854e619ac07848eeb8d285f76be /gtk/gtkcssdimensionvalue.c | |
parent | ba8f39a90a4a2c4380c46e848f892cdb33ffac0c (diff) | |
download | gtk+-matthiasc/css-values.tar.gz |
wip: static valuesmatthiasc/css-values
Determine whether a css value is 'static' at creation
time. Static values don't need to have compute() called,
since their value is always the same, so we can just
ref them.
Diffstat (limited to 'gtk/gtkcssdimensionvalue.c')
-rw-r--r-- | gtk/gtkcssdimensionvalue.c | 72 |
1 files changed, 43 insertions, 29 deletions
diff --git a/gtk/gtkcssdimensionvalue.c b/gtk/gtkcssdimensionvalue.c index e4463bec8d..8611226045 100644 --- a/gtk/gtkcssdimensionvalue.c +++ b/gtk/gtkcssdimensionvalue.c @@ -301,44 +301,45 @@ gtk_css_dimension_value_new (double value, GtkCssUnit unit) { static GtkCssValue number_singletons[] = { - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 0 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 1 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 96 }, /* DPI default */ + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 0 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 1 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 96 }, /* DPI default */ }; static GtkCssValue px_singletons[] = { - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 0 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 1 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 2 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 3 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 4 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 5 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 6 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 7 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 8 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 16 }, /* Icon size default */ - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 32 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 10 * 96.0 / 72.0 }, /* font size 10 */ - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 11 * 96.0 / 72.0 }, /* font size 11 */ + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 0 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 1 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 2 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 3 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 4 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 5 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 6 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 7 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 8 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 16 }, /* Icon size default */ + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 32 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 10 * 96.0 / 72.0 }, /* font size 10 */ + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 11 * 96.0 / 72.0 }, /* font size 11 */ }; static GtkCssValue percent_singletons[] = { - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 0 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 50 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 100 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 0 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 50 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 100 }, }; static GtkCssValue second_singletons[] = { - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.15 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.2 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.3 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 1 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.15 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.2 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.3 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 1 }, }; static GtkCssValue deg_singletons[] = { - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 0 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 90 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 180 }, - { >K_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 270 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 0 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 90 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 180 }, + { >K_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 270 }, }; GtkCssValue *result; + gboolean is_static = FALSE; switch ((guint)unit) { @@ -349,6 +350,7 @@ gtk_css_dimension_value_new (double value, if (value == 96) return _gtk_css_value_ref (&number_singletons[2]); + is_static = TRUE; break; case GTK_CSS_PX: @@ -371,6 +373,7 @@ gtk_css_dimension_value_new (double value, if (value == 11 * 96.0 / 72.0) return _gtk_css_value_ref (&px_singletons[12]); + is_static = TRUE; break; case GTK_CSS_PERCENT: @@ -394,6 +397,8 @@ gtk_css_dimension_value_new (double value, return _gtk_css_value_ref (&second_singletons[3]); if (value == 1) return _gtk_css_value_ref (&second_singletons[4]); + + is_static = TRUE; break; case GTK_CSS_DEG: @@ -405,27 +410,32 @@ gtk_css_dimension_value_new (double value, return _gtk_css_value_ref (°_singletons[2]); if (value == 270) return _gtk_css_value_ref (°_singletons[3]); - + + is_static = TRUE; break; case GTK_CSS_RAD: value = value * 360.0 / (2 * G_PI); unit = GTK_CSS_DEG; + is_static = TRUE; break; case GTK_CSS_GRAD: value = value * 360.0 / 400.0; unit = GTK_CSS_DEG; + is_static = TRUE; break; case GTK_CSS_TURN: value = value * 360.0; unit = GTK_CSS_DEG; + is_static = TRUE; break; case GTK_CSS_MS: value = value / 1000.0; unit = GTK_CSS_S; + is_static = TRUE; break; default: @@ -433,6 +443,7 @@ gtk_css_dimension_value_new (double value, } result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_DIMENSION.value_class); + result->is_static = is_static; result->unit = unit; result->value = value; @@ -547,6 +558,9 @@ gtk_css_dimension_value_parse (GtkCssParser *parser, } result = gtk_css_dimension_value_new (number, unit); + if (flags & GTK_CSS_PARSE_NON_STATIC) + result->is_static = FALSE; + gtk_css_parser_consume_token (parser); return result; |