X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcssstylepropertyimpl.c;h=26726d73d7a5f7850445699b45dedad96570644d;hb=320613c439c6c7eeb5bc64685522195e0a6adc4e;hp=cde6ee51170595ed7b537a46204241ffdcace06d;hpb=f8e6e272a7b724079e3a660e009dfb20a30d5c4b;p=~andy%2Fgtk diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index cde6ee511..26726d73d 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -42,12 +42,14 @@ #include "gtkcssarrayvalueprivate.h" #include "gtkcssbgsizevalueprivate.h" #include "gtkcssbordervalueprivate.h" +#include "gtkcsscolorvalueprivate.h" #include "gtkcsscornervalueprivate.h" #include "gtkcsseasevalueprivate.h" #include "gtkcssenginevalueprivate.h" -#include "gtkcssimagegradientprivate.h" #include "gtkcssimageprivate.h" +#include "gtkcssimagegradientprivate.h" #include "gtkcssimagevalueprivate.h" +#include "gtkcssinitialvalueprivate.h" #include "gtkcssenumvalueprivate.h" #include "gtkcssnumbervalueprivate.h" #include "gtkcsspositionvalueprivate.h" @@ -55,7 +57,6 @@ #include "gtkcssrgbavalueprivate.h" #include "gtkcssshadowsvalueprivate.h" #include "gtkcssstringvalueprivate.h" -#include "gtksymboliccolorprivate.h" #include "gtkthemingengine.h" #include "gtktypebuiltins.h" #include "gtkwin32themeprivate.h" @@ -64,7 +65,9 @@ typedef enum { GTK_STYLE_PROPERTY_INHERIT = (1 << 0), - GTK_STYLE_PROPERTY_ANIMATED = (1 << 1) + GTK_STYLE_PROPERTY_ANIMATED = (1 << 1), + GTK_STYLE_PROPERTY_NO_RESIZE = (1 << 2), + GTK_STYLE_PROPERTY_AFFECTS_FONT = (1 << 3) } GtkStylePropertyFlags; static void @@ -73,8 +76,6 @@ gtk_css_style_property_register (const char * name, GType value_type, GtkStylePropertyFlags flags, GtkCssStylePropertyParseFunc parse_value, - GtkCssStylePropertyPrintFunc print_value, - GtkCssStylePropertyComputeFunc compute_value, GtkCssStylePropertyQueryFunc query_value, GtkCssStylePropertyAssignFunc assign_value, GtkCssValue * initial_value) @@ -88,6 +89,8 @@ gtk_css_style_property_register (const char * name, node = g_object_new (GTK_TYPE_CSS_STYLE_PROPERTY, "value-type", value_type, + "affects-size", (flags & GTK_STYLE_PROPERTY_NO_RESIZE) ? FALSE : TRUE, + "affects-font", (flags & GTK_STYLE_PROPERTY_AFFECTS_FONT) ? TRUE : FALSE, "animated", (flags & GTK_STYLE_PROPERTY_ANIMATED) ? TRUE : FALSE, "inherit", (flags & GTK_STYLE_PROPERTY_INHERIT) ? TRUE : FALSE, "initial-value", initial_value, @@ -95,10 +98,6 @@ gtk_css_style_property_register (const char * name, NULL); node->parse_value = parse_value; - if (print_value) - node->print_value = print_value; - if (compute_value) - node->compute_value = compute_value; node->query_value = query_value; node->assign_value = assign_value; @@ -165,7 +164,7 @@ assign_border (GtkCssStyleProperty *property, const GtkBorder *border = g_value_get_boxed (value); if (border == NULL) - return _gtk_css_value_ref (_gtk_css_style_property_get_initial_value (property)); + return _gtk_css_initial_value_new (); else return _gtk_css_border_value_new (_gtk_css_number_value_new (border->top, GTK_CSS_PX), _gtk_css_number_value_new (border->right, GTK_CSS_PX), @@ -177,33 +176,7 @@ static GtkCssValue * color_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_symbolic_value_new (parser); -} - -static GtkCssValue * -color_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_rgba_value_compute_from_symbolic (specified, - _gtk_css_style_property_get_initial_value (property), - context, - FALSE); -} - -static GtkCssValue * -color_property_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - GtkCssValue *value; - - value = _gtk_css_rgba_value_compute_from_symbolic (specified, - _gtk_css_style_property_get_initial_value (property), - context, - TRUE); - _gtk_css_rgba_value_get_rgba (value); - return value; + return _gtk_css_color_value_parse (parser); } static void @@ -254,7 +227,7 @@ static GtkCssValue * font_family_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, font_family_parse_one, FALSE); + return _gtk_css_array_value_parse (parser, font_family_parse_one); } static void @@ -426,7 +399,69 @@ static GtkCssValue * parse_css_area (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, parse_css_area_one, FALSE); + return _gtk_css_array_value_parse (parser, parse_css_area_one); +} + +static GtkCssValue * +parse_one_css_direction (GtkCssParser *parser) +{ + GtkCssValue *value = _gtk_css_direction_value_try_parse (parser); + + if (value == NULL) + _gtk_css_parser_error (parser, "unknown value for property"); + + return value; +} + +static GtkCssValue * +parse_css_direction (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_array_value_parse (parser, parse_one_css_direction); +} + +static GtkCssValue * +opacity_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_NUMBER); +} + + +static GtkCssValue * +parse_one_css_play_state (GtkCssParser *parser) +{ + GtkCssValue *value = _gtk_css_play_state_value_try_parse (parser); + + if (value == NULL) + _gtk_css_parser_error (parser, "unknown value for property"); + + return value; +} + +static GtkCssValue * +parse_css_play_state (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_array_value_parse (parser, parse_one_css_play_state); +} + +static GtkCssValue * +parse_one_css_fill_mode (GtkCssParser *parser) +{ + GtkCssValue *value = _gtk_css_fill_mode_value_try_parse (parser); + + if (value == NULL) + _gtk_css_parser_error (parser, "unknown value for property"); + + return value; +} + +static GtkCssValue * +parse_css_fill_mode (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_array_value_parse (parser, parse_one_css_fill_mode); } static GtkCssValue * @@ -441,8 +476,11 @@ bindings_value_parse_one (GtkCssParser *parser) return NULL; } - - if (!gtk_binding_set_find (name)) + if (g_ascii_strcasecmp (name, "none")) + { + name = NULL; + } + else if (!gtk_binding_set_find (name)) { _gtk_css_parser_error (parser, "No binding set named '%s'", name); g_free (name); @@ -456,7 +494,7 @@ static GtkCssValue * bindings_value_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, bindings_value_parse_one, TRUE); + return _gtk_css_array_value_parse (parser, bindings_value_parse_one); } static void @@ -472,12 +510,23 @@ bindings_value_query (GtkCssStyleProperty *property, if (_gtk_css_array_value_get_n_values (css_value) == 0) return; - array = g_ptr_array_new (); + array = NULL; for (i = 0; i < _gtk_css_array_value_get_n_values (css_value); i++) { - GtkBindingSet *binding_set = gtk_binding_set_find (_gtk_css_string_value_get (_gtk_css_array_value_get_nth (css_value, i))); - + const char *name; + GtkBindingSet *binding_set; + + name = _gtk_css_string_value_get (_gtk_css_array_value_get_nth (css_value, i)); + if (name == NULL) + continue; + + binding_set = gtk_binding_set_find (name); + if (binding_set == NULL) + continue; + + if (array == NULL) + array = g_ptr_array_new (); g_ptr_array_add (array, binding_set); } @@ -493,7 +542,7 @@ bindings_value_assign (GtkCssStyleProperty *property, guint i; if (binding_sets == NULL || binding_sets->len == 0) - return _gtk_css_array_value_new (NULL); + return _gtk_css_array_value_new (_gtk_css_string_value_new (NULL)); values = g_new (GtkCssValue *, binding_sets->len); @@ -515,14 +564,6 @@ shadow_value_parse (GtkCssStyleProperty *property, return _gtk_css_shadows_value_parse (parser); } -static GtkCssValue * -shadow_value_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_shadows_value_compute (specified, context); -} - static GtkCssValue * border_corner_radius_value_parse (GtkCssStyleProperty *property, GtkCssParser *parser) @@ -530,14 +571,6 @@ border_corner_radius_value_parse (GtkCssStyleProperty *property, return _gtk_css_corner_value_parse (parser); } -static GtkCssValue * -border_corner_radius_value_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_corner_value_compute (specified, context); -} - static GtkCssValue * css_image_value_parse (GtkCssStyleProperty *property, GtkCssParser *parser) @@ -556,29 +589,6 @@ css_image_value_parse (GtkCssStyleProperty *property, return _gtk_css_image_value_new (image); } -static GtkCssValue * -css_image_value_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - GtkCssImage *image, *computed; - - image = _gtk_css_image_value_get_image (specified); - - if (image == NULL) - return _gtk_css_value_ref (specified); - - computed = _gtk_css_image_compute (image, context); - - if (computed == image) - { - g_object_unref (computed); - return _gtk_css_value_ref (specified); - } - - return _gtk_css_image_value_new (computed); -} - static void css_image_value_query (GtkCssStyleProperty *property, const GtkCssValue *css_value, @@ -617,43 +627,57 @@ css_image_value_assign (GtkCssStyleProperty *property, } static GtkCssValue * -font_size_parse (GtkCssStyleProperty *property, - GtkCssParser *parser) +background_image_value_parse_one (GtkCssParser *parser) { - gdouble d; + return css_image_value_parse (NULL, parser); +} - if (!_gtk_css_parser_try_double (parser, &d)) - { - _gtk_css_parser_error (parser, "Expected a number"); - return NULL; - } +static GtkCssValue * +background_image_value_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_array_value_parse (parser, background_image_value_parse_one); +} - return _gtk_css_number_value_new (d, GTK_CSS_PX); +static void +background_image_value_query (GtkCssStyleProperty *property, + const GtkCssValue *css_value, + GValue *value) +{ + css_image_value_query (property, _gtk_css_array_value_get_nth (css_value, 0), value); } static GtkCssValue * -font_size_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) +background_image_value_assign (GtkCssStyleProperty *property, + const GValue *value) { - return _gtk_css_number_value_compute (specified, context); + return _gtk_css_array_value_new (css_image_value_assign (property, value)); } static GtkCssValue * -outline_parse (GtkCssStyleProperty *property, - GtkCssParser *parser) +font_size_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) { + GtkCssValue *value; + + value = _gtk_css_font_size_value_try_parse (parser); + if (value) + return value; + return _gtk_css_number_value_parse (parser, - GTK_CSS_NUMBER_AS_PIXELS - | GTK_CSS_PARSE_LENGTH); + GTK_CSS_PARSE_LENGTH + | GTK_CSS_PARSE_PERCENT + | GTK_CSS_POSITIVE_ONLY + | GTK_CSS_NUMBER_AS_PIXELS); } static GtkCssValue * -outline_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) +outline_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) { - return _gtk_css_number_value_compute (specified, context); + return _gtk_css_number_value_parse (parser, + GTK_CSS_NUMBER_AS_PIXELS + | GTK_CSS_PARSE_LENGTH); } static GtkCssValue * @@ -696,14 +720,6 @@ border_image_width_parse (GtkCssStyleProperty *property, FALSE); } -static GtkCssValue * -compute_border (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_border_value_compute (specified, context); -} - static GtkCssValue * transition_property_parse_one (GtkCssParser *parser) { @@ -724,7 +740,7 @@ static GtkCssValue * transition_property_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, transition_property_parse_one, FALSE); + return _gtk_css_array_value_parse (parser, transition_property_parse_one); } static GtkCssValue * @@ -737,14 +753,30 @@ static GtkCssValue * transition_time_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, transition_time_parse_one, FALSE); + return _gtk_css_array_value_parse (parser, transition_time_parse_one); } static GtkCssValue * transition_timing_function_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_array_value_parse (parser, _gtk_css_ease_value_parse, FALSE); + return _gtk_css_array_value_parse (parser, _gtk_css_ease_value_parse); +} + +static GtkCssValue * +iteration_count_parse_one (GtkCssParser *parser) +{ + if (_gtk_css_parser_try (parser, "infinite", TRUE)) + return _gtk_css_number_value_new (HUGE_VAL, GTK_CSS_NUMBER); + + return _gtk_css_number_value_parse (parser, GTK_CSS_PARSE_NUMBER | GTK_CSS_POSITIVE_ONLY); +} + +static GtkCssValue * +iteration_count_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) +{ + return _gtk_css_array_value_parse (parser, iteration_count_parse_one); } static GtkCssValue * @@ -779,14 +811,6 @@ parse_margin (GtkCssStyleProperty *property, | GTK_CSS_PARSE_LENGTH); } -static GtkCssValue * -compute_margin (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_number_value_compute (specified, context); -} - static GtkCssValue * parse_padding (GtkCssStyleProperty *property, GtkCssParser *parser) @@ -797,14 +821,6 @@ parse_padding (GtkCssStyleProperty *property, | GTK_CSS_PARSE_LENGTH); } -static GtkCssValue * -compute_padding (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_number_value_compute (specified, context); -} - static GtkCssValue * parse_border_width (GtkCssStyleProperty *property, GtkCssParser *parser) @@ -816,27 +832,7 @@ parse_border_width (GtkCssStyleProperty *property, } static GtkCssValue * -compute_border_width (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - GtkBorderStyle border_style; - - /* The -1 is magic that is only true because we register the style - * properties directly after the width properties. - */ - border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, _gtk_css_style_property_get_id (property) - 1)); - - if (border_style == GTK_BORDER_STYLE_NONE || - border_style == GTK_BORDER_STYLE_HIDDEN) - return _gtk_css_number_value_new (0, GTK_CSS_PX); - else - return _gtk_css_number_value_compute (specified, context); -} - -static GtkCssValue * -background_repeat_value_parse (GtkCssStyleProperty *property, - GtkCssParser *parser) +background_repeat_value_parse_one (GtkCssParser *parser) { GtkCssValue *value = _gtk_css_background_repeat_value_try_parse (parser); @@ -850,48 +846,28 @@ background_repeat_value_parse (GtkCssStyleProperty *property, } static GtkCssValue * -background_size_parse (GtkCssStyleProperty *property, - GtkCssParser *parser) +background_repeat_value_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) { - return _gtk_css_bg_size_value_parse (parser); + return _gtk_css_array_value_parse (parser, background_repeat_value_parse_one); } static GtkCssValue * -background_size_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) +background_size_parse (GtkCssStyleProperty *property, + GtkCssParser *parser) { - return _gtk_css_bg_size_value_compute (specified, context); + return _gtk_css_array_value_parse (parser, _gtk_css_bg_size_value_parse); } static GtkCssValue * background_position_parse (GtkCssStyleProperty *property, GtkCssParser *parser) { - return _gtk_css_position_value_parse (parser); -} - -static GtkCssValue * -background_position_compute (GtkCssStyleProperty *property, - GtkStyleContext *context, - GtkCssValue *specified) -{ - return _gtk_css_position_value_compute (specified, context); + return _gtk_css_array_value_parse (parser, _gtk_css_position_value_parse); } /*** REGISTRATION ***/ -static GtkSymbolicColor * -gtk_symbolic_color_new_rgba (double red, - double green, - double blue, - double alpha) -{ - GdkRGBA rgba = { red, green, blue, alpha }; - - return gtk_symbolic_color_new_literal (&rgba); -} - void _gtk_css_style_property_init_properties (void) { @@ -902,77 +878,60 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("color", GTK_CSS_PROPERTY_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_property_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_new_rgba (1, 1, 1, 1))); + _gtk_css_color_value_new_rgba (1, 1, 1, 1)); gtk_css_style_property_register ("font-size", GTK_CSS_PROPERTY_FONT_SIZE, G_TYPE_DOUBLE, - GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_AFFECTS_FONT, font_size_parse, - NULL, - font_size_compute, query_length_as_double, assign_length_from_double, - /* XXX: This should be 'normal' */ - _gtk_css_number_value_new (10.0, GTK_CSS_PX)); + _gtk_css_font_size_value_new (GTK_CSS_FONT_SIZE_MEDIUM)); /* properties that aren't referenced when computing values * start here */ gtk_css_style_property_register ("background-color", GTK_CSS_PROPERTY_BACKGROUND_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_new_rgba (0, 0, 0, 0))); + _gtk_css_color_value_new_rgba (0, 0, 0, 0)); gtk_css_style_property_register ("font-family", GTK_CSS_PROPERTY_FONT_FAMILY, G_TYPE_STRV, - GTK_STYLE_PROPERTY_INHERIT, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_AFFECTS_FONT, font_family_parse, - NULL, - NULL, font_family_query, font_family_assign, _gtk_css_array_value_new (_gtk_css_string_value_new ("Sans"))); gtk_css_style_property_register ("font-style", GTK_CSS_PROPERTY_FONT_STYLE, PANGO_TYPE_STYLE, - GTK_STYLE_PROPERTY_INHERIT, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_AFFECTS_FONT, parse_pango_style, - NULL, - NULL, query_pango_style, assign_pango_style, _gtk_css_font_style_value_new (PANGO_STYLE_NORMAL)); gtk_css_style_property_register ("font-variant", GTK_CSS_PROPERTY_FONT_VARIANT, PANGO_TYPE_VARIANT, - GTK_STYLE_PROPERTY_INHERIT, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_AFFECTS_FONT, parse_pango_variant, - NULL, - NULL, query_pango_variant, assign_pango_variant, _gtk_css_font_variant_value_new (PANGO_VARIANT_NORMAL)); gtk_css_style_property_register ("font-weight", GTK_CSS_PROPERTY_FONT_WEIGHT, PANGO_TYPE_WEIGHT, - GTK_STYLE_PROPERTY_INHERIT, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_AFFECTS_FONT, parse_pango_weight, - NULL, - NULL, query_pango_weight, assign_pango_weight, _gtk_css_font_weight_value_new (PANGO_WEIGHT_NORMAL)); @@ -980,33 +939,27 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("text-shadow", GTK_CSS_PROPERTY_TEXT_SHADOW, G_TYPE_NONE, - GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, shadow_value_parse, NULL, - shadow_value_compute, - NULL, NULL, _gtk_css_shadows_value_new_none ()); gtk_css_style_property_register ("icon-shadow", GTK_CSS_PROPERTY_ICON_SHADOW, G_TYPE_NONE, - GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, shadow_value_parse, NULL, - shadow_value_compute, - NULL, NULL, _gtk_css_shadows_value_new_none ()); gtk_css_style_property_register ("box-shadow", GTK_CSS_PROPERTY_BOX_SHADOW, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, shadow_value_parse, NULL, - shadow_value_compute, - NULL, NULL, _gtk_css_shadows_value_new_none ()); @@ -1015,8 +968,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_margin, - NULL, - compute_margin, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1025,8 +976,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_margin, - NULL, - compute_margin, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1035,8 +984,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_margin, - NULL, - compute_margin, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1045,8 +992,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_margin, - NULL, - compute_margin, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1055,8 +1000,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_padding, - NULL, - compute_padding, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1065,8 +1008,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_padding, - NULL, - compute_padding, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1075,8 +1016,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_padding, - NULL, - compute_padding, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1085,21 +1024,17 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_padding, - NULL, - compute_padding, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); - /* IMPORTANT: compute_border_width() requires that the border-width - * properties be immeditaly followed by the border-style properties + /* IMPORTANT: the border-width properties must come after border-style properties, + * they depend on them for their value computation. */ gtk_css_style_property_register ("border-top-style", GTK_CSS_PROPERTY_BORDER_TOP_STYLE, GTK_TYPE_BORDER_STYLE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_border_style, - NULL, - NULL, query_border_style, assign_border_style, _gtk_css_border_style_value_new (GTK_BORDER_STYLE_NONE)); @@ -1108,18 +1043,14 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_border_width, - NULL, - compute_border_width, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); gtk_css_style_property_register ("border-left-style", GTK_CSS_PROPERTY_BORDER_LEFT_STYLE, GTK_TYPE_BORDER_STYLE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_border_style, - NULL, - NULL, query_border_style, assign_border_style, _gtk_css_border_style_value_new (GTK_BORDER_STYLE_NONE)); @@ -1128,18 +1059,14 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_border_width, - NULL, - compute_border_width, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); gtk_css_style_property_register ("border-bottom-style", GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE, GTK_TYPE_BORDER_STYLE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_border_style, - NULL, - NULL, query_border_style, assign_border_style, _gtk_css_border_style_value_new (GTK_BORDER_STYLE_NONE)); @@ -1148,18 +1075,14 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_border_width, - NULL, - compute_border_width, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); gtk_css_style_property_register ("border-right-style", GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE, GTK_TYPE_BORDER_STYLE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_border_style, - NULL, - NULL, query_border_style, assign_border_style, _gtk_css_border_style_value_new (GTK_BORDER_STYLE_NONE)); @@ -1168,8 +1091,6 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_border_width, - NULL, - compute_border_width, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1177,44 +1098,36 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("border-top-left-radius", GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, border_corner_radius_value_parse, NULL, - border_corner_radius_value_compute, - NULL, NULL, _gtk_css_corner_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX), _gtk_css_number_value_new (0, GTK_CSS_PX))); gtk_css_style_property_register ("border-top-right-radius", GTK_CSS_PROPERTY_BORDER_TOP_RIGHT_RADIUS, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, border_corner_radius_value_parse, NULL, - border_corner_radius_value_compute, - NULL, NULL, _gtk_css_corner_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX), _gtk_css_number_value_new (0, GTK_CSS_PX))); gtk_css_style_property_register ("border-bottom-right-radius", GTK_CSS_PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, border_corner_radius_value_parse, NULL, - border_corner_radius_value_compute, - NULL, NULL, _gtk_css_corner_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX), _gtk_css_number_value_new (0, GTK_CSS_PX))); gtk_css_style_property_register ("border-bottom-left-radius", GTK_CSS_PROPERTY_BORDER_BOTTOM_LEFT_RADIUS, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, border_corner_radius_value_parse, NULL, - border_corner_radius_value_compute, - NULL, NULL, _gtk_css_corner_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX), _gtk_css_number_value_new (0, GTK_CSS_PX))); @@ -1222,10 +1135,8 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("outline-style", GTK_CSS_PROPERTY_OUTLINE_STYLE, GTK_TYPE_BORDER_STYLE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_border_style, - NULL, - NULL, query_border_style, assign_border_style, _gtk_css_border_style_value_new (GTK_BORDER_STYLE_NONE)); @@ -1234,18 +1145,14 @@ _gtk_css_style_property_init_properties (void) G_TYPE_INT, GTK_STYLE_PROPERTY_ANIMATED, parse_border_width, - NULL, - compute_border_width, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); gtk_css_style_property_register ("outline-offset", GTK_CSS_PROPERTY_OUTLINE_OFFSET, G_TYPE_INT, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, outline_parse, - NULL, - outline_compute, query_length_as_int, assign_length_from_int, _gtk_css_number_value_new (0.0, GTK_CSS_PX)); @@ -1253,157 +1160,119 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("background-clip", GTK_CSS_PROPERTY_BACKGROUND_CLIP, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_css_area, NULL, NULL, - NULL, - NULL, _gtk_css_array_value_new (_gtk_css_area_value_new (GTK_CSS_AREA_BORDER_BOX))); gtk_css_style_property_register ("background-origin", GTK_CSS_PROPERTY_BACKGROUND_ORIGIN, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, parse_css_area, NULL, NULL, - NULL, - NULL, _gtk_css_array_value_new (_gtk_css_area_value_new (GTK_CSS_AREA_PADDING_BOX))); gtk_css_style_property_register ("background-size", GTK_CSS_PROPERTY_BACKGROUND_SIZE, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, background_size_parse, NULL, - background_size_compute, NULL, - NULL, - _gtk_css_bg_size_value_new (NULL, NULL)); + _gtk_css_array_value_new (_gtk_css_bg_size_value_new (NULL, NULL))); gtk_css_style_property_register ("background-position", GTK_CSS_PROPERTY_BACKGROUND_POSITION, G_TYPE_NONE, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, background_position_parse, NULL, - background_position_compute, NULL, - NULL, - _gtk_css_position_value_new (_gtk_css_number_value_new (0, GTK_CSS_PERCENT), - _gtk_css_number_value_new (0, GTK_CSS_PERCENT))); + _gtk_css_array_value_new (_gtk_css_position_value_new (_gtk_css_number_value_new (0, GTK_CSS_PERCENT), + _gtk_css_number_value_new (0, GTK_CSS_PERCENT)))); gtk_css_style_property_register ("border-top-color", GTK_CSS_PROPERTY_BORDER_TOP_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_ref ( - _gtk_symbolic_color_get_current_color ()))); + _gtk_css_color_value_new_current_color ()); gtk_css_style_property_register ("border-right-color", GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_ref ( - _gtk_symbolic_color_get_current_color ()))); + _gtk_css_color_value_new_current_color ()); gtk_css_style_property_register ("border-bottom-color", GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_ref ( - _gtk_symbolic_color_get_current_color ()))); + _gtk_css_color_value_new_current_color ()); gtk_css_style_property_register ("border-left-color", GTK_CSS_PROPERTY_BORDER_LEFT_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_ref ( - _gtk_symbolic_color_get_current_color ()))); + _gtk_css_color_value_new_current_color ()); gtk_css_style_property_register ("outline-color", GTK_CSS_PROPERTY_OUTLINE_COLOR, GDK_TYPE_RGBA, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, color_parse, - NULL, - color_compute, color_query, color_assign, - _gtk_css_symbolic_value_new_take_symbolic_color ( - gtk_symbolic_color_ref ( - _gtk_symbolic_color_get_current_color ()))); + _gtk_css_color_value_new_current_color ()); gtk_css_style_property_register ("background-repeat", GTK_CSS_PROPERTY_BACKGROUND_REPEAT, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, background_repeat_value_parse, NULL, NULL, - NULL, - NULL, - _gtk_css_background_repeat_value_new (GTK_CSS_REPEAT_STYLE_REPEAT, - GTK_CSS_REPEAT_STYLE_REPEAT)); + _gtk_css_array_value_new (_gtk_css_background_repeat_value_new (GTK_CSS_REPEAT_STYLE_REPEAT, + GTK_CSS_REPEAT_STYLE_REPEAT))); gtk_css_style_property_register ("background-image", GTK_CSS_PROPERTY_BACKGROUND_IMAGE, CAIRO_GOBJECT_TYPE_PATTERN, - GTK_STYLE_PROPERTY_ANIMATED, - css_image_value_parse, - NULL, - css_image_value_compute, - css_image_value_query, - css_image_value_assign, - _gtk_css_image_value_new (NULL)); + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, + background_image_value_parse, + background_image_value_query, + background_image_value_assign, + _gtk_css_array_value_new (_gtk_css_image_value_new (NULL))); gtk_css_style_property_register ("border-image-source", GTK_CSS_PROPERTY_BORDER_IMAGE_SOURCE, CAIRO_GOBJECT_TYPE_PATTERN, - GTK_STYLE_PROPERTY_ANIMATED, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, css_image_value_parse, - NULL, - css_image_value_compute, css_image_value_query, css_image_value_assign, _gtk_css_image_value_new (NULL)); gtk_css_style_property_register ("border-image-repeat", GTK_CSS_PROPERTY_BORDER_IMAGE_REPEAT, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, border_image_repeat_parse, NULL, NULL, - NULL, - NULL, _gtk_css_border_repeat_value_new (GTK_CSS_REPEAT_STYLE_STRETCH, GTK_CSS_REPEAT_STYLE_STRETCH)); gtk_css_style_property_register ("border-image-slice", GTK_CSS_PROPERTY_BORDER_IMAGE_SLICE, GTK_TYPE_BORDER, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, border_image_slice_parse, - NULL, - compute_border, query_border, assign_border, _gtk_css_border_value_new (_gtk_css_number_value_new (100, GTK_CSS_PERCENT), @@ -1413,10 +1282,8 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("border-image-width", GTK_CSS_PROPERTY_BORDER_IMAGE_WIDTH, GTK_TYPE_BORDER, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, border_image_width_parse, - NULL, - compute_border, query_border, assign_border, _gtk_css_border_value_new (_gtk_css_number_value_new (1, GTK_CSS_NUMBER), @@ -1427,52 +1294,116 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("transition-property", GTK_CSS_PROPERTY_TRANSITION_PROPERTY, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, transition_property_parse, NULL, NULL, - NULL, - NULL, _gtk_css_array_value_new (_gtk_css_ident_value_new ("all"))); gtk_css_style_property_register ("transition-duration", GTK_CSS_PROPERTY_TRANSITION_DURATION, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, transition_time_parse, NULL, NULL, - NULL, - NULL, _gtk_css_array_value_new (_gtk_css_number_value_new (0, GTK_CSS_S))); gtk_css_style_property_register ("transition-timing-function", GTK_CSS_PROPERTY_TRANSITION_TIMING_FUNCTION, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, transition_timing_function_parse, NULL, NULL, - NULL, - NULL, _gtk_css_array_value_new ( _gtk_css_ease_value_new_cubic_bezier (0.25, 0.1, 0.25, 1.0))); gtk_css_style_property_register ("transition-delay", GTK_CSS_PROPERTY_TRANSITION_DELAY, G_TYPE_NONE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, transition_time_parse, NULL, NULL, + _gtk_css_array_value_new (_gtk_css_number_value_new (0, GTK_CSS_S))); + + gtk_css_style_property_register ("animation-name", + GTK_CSS_PROPERTY_ANIMATION_NAME, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + transition_property_parse, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_ident_value_new ("none"))); + gtk_css_style_property_register ("animation-duration", + GTK_CSS_PROPERTY_ANIMATION_DURATION, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + transition_time_parse, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_number_value_new (0, GTK_CSS_S))); + gtk_css_style_property_register ("animation-timing-function", + GTK_CSS_PROPERTY_ANIMATION_TIMING_FUNCTION, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + transition_timing_function_parse, + NULL, + NULL, + _gtk_css_array_value_new ( + _gtk_css_ease_value_new_cubic_bezier (0.25, 0.1, 0.25, 1.0))); + gtk_css_style_property_register ("animation-iteration-count", + GTK_CSS_PROPERTY_ANIMATION_ITERATION_COUNT, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + iteration_count_parse, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_number_value_new (1, GTK_CSS_NUMBER))); + gtk_css_style_property_register ("animation-direction", + GTK_CSS_PROPERTY_ANIMATION_DIRECTION, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + parse_css_direction, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_direction_value_new (GTK_CSS_DIRECTION_NORMAL))); + gtk_css_style_property_register ("animation-play-state", + GTK_CSS_PROPERTY_ANIMATION_PLAY_STATE, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + parse_css_play_state, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_play_state_value_new (GTK_CSS_PLAY_STATE_RUNNING))); + gtk_css_style_property_register ("animation-delay", + GTK_CSS_PROPERTY_ANIMATION_DELAY, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + transition_time_parse, NULL, NULL, _gtk_css_array_value_new (_gtk_css_number_value_new (0, GTK_CSS_S))); + gtk_css_style_property_register ("animation-fill-mode", + GTK_CSS_PROPERTY_ANIMATION_FILL_MODE, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_NO_RESIZE, + parse_css_fill_mode, + NULL, + NULL, + _gtk_css_array_value_new (_gtk_css_fill_mode_value_new (GTK_CSS_FILL_NONE))); + gtk_css_style_property_register ("opacity", + GTK_CSS_PROPERTY_OPACITY, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_ANIMATED | GTK_STYLE_PROPERTY_NO_RESIZE, + opacity_parse, + NULL, + NULL, + _gtk_css_number_value_new (1, GTK_CSS_NUMBER)); gtk_css_style_property_register ("engine", GTK_CSS_PROPERTY_ENGINE, GTK_TYPE_THEMING_ENGINE, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, engine_parse, - NULL, - NULL, engine_query, engine_assign, _gtk_css_engine_value_new (gtk_theming_engine_load (NULL))); @@ -1481,12 +1412,10 @@ _gtk_css_style_property_init_properties (void) gtk_css_style_property_register ("gtk-key-bindings", GTK_CSS_PROPERTY_GTK_KEY_BINDINGS, G_TYPE_PTR_ARRAY, - 0, + GTK_STYLE_PROPERTY_NO_RESIZE, bindings_value_parse, - NULL, - NULL, bindings_value_query, bindings_value_assign, - _gtk_css_array_value_new (NULL)); + _gtk_css_array_value_new (_gtk_css_string_value_new (NULL))); }