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 | |
parent | ba8f39a90a4a2c4380c46e848f892cdb33ffac0c (diff) | |
download | gtk+-4f6ea7c418fb06c88c425012e3541305906f048d.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.
-rw-r--r-- | gtk/gtkcssarrayvalue.c | 15 | ||||
-rw-r--r-- | gtk/gtkcssbgsizevalue.c | 6 | ||||
-rw-r--r-- | gtk/gtkcsscolorvalue.c | 7 | ||||
-rw-r--r-- | gtk/gtkcssdimensionvalue.c | 72 | ||||
-rw-r--r-- | gtk/gtkcsseasevalue.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssenumvalue.c | 172 | ||||
-rw-r--r-- | gtk/gtkcssfiltervalue.c | 15 | ||||
-rw-r--r-- | gtk/gtkcssiconthemevalue.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssimagevalue.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssnumbervalueprivate.h | 3 | ||||
-rw-r--r-- | gtk/gtkcsspositionvalue.c | 1 | ||||
-rw-r--r-- | gtk/gtkcssrgbavalue.c | 8 | ||||
-rw-r--r-- | gtk/gtkcssshadowsvalue.c | 15 | ||||
-rw-r--r-- | gtk/gtkcssshadowvalue.c | 6 | ||||
-rw-r--r-- | gtk/gtkcssstringvalue.c | 2 | ||||
-rw-r--r-- | gtk/gtkcssstylepropertyimpl.c | 3 | ||||
-rw-r--r-- | gtk/gtkcsstransformvalue.c | 33 | ||||
-rw-r--r-- | gtk/gtkcssvalue.c | 6 | ||||
-rw-r--r-- | gtk/gtkcssvalueprivate.h | 3 |
19 files changed, 237 insertions, 136 deletions
diff --git a/gtk/gtkcssarrayvalue.c b/gtk/gtkcssarrayvalue.c index 02ece79fbd..889c4da01b 100644 --- a/gtk/gtkcssarrayvalue.c +++ b/gtk/gtkcssarrayvalue.c @@ -392,14 +392,27 @@ _gtk_css_array_value_new_from_array (GtkCssValue **values, guint n_values) { GtkCssValue *result; + gboolean is_static; + int i; g_return_val_if_fail (values != NULL, NULL); g_return_val_if_fail (n_values > 0, NULL); if (n_values == 1) return values[0]; - + + is_static = TRUE; + for (i = 0; i < n_values; i++) + { + if (!values[i]->is_static) + { + is_static = FALSE; + break; + } + } + result = _gtk_css_value_alloc (>K_CSS_VALUE_ARRAY, sizeof (GtkCssValue) + sizeof (GtkCssValue *) * (n_values - 1)); + result->is_static = is_static; result->n_values = n_values; memcpy (&result->values[0], values, sizeof (GtkCssValue *) * n_values); diff --git a/gtk/gtkcssbgsizevalue.c b/gtk/gtkcssbgsizevalue.c index 7b9c0d1c10..c64234b705 100644 --- a/gtk/gtkcssbgsizevalue.c +++ b/gtk/gtkcssbgsizevalue.c @@ -163,9 +163,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_BG_SIZE = { gtk_css_value_bg_size_print }; -static GtkCssValue auto_singleton = { >K_CSS_VALUE_BG_SIZE, 1, FALSE, FALSE, NULL, NULL }; -static GtkCssValue cover_singleton = { >K_CSS_VALUE_BG_SIZE, 1, TRUE, FALSE, NULL, NULL }; -static GtkCssValue contain_singleton = { >K_CSS_VALUE_BG_SIZE, 1, FALSE, TRUE, NULL, NULL }; +static GtkCssValue auto_singleton = { >K_CSS_VALUE_BG_SIZE, 1, 0, FALSE, FALSE, NULL, NULL }; +static GtkCssValue cover_singleton = { >K_CSS_VALUE_BG_SIZE, 1, 0, TRUE, FALSE, NULL, NULL }; +static GtkCssValue contain_singleton = { >K_CSS_VALUE_BG_SIZE, 1, 0, FALSE, TRUE, NULL, NULL }; GtkCssValue * _gtk_css_bg_size_value_new (GtkCssValue *x, diff --git a/gtk/gtkcsscolorvalue.c b/gtk/gtkcsscolorvalue.c index 450bf9f0ca..410beded8b 100644 --- a/gtk/gtkcsscolorvalue.c +++ b/gtk/gtkcsscolorvalue.c @@ -465,9 +465,9 @@ _gtk_css_color_value_resolve (GtkCssValue *color, return value; } -static GtkCssValue transparent_black_singleton = { >K_CSS_VALUE_COLOR, 1, COLOR_TYPE_LITERAL, NULL, +static GtkCssValue transparent_black_singleton = { >K_CSS_VALUE_COLOR, 1, 1, COLOR_TYPE_LITERAL, NULL, .sym_col.rgba = {0, 0, 0, 0} }; -static GtkCssValue white_singleton = { >K_CSS_VALUE_COLOR, 1, COLOR_TYPE_LITERAL, NULL, +static GtkCssValue white_singleton = { >K_CSS_VALUE_COLOR, 1, 1, COLOR_TYPE_LITERAL, NULL, .sym_col.rgba = {1, 1, 1, 1} }; @@ -491,6 +491,7 @@ _gtk_css_color_value_new_literal (const GdkRGBA *color) g_return_val_if_fail (color != NULL, NULL); value = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_COLOR); + value->is_static = TRUE; value->type = COLOR_TYPE_LITERAL; value->sym_col.rgba = *color; @@ -594,7 +595,7 @@ _gtk_css_color_value_new_mix (GtkCssValue *color1, GtkCssValue * _gtk_css_color_value_new_current_color (void) { - static GtkCssValue current_color = { >K_CSS_VALUE_COLOR, 1, COLOR_TYPE_CURRENT_COLOR, NULL, }; + static GtkCssValue current_color = { >K_CSS_VALUE_COLOR, 1, 0, COLOR_TYPE_CURRENT_COLOR, NULL, }; return _gtk_css_value_ref (¤t_color); } 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; diff --git a/gtk/gtkcsseasevalue.c b/gtk/gtkcsseasevalue.c index 7e7c6be7bd..2927ecfb4f 100644 --- a/gtk/gtkcsseasevalue.c +++ b/gtk/gtkcsseasevalue.c @@ -159,6 +159,7 @@ _gtk_css_ease_value_new_cubic_bezier (double x1, g_return_val_if_fail (x2 <= 1.0, NULL); value = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_EASE); + value->is_static = TRUE; value->type = GTK_CSS_EASE_CUBIC_BEZIER; value->u.cubic.x1 = x1; @@ -178,6 +179,7 @@ _gtk_css_ease_value_new_steps (guint n_steps, g_return_val_if_fail (n_steps > 0, NULL); value = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_EASE); + value->is_static = TRUE; value->type = GTK_CSS_EASE_STEPS; value->u.steps.steps = n_steps; diff --git a/gtk/gtkcssenumvalue.c b/gtk/gtkcssenumvalue.c index 1d40344866..6aa75df6e8 100644 --- a/gtk/gtkcssenumvalue.c +++ b/gtk/gtkcssenumvalue.c @@ -89,16 +89,16 @@ static const GtkCssValueClass GTK_CSS_VALUE_BORDER_STYLE = { }; static GtkCssValue border_style_values[] = { - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_NONE, "none" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_SOLID, "solid" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_INSET, "inset" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_OUTSET, "outset" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_HIDDEN, "hidden" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_DOTTED, "dotted" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_DASHED, "dashed" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_DOUBLE, "double" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_GROOVE, "groove" }, - { >K_CSS_VALUE_BORDER_STYLE, 1, GTK_BORDER_STYLE_RIDGE, "ridge" } + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_NONE, "none" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_SOLID, "solid" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_INSET, "inset" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_OUTSET, "outset" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_HIDDEN, "hidden" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_DOTTED, "dotted" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_DASHED, "dashed" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_DOUBLE, "double" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_GROOVE, "groove" }, + { >K_CSS_VALUE_BORDER_STYLE, 1, 1, GTK_BORDER_STYLE_RIDGE, "ridge" } }; GtkCssValue * @@ -147,22 +147,22 @@ static const GtkCssValueClass GTK_CSS_VALUE_BLEND_MODE = { }; static GtkCssValue blend_mode_values[] = { - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_DEFAULT, "normal" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_MULTIPLY, "multiply" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_SCREEN, "screen" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_OVERLAY, "overlay" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_DARKEN, "darken" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_LIGHTEN, "lighten" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_COLOR_DODGE, "color-dodge" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_COLOR_BURN, "color-burn" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_HARD_LIGHT, "hard-light" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_SOFT_LIGHT, "soft-light" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_DIFFERENCE, "difference" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_EXCLUSION, "exclusion" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_COLOR, "color" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_HUE, "hue" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_SATURATION, "saturation" }, - { >K_CSS_VALUE_BLEND_MODE, 1, GSK_BLEND_MODE_LUMINOSITY, "luminosity" } + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_DEFAULT, "normal" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_MULTIPLY, "multiply" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_SCREEN, "screen" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_OVERLAY, "overlay" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_DARKEN, "darken" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_LIGHTEN, "lighten" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_COLOR_DODGE, "color-dodge" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_COLOR_BURN, "color-burn" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_HARD_LIGHT, "hard-light" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_SOFT_LIGHT, "soft-light" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_DIFFERENCE, "difference" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_EXCLUSION, "exclusion" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_COLOR, "color" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_HUE, "hue" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_SATURATION, "saturation" }, + { >K_CSS_VALUE_BLEND_MODE, 1, 1, GSK_BLEND_MODE_LUMINOSITY, "luminosity" } }; GtkCssValue * @@ -298,15 +298,15 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_SIZE = { }; static GtkCssValue font_size_values[] = { - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_SMALLER, "smaller" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_LARGER, "larger" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_XX_SMALL, "xx-small" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_X_SMALL, "x-small" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_SMALL, "small" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_MEDIUM, "medium" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_LARGE, "large" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_X_LARGE, "x-large" }, - { >K_CSS_VALUE_FONT_SIZE, 1, GTK_CSS_FONT_SIZE_XX_LARGE, "xx-large" } + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_SMALLER, "smaller" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_LARGER, "larger" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_XX_SMALL, "xx-small" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_X_SMALL, "x-small" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_SMALL, "small" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_MEDIUM, "medium" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_LARGE, "large" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_X_LARGE, "x-large" }, + { >K_CSS_VALUE_FONT_SIZE, 1, 0, GTK_CSS_FONT_SIZE_XX_LARGE, "xx-large" } }; GtkCssValue * @@ -355,9 +355,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_STYLE = { }; static GtkCssValue font_style_values[] = { - { >K_CSS_VALUE_FONT_STYLE, 1, PANGO_STYLE_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_STYLE, 1, PANGO_STYLE_OBLIQUE, "oblique" }, - { >K_CSS_VALUE_FONT_STYLE, 1, PANGO_STYLE_ITALIC, "italic" } + { >K_CSS_VALUE_FONT_STYLE, 1, 1, PANGO_STYLE_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_STYLE, 1, 1, PANGO_STYLE_OBLIQUE, "oblique" }, + { >K_CSS_VALUE_FONT_STYLE, 1, 1, PANGO_STYLE_ITALIC, "italic" } }; GtkCssValue * @@ -454,8 +454,8 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_WEIGHT = { }; static GtkCssValue font_weight_values[] = { - { >K_CSS_VALUE_FONT_WEIGHT, 1, BOLDER, "bolder" }, - { >K_CSS_VALUE_FONT_WEIGHT, 1, LIGHTER, "lighter" }, + { >K_CSS_VALUE_FONT_WEIGHT, 1, 0, BOLDER, "bolder" }, + { >K_CSS_VALUE_FONT_WEIGHT, 1, 0, LIGHTER, "lighter" }, }; GtkCssValue * @@ -504,15 +504,15 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_STRETCH = { }; static GtkCssValue font_stretch_values[] = { - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_ULTRA_CONDENSED, "ultra-condensed" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_EXTRA_CONDENSED, "extra-condensed" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_CONDENSED, "condensed" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_SEMI_CONDENSED, "semi-condensed" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_SEMI_EXPANDED, "semi-expanded" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_EXPANDED, "expanded" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_EXTRA_EXPANDED, "extra-expanded" }, - { >K_CSS_VALUE_FONT_STRETCH, 1, PANGO_STRETCH_ULTRA_EXPANDED, "ultra-expanded" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_ULTRA_CONDENSED, "ultra-condensed" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_EXTRA_CONDENSED, "extra-condensed" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_CONDENSED, "condensed" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_SEMI_CONDENSED, "semi-condensed" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_SEMI_EXPANDED, "semi-expanded" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_EXPANDED, "expanded" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_EXTRA_EXPANDED, "extra-expanded" }, + { >K_CSS_VALUE_FONT_STRETCH, 1, 1, PANGO_STRETCH_ULTRA_EXPANDED, "ultra-expanded" }, }; GtkCssValue * @@ -561,9 +561,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_TEXT_DECORATION_LINE = { }; static GtkCssValue text_decoration_line_values[] = { - { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, GTK_CSS_TEXT_DECORATION_LINE_NONE, "none" }, - { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, GTK_CSS_TEXT_DECORATION_LINE_UNDERLINE, "underline" }, - { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, GTK_CSS_TEXT_DECORATION_LINE_LINE_THROUGH, "line-through" }, + { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, 1, GTK_CSS_TEXT_DECORATION_LINE_NONE, "none" }, + { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, 1, GTK_CSS_TEXT_DECORATION_LINE_UNDERLINE, "underline" }, + { >K_CSS_VALUE_TEXT_DECORATION_LINE, 1, 1, GTK_CSS_TEXT_DECORATION_LINE_LINE_THROUGH, "line-through" }, }; GtkCssValue * @@ -612,9 +612,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_TEXT_DECORATION_STYLE = { }; static GtkCssValue text_decoration_style_values[] = { - { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, GTK_CSS_TEXT_DECORATION_STYLE_SOLID, "solid" }, - { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, GTK_CSS_TEXT_DECORATION_STYLE_DOUBLE, "double" }, - { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, GTK_CSS_TEXT_DECORATION_STYLE_WAVY, "wavy" }, + { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, 1, GTK_CSS_TEXT_DECORATION_STYLE_SOLID, "solid" }, + { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, 1, GTK_CSS_TEXT_DECORATION_STYLE_DOUBLE, "double" }, + { >K_CSS_VALUE_TEXT_DECORATION_STYLE, 1, 1, GTK_CSS_TEXT_DECORATION_STYLE_WAVY, "wavy" }, }; GtkCssValue * @@ -663,9 +663,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_AREA = { }; static GtkCssValue area_values[] = { - { >K_CSS_VALUE_AREA, 1, GTK_CSS_AREA_BORDER_BOX, "border-box" }, - { >K_CSS_VALUE_AREA, 1, GTK_CSS_AREA_PADDING_BOX, "padding-box" }, - { >K_CSS_VALUE_AREA, 1, GTK_CSS_AREA_CONTENT_BOX, "content-box" } + { >K_CSS_VALUE_AREA, 1, 1, GTK_CSS_AREA_BORDER_BOX, "border-box" }, + { >K_CSS_VALUE_AREA, 1, 1, GTK_CSS_AREA_PADDING_BOX, "padding-box" }, + { >K_CSS_VALUE_AREA, 1, 1, GTK_CSS_AREA_CONTENT_BOX, "content-box" } }; GtkCssValue * @@ -720,10 +720,10 @@ static const GtkCssValueClass GTK_CSS_VALUE_DIRECTION = { }; static GtkCssValue direction_values[] = { - { >K_CSS_VALUE_DIRECTION, 1, GTK_CSS_DIRECTION_NORMAL, "normal" }, - { >K_CSS_VALUE_DIRECTION, 1, GTK_CSS_DIRECTION_REVERSE, "reverse" }, - { >K_CSS_VALUE_DIRECTION, 1, GTK_CSS_DIRECTION_ALTERNATE, "alternate" }, - { >K_CSS_VALUE_DIRECTION, 1, GTK_CSS_DIRECTION_ALTERNATE_REVERSE, "alternate-reverse" } + { >K_CSS_VALUE_DIRECTION, 1, 1, GTK_CSS_DIRECTION_NORMAL, "normal" }, + { >K_CSS_VALUE_DIRECTION, 1, 1, GTK_CSS_DIRECTION_REVERSE, "reverse" }, + { >K_CSS_VALUE_DIRECTION, 1, 1, GTK_CSS_DIRECTION_ALTERNATE, "alternate" }, + { >K_CSS_VALUE_DIRECTION, 1, 1, GTK_CSS_DIRECTION_ALTERNATE_REVERSE, "alternate-reverse" } }; GtkCssValue * @@ -781,8 +781,8 @@ static const GtkCssValueClass GTK_CSS_VALUE_PLAY_STATE = { }; static GtkCssValue play_state_values[] = { - { >K_CSS_VALUE_PLAY_STATE, 1, GTK_CSS_PLAY_STATE_RUNNING, "running" }, - { >K_CSS_VALUE_PLAY_STATE, 1, GTK_CSS_PLAY_STATE_PAUSED, "paused" } + { >K_CSS_VALUE_PLAY_STATE, 1, 1, GTK_CSS_PLAY_STATE_RUNNING, "running" }, + { >K_CSS_VALUE_PLAY_STATE, 1, 1, GTK_CSS_PLAY_STATE_PAUSED, "paused" } }; GtkCssValue * @@ -837,10 +837,10 @@ static const GtkCssValueClass GTK_CSS_VALUE_FILL_MODE = { }; static GtkCssValue fill_mode_values[] = { - { >K_CSS_VALUE_FILL_MODE, 1, GTK_CSS_FILL_NONE, "none" }, - { >K_CSS_VALUE_FILL_MODE, 1, GTK_CSS_FILL_FORWARDS, "forwards" }, - { >K_CSS_VALUE_FILL_MODE, 1, GTK_CSS_FILL_BACKWARDS, "backwards" }, - { >K_CSS_VALUE_FILL_MODE, 1, GTK_CSS_FILL_BOTH, "both" } + { >K_CSS_VALUE_FILL_MODE, 1, 1, GTK_CSS_FILL_NONE, "none" }, + { >K_CSS_VALUE_FILL_MODE, 1, 1, GTK_CSS_FILL_FORWARDS, "forwards" }, + { >K_CSS_VALUE_FILL_MODE, 1, 1, GTK_CSS_FILL_BACKWARDS, "backwards" }, + { >K_CSS_VALUE_FILL_MODE, 1, 1, GTK_CSS_FILL_BOTH, "both" } }; GtkCssValue * @@ -895,9 +895,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_ICON_STYLE = { }; static GtkCssValue icon_style_values[] = { - { >K_CSS_VALUE_ICON_STYLE, 1, GTK_CSS_ICON_STYLE_REQUESTED, "requested" }, - { >K_CSS_VALUE_ICON_STYLE, 1, GTK_CSS_ICON_STYLE_REGULAR, "regular" }, - { >K_CSS_VALUE_ICON_STYLE, 1, GTK_CSS_ICON_STYLE_SYMBOLIC, "symbolic" } + { >K_CSS_VALUE_ICON_STYLE, 1, 1, GTK_CSS_ICON_STYLE_REQUESTED, "requested" }, + { >K_CSS_VALUE_ICON_STYLE, 1, 1, GTK_CSS_ICON_STYLE_REGULAR, "regular" }, + { >K_CSS_VALUE_ICON_STYLE, 1, 1, GTK_CSS_ICON_STYLE_SYMBOLIC, "symbolic" } }; GtkCssValue * @@ -952,9 +952,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_KERNING = { }; static GtkCssValue font_kerning_values[] = { - { >K_CSS_VALUE_FONT_KERNING, 1, GTK_CSS_FONT_KERNING_AUTO, "auto" }, - { >K_CSS_VALUE_FONT_KERNING, 1, GTK_CSS_FONT_KERNING_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_KERNING, 1, GTK_CSS_FONT_KERNING_NONE, "none" } + { >K_CSS_VALUE_FONT_KERNING, 1, 1, GTK_CSS_FONT_KERNING_AUTO, "auto" }, + { >K_CSS_VALUE_FONT_KERNING, 1, 1, GTK_CSS_FONT_KERNING_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_KERNING, 1, 1, GTK_CSS_FONT_KERNING_NONE, "none" } }; GtkCssValue * @@ -1009,9 +1009,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_VARIANT_POSITION = { }; static GtkCssValue font_variant_position_values[] = { - { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, GTK_CSS_FONT_VARIANT_POSITION_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, GTK_CSS_FONT_VARIANT_POSITION_SUB, "sub" }, - { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, GTK_CSS_FONT_VARIANT_POSITION_SUPER, "super" } + { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, 1, GTK_CSS_FONT_VARIANT_POSITION_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, 1, GTK_CSS_FONT_VARIANT_POSITION_SUB, "sub" }, + { >K_CSS_VALUE_FONT_VARIANT_POSITION, 1, 1, GTK_CSS_FONT_VARIANT_POSITION_SUPER, "super" } }; GtkCssValue * @@ -1066,13 +1066,13 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_VARIANT_CAPS = { }; static GtkCssValue font_variant_caps_values[] = { - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_SMALL_CAPS, "small-caps" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_ALL_SMALL_CAPS, "all-small-caps" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_PETITE_CAPS, "petite-caps" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_ALL_PETITE_CAPS, "all-petite-caps" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_UNICASE, "unicase" }, - { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, GTK_CSS_FONT_VARIANT_CAPS_TITLING_CAPS, "titling-caps" } + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_SMALL_CAPS, "small-caps" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_ALL_SMALL_CAPS, "all-small-caps" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_PETITE_CAPS, "petite-caps" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_ALL_PETITE_CAPS, "all-petite-caps" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_UNICASE, "unicase" }, + { >K_CSS_VALUE_FONT_VARIANT_CAPS, 1, 1, GTK_CSS_FONT_VARIANT_CAPS_TITLING_CAPS, "titling-caps" } }; GtkCssValue * @@ -1127,8 +1127,8 @@ static const GtkCssValueClass GTK_CSS_VALUE_FONT_VARIANT_ALTERNATE = { }; static GtkCssValue font_variant_alternate_values[] = { - { >K_CSS_VALUE_FONT_VARIANT_ALTERNATE, 1, GTK_CSS_FONT_VARIANT_ALTERNATE_NORMAL, "normal" }, - { >K_CSS_VALUE_FONT_VARIANT_ALTERNATE, 1, GTK_CSS_FONT_VARIANT_ALTERNATE_HISTORICAL_FORMS, "historical-forms" } + { >K_CSS_VALUE_FONT_VARIANT_ALTERNATE, 1, 1, GTK_CSS_FONT_VARIANT_ALTERNATE_NORMAL, "normal" }, + { >K_CSS_VALUE_FONT_VARIANT_ALTERNATE, 1, 1, GTK_CSS_FONT_VARIANT_ALTERNATE_HISTORICAL_FORMS, "historical-forms" } }; GtkCssValue * diff --git a/gtk/gtkcssfiltervalue.c b/gtk/gtkcssfiltervalue.c index b22d0e272c..95eb855cc4 100644 --- a/gtk/gtkcssfiltervalue.c +++ b/gtk/gtkcssfiltervalue.c @@ -703,7 +703,7 @@ static const GtkCssValueClass GTK_CSS_VALUE_FILTER = { gtk_css_value_filter_print }; -static GtkCssValue none_singleton = { >K_CSS_VALUE_FILTER, 1, 0, { { GTK_CSS_FILTER_NONE } } }; +static GtkCssValue none_singleton = { >K_CSS_VALUE_FILTER, 1, 1, 0, { { GTK_CSS_FILTER_NONE } } }; static GtkCssValue * gtk_css_filter_value_alloc (guint n_filters) @@ -778,6 +778,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) GtkCssValue *value; GArray *array; guint i; + gboolean is_static = TRUE; if (gtk_css_parser_try_ident (parser, "none")) return gtk_css_filter_value_new_none (); @@ -794,6 +795,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_BLUR; + is_static = is_static && filter.blur.value->is_static; } else if (gtk_css_parser_has_function (parser, "brightness")) { @@ -801,6 +803,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_BRIGHTNESS; + is_static = is_static && filter.brightness.value->is_static; } else if (gtk_css_parser_has_function (parser, "contrast")) { @@ -808,6 +811,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_CONTRAST; + is_static = is_static && filter.contrast.value->is_static; } else if (gtk_css_parser_has_function (parser, "grayscale")) { @@ -815,13 +819,15 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_GRAYSCALE; + is_static = is_static && filter.grayscale.value->is_static; } else if (gtk_css_parser_has_function (parser, "hue-rotate")) { - if (!gtk_css_parser_consume_function (parser, 1, 1, gtk_css_filter_parse_angle, &filter.blur.value)) + if (!gtk_css_parser_consume_function (parser, 1, 1, gtk_css_filter_parse_angle, &filter.hue_rotate.value)) goto fail; filter.type = GTK_CSS_FILTER_HUE_ROTATE; + is_static = is_static && filter.hue_rotate.value->is_static; } else if (gtk_css_parser_has_function (parser, "invert")) { @@ -829,6 +835,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_INVERT; + is_static = is_static && filter.invert.value->is_static; } else if (gtk_css_parser_has_function (parser, "opacity")) { @@ -836,6 +843,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_OPACITY; + is_static = is_static && filter.opacity.value->is_static; } else if (gtk_css_parser_has_function (parser, "saturate")) { @@ -843,6 +851,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_SATURATE; + is_static = is_static && filter.saturate.value->is_static; } else if (gtk_css_parser_has_function (parser, "sepia")) { @@ -850,6 +859,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) goto fail; filter.type = GTK_CSS_FILTER_SEPIA; + is_static = is_static && filter.sepia.value->is_static; } else { @@ -866,6 +876,7 @@ gtk_css_filter_value_parse (GtkCssParser *parser) } value = gtk_css_filter_value_alloc (array->len); + value->is_static = is_static; memcpy (value->filters, array->data, sizeof (GtkCssFilter) * array->len); g_array_free (array, TRUE); diff --git a/gtk/gtkcssiconthemevalue.c b/gtk/gtkcssiconthemevalue.c index e3838f5201..c5015b7c0d 100644 --- a/gtk/gtkcssiconthemevalue.c +++ b/gtk/gtkcssiconthemevalue.c @@ -121,7 +121,7 @@ static const GtkCssValueClass GTK_CSS_VALUE_ICON_THEME = { gtk_css_value_icon_theme_print }; -static GtkCssValue default_icon_theme_value = { >K_CSS_VALUE_ICON_THEME, 1, NULL, 0 }; +static GtkCssValue default_icon_theme_value = { >K_CSS_VALUE_ICON_THEME, 1, 0, NULL, 0 }; GtkCssValue * gtk_css_icon_theme_value_new (GtkIconTheme *icontheme) diff --git a/gtk/gtkcssimagevalue.c b/gtk/gtkcssimagevalue.c index 1a628a568f..65e3526a7f 100644 --- a/gtk/gtkcssimagevalue.c +++ b/gtk/gtkcssimagevalue.c @@ -136,7 +136,7 @@ static const GtkCssValueClass GTK_CSS_VALUE_IMAGE = { GtkCssValue * _gtk_css_image_value_new (GtkCssImage *image) { - static GtkCssValue none_singleton = { >K_CSS_VALUE_IMAGE, 1, NULL }; + static GtkCssValue none_singleton = { >K_CSS_VALUE_IMAGE, 1, 1, NULL }; GtkCssValue *value; if (image == NULL) diff --git a/gtk/gtkcssnumbervalueprivate.h b/gtk/gtkcssnumbervalueprivate.h index e18b69afcb..0257fd6db0 100644 --- a/gtk/gtkcssnumbervalueprivate.h +++ b/gtk/gtkcssnumbervalueprivate.h @@ -32,7 +32,8 @@ typedef enum /*< skip >*/ { GTK_CSS_PARSE_NUMBER = (1 << 2), GTK_CSS_PARSE_LENGTH = (1 << 3), GTK_CSS_PARSE_ANGLE = (1 << 4), - GTK_CSS_PARSE_TIME = (1 << 5) + GTK_CSS_PARSE_TIME = (1 << 5), + GTK_CSS_PARSE_NON_STATIC = (1 << 6) } GtkCssNumberParseFlags; typedef struct _GtkCssNumberValueClass GtkCssNumberValueClass; diff --git a/gtk/gtkcsspositionvalue.c b/gtk/gtkcsspositionvalue.c index 853158a056..001f7e3526 100644 --- a/gtk/gtkcsspositionvalue.c +++ b/gtk/gtkcsspositionvalue.c @@ -167,6 +167,7 @@ _gtk_css_position_value_new (GtkCssValue *x, GtkCssValue *result; result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_POSITION); + result->is_static = x->is_static && y->is_static; result->x = x; result->y = y; diff --git a/gtk/gtkcssrgbavalue.c b/gtk/gtkcssrgbavalue.c index a45709ad8f..f562e5f484 100644 --- a/gtk/gtkcssrgbavalue.c +++ b/gtk/gtkcssrgbavalue.c @@ -108,10 +108,10 @@ static const GtkCssValueClass GTK_CSS_VALUE_RGBA = { gtk_css_value_rgba_print }; -static GtkCssValue transparent_black_singleton = { >K_CSS_VALUE_RGBA, 1, { 0, 0, 0, 0 }}; -static GtkCssValue transparent_white_singleton = { >K_CSS_VALUE_RGBA, 1, { 1, 1, 1, 0 }}; -static GtkCssValue opaque_black_singleton = { >K_CSS_VALUE_RGBA, 1, { 0, 0, 0, 1 }}; -static GtkCssValue opaque_white_singleton = { >K_CSS_VALUE_RGBA, 1, { 1, 1, 1, 1 }}; +static GtkCssValue transparent_black_singleton = { >K_CSS_VALUE_RGBA, 1, 1, { 0, 0, 0, 0 }}; +static GtkCssValue transparent_white_singleton = { >K_CSS_VALUE_RGBA, 1, 1, { 1, 1, 1, 0 }}; +static GtkCssValue opaque_black_singleton = { >K_CSS_VALUE_RGBA, 1, 1, { 0, 0, 0, 1 }}; +static GtkCssValue opaque_white_singleton = { >K_CSS_VALUE_RGBA, 1, 1, { 1, 1, 1, 1 }}; GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba) diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c index 2e09dae683..97fdf1cf95 100644 --- a/gtk/gtkcssshadowsvalue.c +++ b/gtk/gtkcssshadowsvalue.c @@ -210,7 +210,7 @@ static const GtkCssValueClass GTK_CSS_VALUE_SHADOWS = { gtk_css_value_shadows_print }; -static GtkCssValue none_singleton = { >K_CSS_VALUE_SHADOWS, 1, 0, { NULL } }; +static GtkCssValue none_singleton = { >K_CSS_VALUE_SHADOWS, 1, 1, 0, { NULL } }; GtkCssValue * _gtk_css_shadows_value_new_none (void) @@ -223,6 +223,8 @@ gtk_css_shadows_value_new (GtkCssValue **values, guint len) { GtkCssValue *result; + gboolean is_static; + int i; g_return_val_if_fail (values != NULL, NULL); g_return_val_if_fail (len > 0, NULL); @@ -230,7 +232,18 @@ gtk_css_shadows_value_new (GtkCssValue **values, if (len == 1) return values[0]; + is_static = TRUE; + for (i = 0; i < len; i++) + { + if (!values[i]->is_static) + { + is_static = FALSE; + break; + } + } + result = _gtk_css_value_alloc (>K_CSS_VALUE_SHADOWS, sizeof (GtkCssValue) + sizeof (GtkCssValue *) * (len - 1)); + result->is_static = is_static; result->len = len; memcpy (&result->values[0], values, sizeof (GtkCssValue *) * len); diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index 5f939ef99b..1bc478efea 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -177,6 +177,12 @@ gtk_css_shadow_value_new (GtkCssValue *hoffset, retval = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_SHADOW); + retval->is_static = + hoffset->is_static && + voffset->is_static && + radius->is_static && + color->is_static; + retval->hoffset = hoffset; retval->voffset = voffset; retval->radius = radius; diff --git a/gtk/gtkcssstringvalue.c b/gtk/gtkcssstringvalue.c index 286b86e0d9..e5c74136b7 100644 --- a/gtk/gtkcssstringvalue.c +++ b/gtk/gtkcssstringvalue.c @@ -150,6 +150,7 @@ _gtk_css_string_value_new_take (char *string) GtkCssValue *result; result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_STRING); + result->is_static = TRUE; result->string = string; return result; @@ -190,6 +191,7 @@ _gtk_css_ident_value_new_take (char *ident) GtkCssValue *result; result = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_IDENT); + result->is_static = TRUE; result->string = ident; return result; diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index 84c6d7c75c..3ecac362d8 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -868,7 +868,8 @@ parse_border_width (GtkCssStyleProperty *property, { return _gtk_css_number_value_parse (parser, GTK_CSS_POSITIVE_ONLY - | GTK_CSS_PARSE_LENGTH); + | GTK_CSS_PARSE_LENGTH + | GTK_CSS_PARSE_NON_STATIC); } static GtkCssValue * diff --git a/gtk/gtkcsstransformvalue.c b/gtk/gtkcsstransformvalue.c index 5285d7104b..99030aff74 100644 --- a/gtk/gtkcsstransformvalue.c +++ b/gtk/gtkcsstransformvalue.c @@ -590,6 +590,7 @@ gtk_css_value_transform_transition (GtkCssValue *start, } result = gtk_css_transform_value_alloc (MAX (start->n_transforms, end->n_transforms)); + result->is_static = start->is_static && end->is_static; for (i = 0; i < n; i++) { @@ -800,7 +801,7 @@ static const GtkCssValueClass GTK_CSS_VALUE_TRANSFORM = { gtk_css_value_transform_print }; -static GtkCssValue none_singleton = { >K_CSS_VALUE_TRANSFORM, 1, 0, { { GTK_CSS_TRANSFORM_NONE } } }; +static GtkCssValue none_singleton = { >K_CSS_VALUE_TRANSFORM, 1, 1, 0, { { GTK_CSS_TRANSFORM_NONE } } }; static GtkCssValue * gtk_css_transform_value_alloc (guint n_transforms) @@ -931,6 +932,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) GtkCssValue *value; GArray *array; guint i; + gboolean is_static = TRUE; if (gtk_css_parser_try_ident (parser, "none")) return _gtk_css_transform_value_new_none (); @@ -967,6 +969,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) goto fail; transform.type = GTK_CSS_TRANSFORM_PERSPECTIVE; + is_static = is_static && transform.perspective.depth->is_static; } else if (gtk_css_parser_has_function (parser, "rotate") || gtk_css_parser_has_function (parser, "rotateZ")) @@ -978,6 +981,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.rotate.x = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); transform.rotate.y = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); transform.rotate.z = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); + is_static = is_static && transform.rotate.angle->is_static; } else if (gtk_css_parser_has_function (parser, "rotate3d")) { @@ -991,6 +995,10 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) } transform.type = GTK_CSS_TRANSFORM_ROTATE; + is_static = is_static && transform.rotate.angle->is_static && + transform.rotate.x->is_static && + transform.rotate.y->is_static && + transform.rotate.z->is_static; } else if (gtk_css_parser_has_function (parser, "rotateX")) { @@ -1001,6 +1009,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.rotate.x = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); transform.rotate.y = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); transform.rotate.z = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + is_static = is_static && transform.rotate.angle->is_static; } else if (gtk_css_parser_has_function (parser, "rotateY")) { @@ -1011,6 +1020,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.rotate.x = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); transform.rotate.y = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); transform.rotate.z = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + is_static = is_static && transform.rotate.angle->is_static; } else if (gtk_css_parser_has_function (parser, "scale")) { @@ -1030,6 +1040,8 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) else transform.scale.y = gtk_css_value_ref (values[0]); transform.scale.z = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); + is_static = is_static && transform.scale.x->is_static && + transform.scale.y->is_static; } else if (gtk_css_parser_has_function (parser, "scale3d")) { @@ -1047,6 +1059,9 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.scale.x = values[0]; transform.scale.y = values[1]; transform.scale.z = values[2]; + is_static = is_static && transform.scale.x->is_static && + transform.scale.y->is_static && + transform.scale.z->is_static; } else if (gtk_css_parser_has_function (parser, "scaleX")) { @@ -1056,6 +1071,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_SCALE; transform.scale.y = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); transform.scale.z = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); + is_static = is_static && transform.scale.x->is_static; } else if (gtk_css_parser_has_function (parser, "scaleY")) { @@ -1065,6 +1081,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_SCALE; transform.scale.x = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); transform.scale.z = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); + is_static = is_static && transform.scale.y->is_static; } else if (gtk_css_parser_has_function (parser, "scaleZ")) { @@ -1074,6 +1091,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_SCALE; transform.scale.x = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); transform.scale.y = _gtk_css_number_value_new (1, GTK_CSS_NUMBER); + is_static = is_static && transform.scale.z->is_static; } else if (gtk_css_parser_has_function (parser, "skew")) { @@ -1089,6 +1107,8 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_SKEW; transform.skew.x = values[0]; transform.skew.y = values[1]; + is_static = is_static && transform.skew.x->is_static && + transform.skew.y->is_static; } else if (gtk_css_parser_has_function (parser, "skewX")) { @@ -1096,6 +1116,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) goto fail; transform.type = GTK_CSS_TRANSFORM_SKEW_X; + is_static = is_static && transform.skew_x.skew->is_static; } else if (gtk_css_parser_has_function (parser, "skewY")) { @@ -1103,6 +1124,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) goto fail; transform.type = GTK_CSS_TRANSFORM_SKEW_Y; + is_static = is_static && transform.skew_y.skew->is_static; } else if (gtk_css_parser_has_function (parser, "translate")) { @@ -1122,6 +1144,8 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) else transform.translate.y = _gtk_css_number_value_new (0, GTK_CSS_PX); transform.translate.z = _gtk_css_number_value_new (0, GTK_CSS_PX); + is_static = is_static && transform.translate.x->is_static && + transform.translate.y->is_static; } else if (gtk_css_parser_has_function (parser, "translate3d")) { @@ -1139,6 +1163,9 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.translate.x = values[0]; transform.translate.y = values[1]; transform.translate.z = values[2]; + is_static = is_static && transform.translate.x->is_static && + transform.translate.y->is_static && + transform.translate.z->is_static; } else if (gtk_css_parser_has_function (parser, "translateX")) { @@ -1148,6 +1175,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_TRANSLATE; transform.translate.y = _gtk_css_number_value_new (0, GTK_CSS_PX); transform.translate.z = _gtk_css_number_value_new (0, GTK_CSS_PX); + is_static = is_static && transform.translate.x->is_static; } else if (gtk_css_parser_has_function (parser, "translateY")) { @@ -1157,6 +1185,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_TRANSLATE; transform.translate.x = _gtk_css_number_value_new (0, GTK_CSS_PX); transform.translate.z = _gtk_css_number_value_new (0, GTK_CSS_PX); + is_static = is_static && transform.translate.y->is_static; } else if (gtk_css_parser_has_function (parser, "translateZ")) { @@ -1166,6 +1195,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) transform.type = GTK_CSS_TRANSFORM_TRANSLATE; transform.translate.x = _gtk_css_number_value_new (0, GTK_CSS_PX); transform.translate.y = _gtk_css_number_value_new (0, GTK_CSS_PX); + is_static = is_static && transform.translate.z->is_static; } else { @@ -1182,6 +1212,7 @@ _gtk_css_transform_value_parse (GtkCssParser *parser) } value = gtk_css_transform_value_alloc (array->len); + value->is_static = is_static; memcpy (value->transforms, array->data, sizeof (GtkCssTransform) * array->len); g_array_free (array, TRUE); diff --git a/gtk/gtkcssvalue.c b/gtk/gtkcssvalue.c index 63a23b0f6c..c925668657 100644 --- a/gtk/gtkcssvalue.c +++ b/gtk/gtkcssvalue.c @@ -80,6 +80,7 @@ _gtk_css_value_alloc (const GtkCssValueClass *klass, value->class = klass; value->ref_count = 1; + value->is_static = FALSE; count_value (klass->type_name, 1); @@ -133,7 +134,10 @@ _gtk_css_value_compute (GtkCssValue *value, GtkCssStyle *style, GtkCssStyle *parent_style) { - return value->class->compute (value, property_id, provider, style, parent_style); + if (value->is_static) + return _gtk_css_value_ref (value); + else + return value->class->compute (value, property_id, provider, style, parent_style); } gboolean diff --git a/gtk/gtkcssvalueprivate.h b/gtk/gtkcssvalueprivate.h index 3071d2bd17..060a03a4e5 100644 --- a/gtk/gtkcssvalueprivate.h +++ b/gtk/gtkcssvalueprivate.h @@ -37,7 +37,8 @@ typedef struct _GtkCssValueClass GtkCssValueClass; /* using define instead of struct here so compilers get the packing right */ #define GTK_CSS_VALUE_BASE \ const GtkCssValueClass *class; \ - gint ref_count; + gint ref_count; \ + gboolean is_static; struct _GtkCssValueClass { const char *type_name; |