diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-12-21 10:51:04 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2018-01-03 12:18:18 -0500 |
commit | f0526359d188689cd081f2b98430fbabfa19db30 (patch) | |
tree | 41c44c63871466776e257fe564cb3c975d4067ae /gtk/gtkfontchooserwidget.c | |
parent | 78f9193d7ed56ea28259e5253a0fd8a9b48e4236 (diff) | |
download | gtk+-f0526359d188689cd081f2b98430fbabfa19db30.tar.gz |
font chooser: introduce font chooser levels
This is a more systematic approach to reducing the
level of detail in the font chooser.
Diffstat (limited to 'gtk/gtkfontchooserwidget.c')
-rw-r--r-- | gtk/gtkfontchooserwidget.c | 66 |
1 files changed, 61 insertions, 5 deletions
diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index 652bc7d502..b019bbf08f 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -79,7 +79,6 @@ * Since: 3.2 */ - struct _GtkFontChooserWidgetPrivate { GtkWidget *grid; @@ -96,6 +95,7 @@ struct _GtkFontChooserWidgetPrivate gchar *preview_text; gboolean show_preview_entry; + GtkWidget *size_label; GtkWidget *size_spin; GtkWidget *size_slider; @@ -109,6 +109,8 @@ struct _GtkFontChooserWidgetPrivate GDestroyNotify filter_data_destroy; guint last_fontconfig_timestamp; + + GtkFontChooserLevel level; }; /* Keep in line with GtkTreeStore defined in gtkfontchooserwidget.ui */ @@ -168,6 +170,9 @@ static void gtk_font_chooser_widget_cell_data_func (GtkTreeViewColum GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data); +static void gtk_font_chooser_widget_set_level (GtkFontChooserWidget *fontchooser, + GtkFontChooserLevel level); +static GtkFontChooserLevel gtk_font_chooser_widget_get_level (GtkFontChooserWidget *fontchooser); static void gtk_font_chooser_widget_iface_init (GtkFontChooserIface *iface); @@ -257,6 +262,9 @@ gtk_font_chooser_widget_set_property (GObject *object, case GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY: gtk_font_chooser_widget_set_show_preview_entry (fontchooser, g_value_get_boolean (value)); break; + case GTK_FONT_CHOOSER_PROP_LEVEL: + gtk_font_chooser_widget_set_level (fontchooser, g_value_get_enum (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -285,6 +293,9 @@ gtk_font_chooser_widget_get_property (GObject *object, case GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY: g_value_set_boolean (value, gtk_font_chooser_widget_get_show_preview_entry (fontchooser)); break; + case GTK_FONT_CHOOSER_PROP_LEVEL: + g_value_set_enum (value, gtk_font_chooser_widget_get_level (fontchooser)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -648,6 +659,7 @@ gtk_font_chooser_widget_class_init (GtkFontChooserWidgetClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, model); gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, filter_model); gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, preview); + gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, size_label); gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, size_spin); gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, size_slider); gtk_widget_class_bind_template_child_private (widget_class, GtkFontChooserWidget, grid); @@ -742,7 +754,6 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser, GtkListStore *list_store; gint n_families, i; PangoFontFamily **families; - gchar *family_and_face; guint fontconfig_timestamp; gboolean need_reload; PangoFontMap *font_map; @@ -791,21 +802,29 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser, { GtkDelayedFontDescription *desc; const gchar *face_name; + char *title; face_name = pango_font_face_get_face_name (faces[j]); - family_and_face = g_strconcat (fam_name, " ", face_name, NULL); + if (priv->level == GTK_FONT_CHOOSER_LEVEL_FAMILY) + title = g_strdup (fam_name); + else + title = g_strconcat (fam_name, " ", face_name, NULL); + desc = gtk_delayed_font_description_new (faces[j]); gtk_list_store_insert_with_values (list_store, &iter, -1, FAMILY_COLUMN, families[i], FACE_COLUMN, faces[j], FONT_DESC_COLUMN, desc, - PREVIEW_TITLE_COLUMN, family_and_face, + PREVIEW_TITLE_COLUMN, title, -1); - g_free (family_and_face); + g_free (title); gtk_delayed_font_description_unref (desc); + + if (priv->level == GTK_FONT_CHOOSER_LEVEL_FAMILY) + break; } g_free (faces); @@ -1374,6 +1393,43 @@ gtk_font_chooser_widget_set_filter_func (GtkFontChooser *chooser, } static void +gtk_font_chooser_widget_set_level (GtkFontChooserWidget *fontchooser, + GtkFontChooserLevel level) +{ + GtkFontChooserWidgetPrivate *priv = fontchooser->priv; + + if (priv->level == level) + return; + + priv->level = level; + + if (level == GTK_FONT_CHOOSER_LEVEL_FONT) + { + gtk_widget_show (priv->size_label); + gtk_widget_show (priv->size_slider); + gtk_widget_show (priv->size_spin); + } + else + { + gtk_widget_hide (priv->size_label); + gtk_widget_hide (priv->size_slider); + gtk_widget_hide (priv->size_spin); + } + + gtk_font_chooser_widget_load_fonts (fontchooser, TRUE); + + g_object_notify (G_OBJECT (fontchooser), "level"); +} + +static GtkFontChooserLevel +gtk_font_chooser_widget_get_level (GtkFontChooserWidget *fontchooser) +{ + GtkFontChooserWidgetPrivate *priv = fontchooser->priv; + + return priv->level; +} + +static void gtk_font_chooser_widget_iface_init (GtkFontChooserIface *iface) { iface->get_font_family = gtk_font_chooser_widget_get_family; |