summaryrefslogtreecommitdiff
path: root/gtk/gtkcssdimensionvalue.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-01-10 10:04:22 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-01-10 14:50:13 -0500
commit4f6ea7c418fb06c88c425012e3541305906f048d (patch)
treeb04320f8e2ef2854e619ac07848eeb8d285f76be /gtk/gtkcssdimensionvalue.c
parentba8f39a90a4a2c4380c46e848f892cdb33ffac0c (diff)
downloadgtk+-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.c72
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[] = {
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 0 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 1 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_NUMBER, 96 }, /* DPI default */
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 0 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 1 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_NUMBER, 96 }, /* DPI default */
};
static GtkCssValue px_singletons[] = {
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 0 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 1 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 2 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 3 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 4 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 5 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 6 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 7 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 8 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 16 }, /* Icon size default */
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 32 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 10 * 96.0 / 72.0 }, /* font size 10 */
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PX, 11 * 96.0 / 72.0 }, /* font size 11 */
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 0 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 1 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 2 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 3 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 4 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 5 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 6 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 7 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 8 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 16 }, /* Icon size default */
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 32 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 10 * 96.0 / 72.0 }, /* font size 10 */
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_PX, 11 * 96.0 / 72.0 }, /* font size 11 */
};
static GtkCssValue percent_singletons[] = {
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 0 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 50 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_PERCENT, 100 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 0 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 50 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 0, GTK_CSS_PERCENT, 100 },
};
static GtkCssValue second_singletons[] = {
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.15 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.2 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 0.3 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_S, 1 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.15 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.2 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 0.3 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_S, 1 },
};
static GtkCssValue deg_singletons[] = {
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 0 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 90 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 180 },
- { &GTK_CSS_VALUE_DIMENSION.value_class, 1, GTK_CSS_DEG, 270 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 0 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 90 },
+ { &GTK_CSS_VALUE_DIMENSION.value_class, 1, 1, GTK_CSS_DEG, 180 },
+ { &GTK_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 (&deg_singletons[2]);
if (value == 270)
return _gtk_css_value_ref (&deg_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, &GTK_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;