diff --git a/gtk/gtkcssparser.c b/gtk/gtkcssparser.c index 463baf90bd..3aab85e67a 100644 --- a/gtk/gtkcssparser.c +++ b/gtk/gtkcssparser.c @@ -386,10 +386,7 @@ _gtk_css_parser_read_string (GtkCssParser *parser) quote = *parser->data; if (quote != '"' && quote != '\'') - { - _gtk_css_parser_error (parser, "Expected a string."); - return NULL; - } + return NULL; parser->data++; str = g_string_new (NULL); diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 7cf3a4f710..2e50b0c715 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -647,36 +647,6 @@ * border-color * * - * font-family - * @family [, @family]* - * #gchararray - * font-family: Sans, Arial; - * - * - * font-style - * [normal|oblique|italic] - * #PANGO_TYPE_STYLE - * font-style: italic; - * - * - * font-variant - * [normal|small-caps] - * #PANGO_TYPE_VARIANT - * font-variant: normal; - * - * - * font-weight - * [normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900] - * #PANGO_TYPE_WEIGHT - * font-weight: bold; - * - * - * font-size - * Font size in point - * #gint - * font-size: 13; - * - * * font * @family [@style] [@size] * #PangoFontDescription diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 031746b833..9810ddd28d 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3562,7 +3562,7 @@ gtk_style_context_get_font (GtkStyleContext *context, { GtkStyleContextPrivate *priv; StyleData *data; - PangoFontDescription *description; + const GValue *value; g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL); @@ -3570,15 +3570,12 @@ gtk_style_context_get_font (GtkStyleContext *context, g_return_val_if_fail (priv->widget_path != NULL, NULL); data = style_data_lookup (context); - gtk_style_properties_get (data->store, state, "font", &description, NULL); - /* Yuck, fonts are created on-demand but we don't return a ref. - * Do bad things to achieve this requirement */ - g_object_set_data_full (G_OBJECT (data->store), - "last-gotten-font", - description, - (GDestroyNotify) pango_font_description_free); + value = _gtk_style_properties_peek_property (data->store, "font", state, NULL); - return description; + if (value) + return g_value_get_boxed (value); + + return NULL; } static void diff --git a/gtk/gtkstyleproperty.c b/gtk/gtkstyleproperty.c index 8115603494..7b4e092d38 100644 --- a/gtk/gtkstyleproperty.c +++ b/gtk/gtkstyleproperty.c @@ -22,7 +22,6 @@ #include "gtkstylepropertyprivate.h" #include -#include #include #include @@ -228,74 +227,6 @@ symbolic_color_value_print (const GValue *value, } } -static gboolean -font_family_parse (GtkCssParser *parser, - GFile *base, - GValue *value) -{ - GPtrArray *names; - char *name; - - /* We don't special case generic families. Pango should do - * that for us */ - - names = g_ptr_array_new (); - - do { - name = _gtk_css_parser_try_ident (parser, TRUE); - if (name) - { - GString *string = g_string_new (name); - g_free (name); - while ((name = _gtk_css_parser_try_ident (parser, TRUE))) - { - g_string_append_c (string, ' '); - g_string_append (string, name); - g_free (name); - } - name = g_string_free (string, FALSE); - } - else - { - name = _gtk_css_parser_read_string (parser); - if (name == NULL) - { - g_ptr_array_free (names, TRUE); - return FALSE; - } - } - - g_ptr_array_add (names, name); - } while (_gtk_css_parser_try (parser, ",", TRUE)); - - /* NULL-terminate array */ - g_ptr_array_add (names, NULL); - g_value_set_boxed (value, g_ptr_array_free (names, FALSE)); - return TRUE; -} - -static void -font_family_value_print (const GValue *value, - GString *string) -{ - const char **names = g_value_get_boxed (value); - - if (names == NULL || *names == NULL) - { - g_string_append (string, "none"); - return; - } - - string_append_string (string, *names); - names++; - while (*names) - { - g_string_append (string, ", "); - string_append_string (string, *names); - names++; - } -} - static gboolean font_description_value_parse (GtkCssParser *parser, GFile *base, @@ -1638,119 +1569,6 @@ pack_border_radius (GValue *value, g_free (top_left); } -static GParameter * -unpack_font_description (const GValue *value, - guint *n_params) -{ - GParameter *parameter = g_new0 (GParameter, 5); - PangoFontDescription *description; - PangoFontMask mask; - guint n; - - /* For backwards compat, we only unpack values that are indeed set. - * For strict CSS conformance we need to unpack all of them. - * Note that we do set all of them in the parse function, so it - * will not have effects when parsing CSS files. It will though - * for custom style providers. - */ - - description = g_value_get_boxed (value); - n = 0; - - if (description) - mask = pango_font_description_get_set_fields (description); - else - mask = 0; - - if (mask & PANGO_FONT_MASK_FAMILY) - { - GPtrArray *strv = g_ptr_array_new (); - - g_ptr_array_add (strv, g_strdup (pango_font_description_get_family (description))); - g_ptr_array_add (strv, NULL); - parameter[n].name = "font-family"; - g_value_init (¶meter[n].value, G_TYPE_STRV); - g_value_take_boxed (¶meter[n].value, - g_ptr_array_free (strv, FALSE)); - n++; - } - - if (mask & PANGO_FONT_MASK_STYLE) - { - parameter[n].name = "font-style"; - g_value_init (¶meter[n].value, PANGO_TYPE_STYLE); - g_value_set_enum (¶meter[n].value, - pango_font_description_get_style (description)); - n++; - } - - if (mask & PANGO_FONT_MASK_VARIANT) - { - parameter[n].name = "font-variant"; - g_value_init (¶meter[n].value, PANGO_TYPE_VARIANT); - g_value_set_enum (¶meter[n].value, - pango_font_description_get_variant (description)); - n++; - } - - if (mask & PANGO_FONT_MASK_WEIGHT) - { - parameter[n].name = "font-weight"; - g_value_init (¶meter[n].value, PANGO_TYPE_WEIGHT); - g_value_set_enum (¶meter[n].value, - pango_font_description_get_weight (description)); - n++; - } - - if (mask & PANGO_FONT_MASK_SIZE) - { - parameter[n].name = "font-size"; - g_value_init (¶meter[n].value, G_TYPE_DOUBLE); - g_value_set_double (¶meter[n].value, - (double) pango_font_description_get_size (description) / PANGO_SCALE); - n++; - } - - *n_params = n; - - return parameter; -} - -static void -pack_font_description (GValue *value, - GtkStyleProperties *props, - GtkStateFlags state) -{ - PangoFontDescription *description; - char **families; - PangoStyle style; - PangoVariant variant; - PangoWeight weight; - double size; - - gtk_style_properties_get (props, - state, - "font-family", &families, - "font-style", &style, - "font-variant", &variant, - "font-weight", &weight, - "font-size", &size, - NULL); - - description = pango_font_description_new (); - /* xxx: Can we set all the families here somehow? */ - if (families) - pango_font_description_set_family (description, families[0]); - pango_font_description_set_size (description, round (size * PANGO_SCALE)); - pango_font_description_set_style (description, style); - pango_font_description_set_variant (description, variant); - pango_font_description_set_weight (description, weight); - - g_free (families); - - g_value_take_boxed (value, description); -} - /*** API ***/ static void @@ -2127,73 +1945,14 @@ gtk_style_property_init (void) "Background color", GDK_TYPE_RGBA, 0)); - _gtk_style_property_register (g_param_spec_boxed ("font-family", - "Font family", - "Font family", - G_TYPE_STRV, 0), - GTK_STYLE_PROPERTY_INHERIT, - NULL, - NULL, - NULL, - font_family_parse, - font_family_value_print, - NULL); - _gtk_style_property_register (g_param_spec_enum ("font-style", - "Font style", - "Font style", - PANGO_TYPE_STYLE, - PANGO_STYLE_NORMAL, 0), - GTK_STYLE_PROPERTY_INHERIT, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); - _gtk_style_property_register (g_param_spec_enum ("font-variant", - "Font variant", - "Font variant", - PANGO_TYPE_VARIANT, - PANGO_VARIANT_NORMAL, 0), - GTK_STYLE_PROPERTY_INHERIT, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); - /* xxx: need to parse this properly, ie parse the numbers */ - _gtk_style_property_register (g_param_spec_enum ("font-weight", - "Font weight", - "Font weight", - PANGO_TYPE_WEIGHT, - PANGO_WEIGHT_NORMAL, 0), - GTK_STYLE_PROPERTY_INHERIT, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); - _gtk_style_property_register (g_param_spec_double ("font-size", - "Font size", - "Font size", - 0, G_MAXDOUBLE, 0, 0), - GTK_STYLE_PROPERTY_INHERIT, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL); _gtk_style_property_register (g_param_spec_boxed ("font", "Font Description", "Font Description", PANGO_TYPE_FONT_DESCRIPTION, 0), GTK_STYLE_PROPERTY_INHERIT, NULL, - unpack_font_description, - pack_font_description, + NULL, + NULL, font_description_value_parse, font_description_value_print, NULL);