summaryrefslogtreecommitdiff
path: root/gtk/gtkcssstaticstyle.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcssstaticstyle.c')
-rw-r--r--gtk/gtkcssstaticstyle.c269
1 files changed, 244 insertions, 25 deletions
diff --git a/gtk/gtkcssstaticstyle.c b/gtk/gtkcssstaticstyle.c
index ba7d2ff958..4509c773b7 100644
--- a/gtk/gtkcssstaticstyle.c
+++ b/gtk/gtkcssstaticstyle.c
@@ -23,6 +23,10 @@
#include "gtkcssanimationprivate.h"
#include "gtkcssarrayvalueprivate.h"
+#include "gtkcsscolorvalueprivate.h"
+#include "gtkcsscornervalueprivate.h"
+#include "gtkcssenumvalueprivate.h"
+#include "gtkcsspositionvalueprivate.h"
#include "gtkcssenumvalueprivate.h"
#include "gtkcssinheritvalueprivate.h"
#include "gtkcssinitialvalueprivate.h"
@@ -38,6 +42,7 @@
#include "gtkstylepropertyprivate.h"
#include "gtkstyleproviderprivate.h"
#include "gtkcssdimensionvalueprivate.h"
+#include "gtkcsslineheightvalueprivate.h"
static void gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
GtkStyleProvider *provider,
@@ -221,6 +226,7 @@ static GtkBitmask * gtk_css_ ## NAME ## _values_mask; \
static GtkCssValues * gtk_css_ ## NAME ## _initial_values; \
\
static GtkCssValues * gtk_css_ ## NAME ## _create_initial_values (void); \
+void gtk_css_ ## NAME ## _values_unbox (GtkCss ## TYPE ## Values *values); \
\
static void \
gtk_css_ ## NAME ## _values_init (void) \
@@ -234,6 +240,8 @@ gtk_css_ ## NAME ## _values_init (void) \
} \
\
gtk_css_ ## NAME ## _initial_values = gtk_css_ ## NAME ## _create_initial_values (); \
+ if (gtk_css_ ## NAME ## _initial_values) \
+ gtk_css_ ## NAME ## _values_unbox ((GtkCss ## TYPE ## Values *) gtk_css_ ## NAME ## _initial_values); \
} \
\
static inline gboolean \
@@ -391,69 +399,90 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
{
case GTK_CSS_PROPERTY_COLOR:
gtk_css_take_value (&style->core->color, value);
+ style->core->_color = *gtk_css_color_value_get_rgba (style->core->color);
break;
case GTK_CSS_PROPERTY_DPI:
gtk_css_take_value (&style->core->dpi, value);
+ style->core->_dpi = _gtk_css_number_value_get (style->core->dpi, 96);
break;
case GTK_CSS_PROPERTY_FONT_SIZE:
gtk_css_take_value (&style->core->font_size, value);
+ style->core->_font_size = _gtk_css_number_value_get (style->core->font_size, 100);
break;
case GTK_CSS_PROPERTY_ICON_PALETTE:
gtk_css_take_value (&style->core->icon_palette, value);
break;
case GTK_CSS_PROPERTY_BACKGROUND_COLOR:
gtk_css_take_value (&style->background->background_color, value);
+ style->background->_background_color = *gtk_css_color_value_get_rgba (style->background->background_color);
break;
case GTK_CSS_PROPERTY_FONT_FAMILY:
gtk_css_take_value (&style->font->font_family, value);
break;
case GTK_CSS_PROPERTY_FONT_STYLE:
gtk_css_take_value (&style->font->font_style, value);
+ style->font->_font_style = _gtk_css_font_style_value_get (style->font->font_style);
break;
case GTK_CSS_PROPERTY_FONT_WEIGHT:
gtk_css_take_value (&style->font->font_weight, value);
+ style->font->_font_weight = _gtk_css_number_value_get (style->font->font_weight, 100);
break;
case GTK_CSS_PROPERTY_FONT_STRETCH:
gtk_css_take_value (&style->font->font_stretch, value);
+ style->font->_font_stretch = _gtk_css_font_stretch_value_get (style->font->font_stretch);
break;
case GTK_CSS_PROPERTY_LETTER_SPACING:
gtk_css_take_value (&style->font->letter_spacing, value);
+ style->font->_letter_spacing = _gtk_css_number_value_get (style->font->letter_spacing, 100);
break;
case GTK_CSS_PROPERTY_LINE_HEIGHT:
gtk_css_take_value (&style->font->line_height, value);
+ style->font->_line_height = gtk_css_line_height_value_get (style->font->line_height);
break;
case GTK_CSS_PROPERTY_TEXT_DECORATION_LINE:
gtk_css_take_value (&style->font_variant->text_decoration_line, value);
+ style->font_variant->_text_decoration_line = _gtk_css_text_decoration_line_value_get (style->font_variant->text_decoration_line);
break;
case GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR:
gtk_css_take_value (&style->font_variant->text_decoration_color, value);
+ if (style->font_variant->text_decoration_color)
+ style->font_variant->_text_decoration_color = *gtk_css_color_value_get_rgba (style->font_variant->text_decoration_color);
break;
case GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE:
gtk_css_take_value (&style->font_variant->text_decoration_style, value);
+ style->font_variant->_text_decoration_style = _gtk_css_text_decoration_style_value_get (style->font_variant->text_decoration_style);
break;
case GTK_CSS_PROPERTY_TEXT_TRANSFORM:
gtk_css_take_value (&style->font_variant->text_transform, value);
+ style->font_variant->_text_transform = _gtk_css_text_transform_value_get (style->font_variant->text_transform);
break;
case GTK_CSS_PROPERTY_FONT_KERNING:
gtk_css_take_value (&style->font_variant->font_kerning, value);
+ style->font_variant->_font_kerning = _gtk_css_font_kerning_value_get (style->font_variant->font_kerning);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_LIGATURES:
gtk_css_take_value (&style->font_variant->font_variant_ligatures, value);
+ style->font_variant->_font_variant_ligatures = _gtk_css_font_variant_ligature_value_get (style->font_variant->font_variant_ligatures);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_POSITION:
gtk_css_take_value (&style->font_variant->font_variant_position, value);
+ style->font_variant->_font_variant_position = _gtk_css_font_variant_position_value_get (style->font_variant->font_variant_position);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_CAPS:
gtk_css_take_value (&style->font_variant->font_variant_caps, value);
+ style->font_variant->_font_variant_caps = _gtk_css_font_variant_caps_value_get (style->font_variant->font_variant_caps);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_NUMERIC:
gtk_css_take_value (&style->font_variant->font_variant_numeric, value);
+ style->font_variant->_font_variant_numeric = _gtk_css_font_variant_numeric_value_get (style->font_variant->font_variant_numeric);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_ALTERNATES:
gtk_css_take_value (&style->font_variant->font_variant_alternates, value);
+ style->font_variant->_font_variant_alternates = _gtk_css_font_variant_alternate_value_get (style->font_variant->font_variant_alternates);
break;
case GTK_CSS_PROPERTY_FONT_VARIANT_EAST_ASIAN:
gtk_css_take_value (&style->font_variant->font_variant_east_asian, value);
+ style->font_variant->_font_variant_east_asian = _gtk_css_font_variant_east_asian_value_get (style->font_variant->font_variant_east_asian);
break;
case GTK_CSS_PROPERTY_TEXT_SHADOW:
gtk_css_take_value (&style->font->text_shadow, value);
@@ -463,72 +492,99 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_MARGIN_TOP:
gtk_css_take_value (&style->size->margin_top, value);
+ style->size->_margin[GTK_CSS_TOP] = _gtk_css_number_value_get (style->size->margin_top, 100);
break;
- case GTK_CSS_PROPERTY_MARGIN_LEFT:
- gtk_css_take_value (&style->size->margin_left, value);
+ case GTK_CSS_PROPERTY_MARGIN_RIGHT:
+ gtk_css_take_value (&style->size->margin_right, value);
+ style->size->_margin[GTK_CSS_RIGHT] = _gtk_css_number_value_get (style->size->margin_right, 100);
break;
case GTK_CSS_PROPERTY_MARGIN_BOTTOM:
gtk_css_take_value (&style->size->margin_bottom, value);
+ style->size->_margin[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (style->size->margin_bottom, 100);
break;
- case GTK_CSS_PROPERTY_MARGIN_RIGHT:
- gtk_css_take_value (&style->size->margin_right, value);
+ case GTK_CSS_PROPERTY_MARGIN_LEFT:
+ gtk_css_take_value (&style->size->margin_left, value);
+ style->size->_margin[GTK_CSS_LEFT] = _gtk_css_number_value_get (style->size->margin_left, 100);
break;
case GTK_CSS_PROPERTY_PADDING_TOP:
gtk_css_take_value (&style->size->padding_top, value);
+ style->size->_padding[GTK_CSS_TOP] = _gtk_css_number_value_get (style->size->padding_top, 100);
break;
- case GTK_CSS_PROPERTY_PADDING_LEFT:
- gtk_css_take_value (&style->size->padding_left, value);
+ case GTK_CSS_PROPERTY_PADDING_RIGHT:
+ gtk_css_take_value (&style->size->padding_right, value);
+ style->size->_padding[GTK_CSS_RIGHT] = _gtk_css_number_value_get (style->size->padding_right, 100);
break;
case GTK_CSS_PROPERTY_PADDING_BOTTOM:
gtk_css_take_value (&style->size->padding_bottom, value);
+ style->size->_padding[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (style->size->padding_bottom, 100);
break;
- case GTK_CSS_PROPERTY_PADDING_RIGHT:
- gtk_css_take_value (&style->size->padding_right, value);
+ case GTK_CSS_PROPERTY_PADDING_LEFT:
+ gtk_css_take_value (&style->size->padding_left, value);
+ style->size->_padding[GTK_CSS_LEFT] = _gtk_css_number_value_get (style->size->padding_left, 100);
break;
case GTK_CSS_PROPERTY_BORDER_TOP_STYLE:
gtk_css_take_value (&style->border->border_top_style, value);
+ style->border->_border_style[GTK_CSS_TOP] = _gtk_css_border_style_value_get (style->border->border_top_style);
break;
case GTK_CSS_PROPERTY_BORDER_TOP_WIDTH:
gtk_css_take_value (&style->border->border_top_width, value);
+ style->border->_border_width[GTK_CSS_TOP] = _gtk_css_number_value_get (style->border->border_top_width, 100);
break;
case GTK_CSS_PROPERTY_BORDER_LEFT_STYLE:
gtk_css_take_value (&style->border->border_left_style, value);
+ style->border->_border_style[GTK_CSS_LEFT] = _gtk_css_border_style_value_get (style->border->border_left_style);
break;
case GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH:
gtk_css_take_value (&style->border->border_left_width, value);
+ style->border->_border_width[GTK_CSS_LEFT] = _gtk_css_number_value_get (style->border->border_left_width, 100);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE:
gtk_css_take_value (&style->border->border_bottom_style, value);
+ style->border->_border_style[GTK_CSS_BOTTOM] = _gtk_css_border_style_value_get (style->border->border_bottom_style);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH:
gtk_css_take_value (&style->border->border_bottom_width, value);
+ style->border->_border_width[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (style->border->border_bottom_width, 100);
break;
case GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE:
gtk_css_take_value (&style->border->border_right_style, value);
+ style->border->_border_style[GTK_CSS_RIGHT] = _gtk_css_border_style_value_get (style->border->border_right_style);
break;
case GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH:
gtk_css_take_value (&style->border->border_right_width, value);
+ style->border->_border_width[GTK_CSS_RIGHT] = _gtk_css_number_value_get (style->border->border_right_width, 100);
break;
case GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS:
gtk_css_take_value (&style->border->border_top_left_radius, value);
+ style->border->_border_radius[GTK_CSS_TOP_LEFT].width = _gtk_css_corner_value_get_x (style->border->border_top_left_radius, 100);
+ style->border->_border_radius[GTK_CSS_TOP_LEFT].height = _gtk_css_corner_value_get_y (style->border->border_top_left_radius, 100);
break;
case GTK_CSS_PROPERTY_BORDER_TOP_RIGHT_RADIUS:
gtk_css_take_value (&style->border->border_top_right_radius, value);
+ style->border->_border_radius[GTK_CSS_TOP_RIGHT].width = _gtk_css_corner_value_get_x (style->border->border_top_right_radius, 100);
+ style->border->_border_radius[GTK_CSS_TOP_RIGHT].height = _gtk_css_corner_value_get_y (style->border->border_top_right_radius, 100);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS:
gtk_css_take_value (&style->border->border_bottom_right_radius, value);
+ style->border->_border_radius[GTK_CSS_BOTTOM_RIGHT].width = _gtk_css_corner_value_get_x (style->border->border_bottom_right_radius, 100);
+ style->border->_border_radius[GTK_CSS_BOTTOM_RIGHT].height = _gtk_css_corner_value_get_y (style->border->border_bottom_right_radius, 100);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_LEFT_RADIUS:
gtk_css_take_value (&style->border->border_bottom_left_radius, value);
+ style->border->_border_radius[GTK_CSS_BOTTOM_LEFT].width = _gtk_css_corner_value_get_x (style->border->border_bottom_left_radius, 100);
+ style->border->_border_radius[GTK_CSS_BOTTOM_LEFT].height = _gtk_css_corner_value_get_y (style->border->border_bottom_left_radius, 100);
break;
case GTK_CSS_PROPERTY_OUTLINE_STYLE:
gtk_css_take_value (&style->outline->outline_style, value);
+ style->outline->_outline_style = _gtk_css_border_style_value_get (style->outline->outline_style);
break;
case GTK_CSS_PROPERTY_OUTLINE_WIDTH:
gtk_css_take_value (&style->outline->outline_width, value);
+ style->outline->_outline_width = _gtk_css_number_value_get (style->outline->outline_width, 100);
break;
case GTK_CSS_PROPERTY_OUTLINE_OFFSET:
gtk_css_take_value (&style->outline->outline_offset, value);
+ style->outline->_outline_offset = _gtk_css_number_value_get (style->outline->outline_offset, 100);
break;
case GTK_CSS_PROPERTY_BACKGROUND_CLIP:
gtk_css_take_value (&style->background->background_clip, value);
@@ -544,18 +600,28 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_BORDER_TOP_COLOR:
gtk_css_take_value (&style->border->border_top_color, value);
+ if (style->border->border_top_color)
+ style->border->_border_color[GTK_CSS_TOP] = *gtk_css_color_value_get_rgba (style->border->border_top_color);
break;
case GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR:
gtk_css_take_value (&style->border->border_right_color, value);
+ if (style->border->border_right_color)
+ style->border->_border_color[GTK_CSS_RIGHT] = *gtk_css_color_value_get_rgba (style->border->border_right_color);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR:
gtk_css_take_value (&style->border->border_bottom_color, value);
+ if (style->border->border_bottom_color)
+ style->border->_border_color[GTK_CSS_BOTTOM] = *gtk_css_color_value_get_rgba (style->border->border_bottom_color);
break;
case GTK_CSS_PROPERTY_BORDER_LEFT_COLOR:
gtk_css_take_value (&style->border->border_left_color, value);
+ if (style->border->border_left_color)
+ style->border->_border_color[GTK_CSS_LEFT] = *gtk_css_color_value_get_rgba (style->border->border_left_color);
break;
case GTK_CSS_PROPERTY_OUTLINE_COLOR:
gtk_css_take_value (&style->outline->outline_color, value);
+ if (style->outline->outline_color)
+ style->outline->_outline_color = *gtk_css_color_value_get_rgba (style->outline->outline_color);
break;
case GTK_CSS_PROPERTY_BACKGROUND_REPEAT:
gtk_css_take_value (&style->background->background_repeat, value);
@@ -583,12 +649,14 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_ICON_SIZE:
gtk_css_take_value (&style->icon->icon_size, value);
+ style->icon->_icon_size = _gtk_css_number_value_get (style->icon->icon_size, 100);
break;
case GTK_CSS_PROPERTY_ICON_SHADOW:
gtk_css_take_value (&style->icon->icon_shadow, value);
break;
case GTK_CSS_PROPERTY_ICON_STYLE:
gtk_css_take_value (&style->icon->icon_style, value);
+ style->icon->_icon_style = _gtk_css_icon_style_value_get (style->icon->icon_style);
break;
case GTK_CSS_PROPERTY_ICON_TRANSFORM:
gtk_css_take_value (&style->other->icon_transform, value);
@@ -598,6 +666,8 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_BORDER_SPACING:
gtk_css_take_value (&style->size->border_spacing, value);
+ style->size->_border_spacing[GTK_ORIENTATION_HORIZONTAL] = _gtk_css_position_value_get_x (style->size->border_spacing, 100);
+ style->size->_border_spacing[GTK_ORIENTATION_VERTICAL] = _gtk_css_position_value_get_y (style->size->border_spacing, 100);
break;
case GTK_CSS_PROPERTY_TRANSFORM:
gtk_css_take_value (&style->other->transform, value);
@@ -607,9 +677,11 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_MIN_WIDTH:
gtk_css_take_value (&style->size->min_width, value);
+ style->size->_min_size[GTK_ORIENTATION_HORIZONTAL] = _gtk_css_number_value_get (style->size->min_width, 100);
break;
case GTK_CSS_PROPERTY_MIN_HEIGHT:
gtk_css_take_value (&style->size->min_height, value);
+ style->size->_min_size[GTK_ORIENTATION_VERTICAL] = _gtk_css_number_value_get (style->size->min_height, 100);
break;
case GTK_CSS_PROPERTY_TRANSITION_PROPERTY:
gtk_css_take_value (&style->transition->transition_property, value);
@@ -655,9 +727,13 @@ gtk_css_static_style_set_value (GtkCssStaticStyle *sstyle,
break;
case GTK_CSS_PROPERTY_CARET_COLOR:
gtk_css_take_value (&style->font->caret_color, value);
+ if (style->font->caret_color)
+ style->font->_caret_color = *gtk_css_color_value_get_rgba (style->font->caret_color);
break;
case GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR:
gtk_css_take_value (&style->font->secondary_caret_color, value);
+ if (style->font->secondary_caret_color)
+ style->font->_secondary_caret_color = *gtk_css_color_value_get_rgba (style->font->secondary_caret_color);
break;
case GTK_CSS_PROPERTY_FONT_FEATURE_SETTINGS:
gtk_css_take_value (&style->font->font_feature_settings, value);
@@ -726,6 +802,15 @@ gtk_css_core_create_initial_values (void)
return NULL;
}
+
+void
+gtk_css_core_values_unbox (GtkCssCoreValues *values)
+{
+ values->_color = *gtk_css_color_value_get_rgba (values->color);
+ values->_dpi = _gtk_css_number_value_get (values->dpi, 96);
+ values->_font_size = _gtk_css_number_value_get (values->font_size, 100);
+}
+
static GtkCssValues *
gtk_css_background_create_initial_values (void)
{
@@ -746,6 +831,12 @@ gtk_css_background_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_background_values_unbox (GtkCssBackgroundValues *values)
+{
+ values->_background_color = *gtk_css_color_value_get_rgba (values->background_color);
+}
+
static GtkCssValues *
gtk_css_border_create_initial_values (void)
{
@@ -777,6 +868,35 @@ gtk_css_border_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_border_values_unbox (GtkCssBorderValues *values)
+{
+ values->_border_style[GTK_CSS_TOP] = _gtk_css_border_style_value_get (values->border_top_style);
+ values->_border_style[GTK_CSS_RIGHT] = _gtk_css_border_style_value_get (values->border_right_style);
+ values->_border_style[GTK_CSS_BOTTOM] = _gtk_css_border_style_value_get (values->border_bottom_style);
+ values->_border_style[GTK_CSS_LEFT] = _gtk_css_border_style_value_get (values->border_left_style);
+ values->_border_width[GTK_CSS_TOP] = _gtk_css_number_value_get (values->border_top_width, 100);
+ values->_border_width[GTK_CSS_RIGHT] = _gtk_css_number_value_get (values->border_right_width, 100);
+ values->_border_width[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (values->border_bottom_width, 100);
+ values->_border_width[GTK_CSS_LEFT] = _gtk_css_number_value_get (values->border_left_width, 100);
+ values->_border_radius[GTK_CSS_TOP_LEFT].width = _gtk_css_corner_value_get_x (values->border_top_left_radius, 100);
+ values->_border_radius[GTK_CSS_TOP_LEFT].height = _gtk_css_corner_value_get_y (values->border_top_left_radius, 100);
+ values->_border_radius[GTK_CSS_TOP_RIGHT].width = _gtk_css_corner_value_get_x (values->border_top_right_radius, 100);
+ values->_border_radius[GTK_CSS_TOP_RIGHT].height = _gtk_css_corner_value_get_y (values->border_top_right_radius, 100);
+ values->_border_radius[GTK_CSS_BOTTOM_RIGHT].width = _gtk_css_corner_value_get_x (values->border_bottom_right_radius, 100);
+ values->_border_radius[GTK_CSS_BOTTOM_RIGHT].height = _gtk_css_corner_value_get_y (values->border_bottom_right_radius, 100);
+ values->_border_radius[GTK_CSS_BOTTOM_LEFT].width = _gtk_css_corner_value_get_x (values->border_bottom_left_radius, 100);
+ values->_border_radius[GTK_CSS_BOTTOM_LEFT].height = _gtk_css_corner_value_get_y (values->border_bottom_left_radius, 100);
+ if (values->border_top_color)
+ values->_border_color[GTK_CSS_TOP] = *gtk_css_color_value_get_rgba (values->border_top_color);
+ if (values->border_right_color)
+ values->_border_color[GTK_CSS_RIGHT] = *gtk_css_color_value_get_rgba (values->border_right_color);
+ if (values->border_bottom_color)
+ values->_border_color[GTK_CSS_BOTTOM] = *gtk_css_color_value_get_rgba (values->border_bottom_color);
+ if (values->border_left_color)
+ values->_border_color[GTK_CSS_LEFT] = *gtk_css_color_value_get_rgba (values->border_left_color);
+}
+
static GtkCssValues *
gtk_css_outline_create_initial_values (void)
{
@@ -792,18 +912,49 @@ gtk_css_outline_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_outline_values_unbox (GtkCssOutlineValues *values)
+{
+ values->_outline_style = _gtk_css_border_style_value_get (values->outline_style);
+ values->_outline_width = _gtk_css_number_value_get (values->outline_width, 100);
+ values->_outline_offset = _gtk_css_number_value_get (values->outline_offset, 100);
+ if (values->outline_color)
+ values->_outline_color = *gtk_css_color_value_get_rgba (values->outline_color);
+}
+
static GtkCssValues *
gtk_css_icon_create_initial_values (void)
{
return NULL;
}
+void
+gtk_css_icon_values_unbox (GtkCssIconValues *values)
+{
+ values->_icon_size = _gtk_css_number_value_get (values->icon_size, 100);
+ values->_icon_style = _gtk_css_icon_style_value_get (values->icon_style);
+}
+
static GtkCssValues *
gtk_css_font_create_initial_values (void)
{
return NULL;
}
+void
+gtk_css_font_values_unbox (GtkCssFontValues *values)
+{
+ values->_font_style = _gtk_css_font_style_value_get (values->font_style);
+ values->_font_weight = _gtk_css_number_value_get (values->font_weight, 100);
+ values->_font_stretch = _gtk_css_font_stretch_value_get (values->font_stretch);
+ values->_letter_spacing = _gtk_css_number_value_get (values->letter_spacing, 100);
+ values->_line_height = gtk_css_line_height_value_get (values->line_height);
+ if (values->caret_color)
+ values->_caret_color = *gtk_css_color_value_get_rgba (values->caret_color);
+ if (values->secondary_caret_color)
+ values->_secondary_caret_color = *gtk_css_color_value_get_rgba (values->secondary_caret_color);
+}
+
static GtkCssValues *
gtk_css_font_variant_create_initial_values (void)
{
@@ -826,6 +977,23 @@ gtk_css_font_variant_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_font_variant_values_unbox (GtkCssFontVariantValues *values)
+{
+ values->_text_decoration_line = _gtk_css_text_decoration_line_value_get (values->text_decoration_line);
+ if (values->text_decoration_color)
+ values->_text_decoration_color = *gtk_css_color_value_get_rgba (values->text_decoration_color);
+ values->_text_decoration_style = _gtk_css_text_decoration_style_value_get (values->text_decoration_style);
+ values->_text_transform = _gtk_css_text_transform_value_get (values->text_transform);
+ values->_font_kerning = _gtk_css_font_kerning_value_get (values->font_kerning);
+ values->_font_variant_ligatures = _gtk_css_font_variant_ligature_value_get (values->font_variant_ligatures);
+ values->_font_variant_position = _gtk_css_font_variant_position_value_get (values->font_variant_position);
+ values->_font_variant_caps = _gtk_css_font_variant_caps_value_get (values->font_variant_caps);
+ values->_font_variant_numeric = _gtk_css_font_variant_numeric_value_get (values->font_variant_numeric);
+ values->_font_variant_alternates = _gtk_css_font_variant_alternate_value_get (values->font_variant_alternates);
+ values->_font_variant_east_asian = _gtk_css_font_variant_east_asian_value_get (values->font_variant_east_asian);
+}
+
static GtkCssValues *
gtk_css_animation_create_initial_values (void)
{
@@ -845,6 +1013,11 @@ gtk_css_animation_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_animation_values_unbox (GtkCssAnimationValues *values)
+{
+}
+
static GtkCssValues *
gtk_css_transition_create_initial_values (void)
{
@@ -860,6 +1033,11 @@ gtk_css_transition_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_transition_values_unbox (GtkCssTransitionValues *values)
+{
+}
+
static GtkCssValues *
gtk_css_size_create_initial_values (void)
{
@@ -868,13 +1046,13 @@ gtk_css_size_create_initial_values (void)
values = (GtkCssSizeValues *)gtk_css_values_new (GTK_CSS_SIZE_INITIAL_VALUES);
values->margin_top = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_TOP, NULL, NULL, NULL);
- values->margin_left = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_LEFT, NULL, NULL, NULL);
- values->margin_bottom = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_BOTTOM, NULL, NULL, NULL);
values->margin_right = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_RIGHT, NULL, NULL, NULL);
+ values->margin_bottom = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_BOTTOM, NULL, NULL, NULL);
+ values->margin_left = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MARGIN_LEFT, NULL, NULL, NULL);
values->padding_top = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_TOP, NULL, NULL, NULL);
- values->padding_left = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_LEFT, NULL, NULL, NULL);
- values->padding_bottom = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_BOTTOM, NULL, NULL, NULL);
values->padding_right = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_RIGHT, NULL, NULL, NULL);
+ values->padding_bottom = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_BOTTOM, NULL, NULL, NULL);
+ values->padding_left = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_PADDING_LEFT, NULL, NULL, NULL);
values->border_spacing = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_BORDER_SPACING, NULL, NULL, NULL);
values->min_width = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MIN_WIDTH, NULL, NULL, NULL);
values->min_height = _gtk_css_initial_value_new_compute (GTK_CSS_PROPERTY_MIN_HEIGHT, NULL, NULL, NULL);
@@ -882,6 +1060,23 @@ gtk_css_size_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_size_values_unbox (GtkCssSizeValues *values)
+{
+ values->_margin[GTK_CSS_TOP] = _gtk_css_number_value_get (values->margin_top, 100);
+ values->_margin[GTK_CSS_RIGHT] = _gtk_css_number_value_get (values->margin_right, 100);
+ values->_margin[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (values->margin_bottom, 100);
+ values->_margin[GTK_CSS_LEFT] = _gtk_css_number_value_get (values->margin_left, 100);
+ values->_padding[GTK_CSS_TOP] = _gtk_css_number_value_get (values->padding_top, 100);
+ values->_padding[GTK_CSS_RIGHT] = _gtk_css_number_value_get (values->padding_right, 100);
+ values->_padding[GTK_CSS_BOTTOM] = _gtk_css_number_value_get (values->padding_bottom, 100);
+ values->_padding[GTK_CSS_LEFT] = _gtk_css_number_value_get (values->padding_left, 100);
+ values->_border_spacing[GTK_ORIENTATION_HORIZONTAL] = _gtk_css_position_value_get_x (values->border_spacing, 100);
+ values->_border_spacing[GTK_ORIENTATION_VERTICAL] = _gtk_css_position_value_get_y (values->border_spacing, 100);
+ values->_min_size[GTK_ORIENTATION_HORIZONTAL] = _gtk_css_number_value_get (values->min_width, 100);
+ values->_min_size[GTK_ORIENTATION_VERTICAL] = _gtk_css_number_value_get (values->min_height, 100);
+}
+
static GtkCssValues *
gtk_css_other_create_initial_values (void)
{
@@ -900,6 +1095,11 @@ gtk_css_other_create_initial_values (void)
return (GtkCssValues *)values;
}
+void
+gtk_css_other_values_unbox (GtkCssOtherValues *values)
+{
+}
+
static void
gtk_css_lookup_resolve (GtkCssLookup *lookup,
GtkStyleProvider *provider,
@@ -1034,12 +1234,6 @@ gtk_css_static_style_new_compute (GtkStyleProvider *provider,
return GTK_CSS_STYLE (result);
}
-G_STATIC_ASSERT (GTK_CSS_PROPERTY_BORDER_TOP_STYLE == GTK_CSS_PROPERTY_BORDER_TOP_WIDTH - 1);
-G_STATIC_ASSERT (GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE == GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH - 1);
-G_STATIC_ASSERT (GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE == GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH - 1);
-G_STATIC_ASSERT (GTK_CSS_PROPERTY_BORDER_LEFT_STYLE == GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH - 1);
-G_STATIC_ASSERT (GTK_CSS_PROPERTY_OUTLINE_STYLE == GTK_CSS_PROPERTY_OUTLINE_WIDTH - 1);
-
static void
gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
GtkStyleProvider *provider,
@@ -1049,7 +1243,7 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
GtkCssSection *section)
{
GtkCssValue *value;
- GtkBorderStyle border_style;
+ GtkCssStyle *_style = GTK_CSS_STYLE (style);
gtk_internal_return_if_fail (id < GTK_CSS_PROPERTY_N_PROPERTIES);
@@ -1058,16 +1252,41 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
{
/* We have them ordered in gtkcssstylepropertyimpl.c accordingly, so the
* border styles are already computed when we compute the border widths.
- *
- * Note that we rely on ..._STYLE == ..._WIDTH - 1 here.
*/
case GTK_CSS_PROPERTY_BORDER_TOP_WIDTH:
+ if (_style->border->_border_style[GTK_CSS_TOP] == GTK_BORDER_STYLE_NONE || _style->border->_border_style[GTK_CSS_TOP] == GTK_BORDER_STYLE_HIDDEN)
+ {
+ gtk_css_static_style_set_value (style, id, gtk_css_dimension_value_new (0, GTK_CSS_NUMBER), section);
+ return;
+ }
+ break;
+
case GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH:
+ if (_style->border->_border_style[GTK_CSS_RIGHT] == GTK_BORDER_STYLE_NONE || _style->border->_border_style[GTK_CSS_RIGHT] == GTK_BORDER_STYLE_HIDDEN)
+ {
+ gtk_css_static_style_set_value (style, id, gtk_css_dimension_value_new (0, GTK_CSS_NUMBER), section);
+ return;
+ }
+ break;
+
case GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH:
+ if (_style->border->_border_style[GTK_CSS_BOTTOM] == GTK_BORDER_STYLE_NONE || _style->border->_border_style[GTK_CSS_BOTTOM] == GTK_BORDER_STYLE_HIDDEN)
+ {
+ gtk_css_static_style_set_value (style, id, gtk_css_dimension_value_new (0, GTK_CSS_NUMBER), section);
+ return;
+ }
+ break;
+
case GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH:
+ if (_style->border->_border_style[GTK_CSS_LEFT] == GTK_BORDER_STYLE_NONE || _style->border->_border_style[GTK_CSS_LEFT] == GTK_BORDER_STYLE_HIDDEN)
+ {
+ gtk_css_static_style_set_value (style, id, gtk_css_dimension_value_new (0, GTK_CSS_NUMBER), section);
+ return;
+ }
+ break;
+
case GTK_CSS_PROPERTY_OUTLINE_WIDTH:
- border_style = _gtk_css_border_style_value_get (gtk_css_style_get_value ((GtkCssStyle *)style, id - 1));
- if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
+ if (_style->outline->_outline_style == GTK_BORDER_STYLE_NONE || _style->outline->_outline_style == GTK_BORDER_STYLE_HIDDEN)
{
gtk_css_static_style_set_value (style, id, gtk_css_dimension_value_new (0, GTK_CSS_NUMBER), section);
return;
@@ -1086,7 +1305,7 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
*/
if (specified)
{
- value = _gtk_css_value_compute (specified, id, provider, (GtkCssStyle *)style, parent_style);
+ value = _gtk_css_value_compute (specified, id, provider, _style, parent_style);
}
else if (parent_style && _gtk_css_style_property_is_inherit (_gtk_css_style_property_lookup_by_id (id)))
{
@@ -1095,7 +1314,7 @@ gtk_css_static_style_compute_value (GtkCssStaticStyle *style,
}
else
{
- value = _gtk_css_initial_value_new_compute (id, provider, (GtkCssStyle *)style, parent_style);
+ value = _gtk_css_initial_value_new_compute (id, provider, _style, parent_style);
}
gtk_css_static_style_set_value (style, id, value, section);