]> Pileus Git - ~andy/gtk/commitdiff
switch: hardcode a smaller font size for the switch label
authorCosimo Cecchi <cosimoc@gnome.org>
Tue, 22 Mar 2011 18:53:21 +0000 (14:53 -0400)
committerCosimo Cecchi <cosimoc@gnome.org>
Wed, 23 Mar 2011 14:00:01 +0000 (10:00 -0400)
This should not really be done here, but we can't override font size
from the theme just yet.

https://bugzilla.gnome.org/show_bug.cgi?id=645458

gtk/gtkswitch.c

index b33a16825c1c6ba96f6a8b9c9ab5a85540936bfd..9b831c70c81100b8a0a5a7ef661843caab019e2b 100644 (file)
@@ -49,6 +49,7 @@
 #include "gtkwidget.h"
 #include "gtkmarshalers.h"
 
+#include <math.h>
 
 #define DEFAULT_SLIDER_WIDTH    (36)
 #define DEFAULT_SLIDER_HEIGHT   (22)
@@ -537,12 +538,15 @@ gtk_switch_draw (GtkWidget *widget,
   GtkStyleContext *context;
   GdkRectangle handle;
   PangoLayout *layout;
+  PangoFontDescription *desc;
+  const PangoFontDescription *style_desc;
   PangoRectangle rect;
   gint label_x, label_y;
   GtkStateFlags state;
   GtkBorder padding;
   gint focus_width, focus_pad;
   gint x, y, width, height;
+  gint font_size, style_font_size;
 
   gtk_widget_style_get (widget,
                         "focus-line-width", &focus_width,
@@ -599,6 +603,21 @@ gtk_switch_draw (GtkWidget *widget,
    * the state
    */
   layout = gtk_widget_create_pango_layout (widget, C_("switch", "ON"));
+
+  /* FIXME: this should be really done in the theme, but overriding font size
+   * from it doesn't currently work. So we have to hardcode this here and
+   * below for the "OFF" label.
+   */
+  desc = pango_font_description_new ();
+
+  style_desc = gtk_style_context_get_font (context, state);
+  style_font_size = pango_font_description_get_size (style_desc);
+  font_size = MAX (style_font_size - 1 * PANGO_SCALE, ceil (style_font_size * PANGO_SCALE_SMALL));
+
+  pango_font_description_set_size (desc, font_size);
+
+  pango_layout_set_font_description (layout, desc);
+
   pango_layout_get_extents (layout, NULL, &rect);
   pango_extents_to_pixels (&rect, NULL);
 
@@ -613,6 +632,8 @@ gtk_switch_draw (GtkWidget *widget,
    * glyphs then use WHITE CIRCLE (U+25CB) as the text for the state
    */
   layout = gtk_widget_create_pango_layout (widget, C_("switch", "OFF"));
+  pango_layout_set_font_description (layout, desc);
+
   pango_layout_get_extents (layout, NULL, &rect);
   pango_extents_to_pixels (&rect, NULL);
 
@@ -634,6 +655,8 @@ gtk_switch_draw (GtkWidget *widget,
 
   gtk_switch_paint_handle (widget, cr, &handle);
 
+  pango_font_description_free (desc);
+
   return FALSE;
 }