-static gboolean
-border_color_shorthand_value_parse (GtkCssParser *parser,
- GFile *base,
- GValue *value)
-{
- GtkSymbolicColor *symbolic;
- GPtrArray *array;
-
- array = g_ptr_array_new_with_free_func ((GDestroyNotify) gtk_symbolic_color_unref);
-
- do
- {
- if (_gtk_css_parser_try (parser, "transparent", TRUE))
- {
- GdkRGBA transparent = { 0, 0, 0, 0 };
-
- symbolic = gtk_symbolic_color_new_literal (&transparent);
- }
- else
- {
- symbolic = _gtk_css_parser_read_symbolic_color (parser);
-
- if (symbolic == NULL)
- return FALSE;
- }
-
- g_ptr_array_add (array, symbolic);
- }
- while (array->len < 4 &&
- !_gtk_css_parser_is_eof (parser) &&
- !_gtk_css_parser_begins_with (parser, ';') &&
- !_gtk_css_parser_begins_with (parser, '}'));
-
- switch (array->len)
- {
- default:
- g_assert_not_reached ();
- break;
- case 1:
- g_ptr_array_add (array, gtk_symbolic_color_ref (g_ptr_array_index (array, 0)));
- /* fall through */
- case 2:
- g_ptr_array_add (array, gtk_symbolic_color_ref (g_ptr_array_index (array, 0)));
- /* fall through */
- case 3:
- g_ptr_array_add (array, gtk_symbolic_color_ref (g_ptr_array_index (array, 1)));
- /* fall through */
- case 4:
- break;
- }
-
- g_value_unset (value);
- g_value_init (value, G_TYPE_PTR_ARRAY);
- g_value_take_boxed (value, array);
-
- return TRUE;
-}
-