diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-09-24 14:08:27 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2008-09-24 14:08:27 +0000 |
commit | 8f01bc8343882bec60e8726215dbc2148d7d65ee (patch) | |
tree | e938bceefc0abf7fb27954993b3ad8c74d47559b /gui | |
parent | c90d5683836fa16445310a9741a5a9831d084504 (diff) | |
download | gdm-8f01bc8343882bec60e8726215dbc2148d7d65ee.tar.gz |
Make the icon scale with font size. Doesn't detect font size changes yet.
2008-09-24 William Jon McCann <jmccann@redhat.com>
* gui/simple-greeter/gdm-user-chooser-widget.c
(get_font_height_for_widget), (get_icon_height_for_widget),
(add_user), (get_stock_person_pixbuf), (get_logged_in_pixbuf):
Make the icon scale with font size. Doesn't detect font size
changes yet.
svn path=/trunk/; revision=6546
Diffstat (limited to 'gui')
-rw-r--r-- | gui/simple-greeter/gdm-user-chooser-widget.c | 55 |
1 files changed, 51 insertions, 4 deletions
diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c index 067468da..08420b82 100644 --- a/gui/simple-greeter/gdm-user-chooser-widget.c +++ b/gui/simple-greeter/gdm-user-chooser-widget.c @@ -51,7 +51,7 @@ enum { #define GDM_USER_CHOOSER_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_USER_CHOOSER_WIDGET, GdmUserChooserWidgetPrivate)) -#define ICON_SIZE 96 +#define MAX_ICON_SIZE 128 struct GdmUserChooserWidgetPrivate { @@ -83,6 +83,45 @@ static void gdm_user_chooser_widget_finalize (GObject * G_DEFINE_TYPE (GdmUserChooserWidget, gdm_user_chooser_widget, GDM_TYPE_CHOOSER_WIDGET) +static int +get_font_height_for_widget (GtkWidget *widget) +{ + PangoFontMetrics *metrics; + PangoContext *context; + int ascent; + int descent; + int height; + + gtk_widget_ensure_style (widget); + context = gtk_widget_get_pango_context (widget); + metrics = pango_context_get_metrics (context, + widget->style->font_desc, + pango_context_get_language (context)); + + ascent = pango_font_metrics_get_ascent (metrics); + descent = pango_font_metrics_get_descent (metrics); + height = PANGO_PIXELS (ascent + descent); + pango_font_metrics_unref (metrics); + return height; +} + +static int +get_icon_height_for_widget (GtkWidget *widget) +{ + int font_height; + int height; + + font_height = get_font_height_for_widget (widget); + height = 3 * font_height; + if (height > MAX_ICON_SIZE) { + height = MAX_ICON_SIZE; + } + + g_debug ("GdmUserChooserWidget: font height %d; using icon size %d", font_height, height); + + return height; +} + static void add_user_other (GdmUserChooserWidget *widget) { @@ -295,12 +334,14 @@ add_user (GdmUserChooserWidget *widget, GdkPixbuf *pixbuf; char *tooltip; gboolean is_logged_in; + int size; if (!widget->priv->show_normal_users) { return; } - pixbuf = gdm_user_render_icon (user, ICON_SIZE); + size = get_icon_height_for_widget (widget); + pixbuf = gdm_user_render_icon (user, size); if (pixbuf == NULL && widget->priv->stock_person_pixbuf != NULL) { pixbuf = g_object_ref (widget->priv->stock_person_pixbuf); } @@ -537,10 +578,13 @@ static GdkPixbuf * get_stock_person_pixbuf (GdmUserChooserWidget *widget) { GdkPixbuf *pixbuf; + int size; + + size = get_icon_height_for_widget (widget); pixbuf = gtk_icon_theme_load_icon (widget->priv->icon_theme, DEFAULT_USER_ICON, - ICON_SIZE, + size, 0, NULL); @@ -551,10 +595,13 @@ static GdkPixbuf * get_logged_in_pixbuf (GdmUserChooserWidget *widget) { GdkPixbuf *pixbuf; + int size; + + size = get_icon_height_for_widget (widget); pixbuf = gtk_icon_theme_load_icon (widget->priv->icon_theme, "emblem-default", - ICON_SIZE / 3, + size / 3, 0, NULL); |