Updating branch refs/heads/master to e0fe4255033fab3615006ca23358bfbb7dba1604 (commit) from b8861cade0f00d2443358a43af8826b170673175 (commit)
commit e0fe4255033fab3615006ca23358bfbb7dba1604 Author: Igor Slepchin <igor.slepc...@gmail.com> Date: Tue Mar 19 17:29:54 2013 -0400 Scale layout label text to the size of the button large text size will scale to the max size that fits into the button; medium size is 0.7 of that size; small is 0.475 of the max. The default text label size is now large. panel-plugin/xfce4-xkb-plugin.c | 4 +- panel-plugin/xkb-cairo.c | 102 +++++++++++++++++---------------------- panel-plugin/xkb-cairo.h | 16 +++--- 3 files changed, 55 insertions(+), 67 deletions(-) diff --git a/panel-plugin/xfce4-xkb-plugin.c b/panel-plugin/xfce4-xkb-plugin.c index a485ea5..87770a9 100644 --- a/panel-plugin/xfce4-xkb-plugin.c +++ b/panel-plugin/xfce4-xkb-plugin.c @@ -303,7 +303,7 @@ xkb_load_config (t_xkb *xkb, const gchar *filename) xfce_rc_set_group (rcfile, NULL); xkb->display_type = xfce_rc_read_int_entry (rcfile, "display_type", DISPLAY_TYPE_IMAGE); - xkb->display_textsize = xfce_rc_read_int_entry (rcfile, "display_textsize", DISPLAY_TEXTSIZE_SMALL); + xkb->display_textsize = xfce_rc_read_int_entry (rcfile, "display_textsize", DISPLAY_TEXTSIZE_LARGE); xkb->group_policy = xfce_rc_read_int_entry (rcfile, "group_policy", GROUP_POLICY_PER_APPLICATION); xfce_rc_close (rcfile); @@ -318,7 +318,7 @@ static void xkb_load_default (t_xkb *xkb) { xkb->display_type = DISPLAY_TYPE_IMAGE; - xkb->display_textsize = DISPLAY_TEXTSIZE_SMALL; + xkb->display_textsize = DISPLAY_TEXTSIZE_LARGE; xkb->group_policy = GROUP_POLICY_PER_APPLICATION; } diff --git a/panel-plugin/xkb-cairo.c b/panel-plugin/xkb-cairo.c index ff1f5e9..af598a7 100644 --- a/panel-plugin/xkb-cairo.c +++ b/panel-plugin/xkb-cairo.c @@ -27,7 +27,7 @@ #include "xkb-util.h" #include "xfce4-xkb-plugin.h" -#define XKB_PREFERRED_FONT "Courier New, Courier 10 Pitch, Monospace Bold %dpx" +#define XKB_PREFERRED_FONT "Courier New, Courier 10 Pitch, Monospace Bold" #define xkb_cairo_arc_for_flag(cr, x, y, r, a1, a2) \ xx = layoutx + width - 12 + x; \ @@ -126,29 +126,31 @@ xkb_cairo_draw_flag (cairo_t *cr, void xkb_cairo_draw_label (cairo_t *cr, const gchar *group_name, - gint panel_size, - gint actual_width, - gint actual_height, - gint width, - gint height, - gint variant_markers_count, - gint textsize, - GdkColor fgcolor) + const gint panel_size, + const gint actual_width, + const gint actual_height, + const gint width, + const gint height, + const gint variant_markers_count, + const gint textsize, + const GdkColor fgcolor) { gchar *normalized_group_name; - /* gchar font_str[80]; */ gint pango_width, pango_height; - double layoutx, layouty; + double layoutx, layouty, text_width, text_height; double xx, yy; double scalex, scaley; gint i; - double radius; + double radius, diameter; PangoLayout *layout; PangoFontDescription *desc; g_assert (cr != NULL); + DBG ("actual width/height: %d/%d; markers: %d", + actual_width, actual_height, variant_markers_count); + layout = pango_cairo_create_layout (cr); normalized_group_name = xkb_util_normalize_group_name (group_name); @@ -161,63 +163,53 @@ xkb_cairo_draw_label (cairo_t *cr, } pango_layout_set_text (layout, normalized_group_name, -1); - /* switch (textsize){ */ - /* case DISPLAY_TEXTSIZE_SMALL: */ - /* default: /\* catch misconfiguration *\/ */ - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.475 * panel_size) ); */ - /* break; */ - /* case DISPLAY_TEXTSIZE_MEDIUM: */ - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.700 * panel_size) ); */ - /* break; */ - /* case DISPLAY_TEXTSIZE_LARGE: */ - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(1.000 * panel_size) ); */ - /* break; */ - /* } */ - - /* DBG ("font: %s", font_str); */ - - // desc = pango_font_description_from_string (font_str); - desc = pango_font_description_from_string( "Courier New, Courier 10 Pitch, Monospace Bold" ); + + desc = pango_font_description_from_string ( XKB_PREFERRED_FONT ); pango_layout_set_font_description (layout, desc); pango_font_description_free (desc); gdk_cairo_set_source_color (cr, &fgcolor); pango_layout_get_pixel_size (layout, &pango_width, &pango_height); - - /* layoutx = (int) (actual_width - (pango_width + variant_markers_count * 7)) / 2; */ - /* layouty = (int) (actual_height - pango_height) / 2; */ - - /* layoutx = layouty = 0; */ - - - scalex = (float)actual_width / (pango_width + variant_markers_count * 7); - scaley = (float)actual_height / pango_height; + DBG ("pango_width/height: %d/%d", pango_width, pango_height); switch (textsize){ case DISPLAY_TEXTSIZE_SMALL: default: /* catch misconfiguration */ - scalex *= 0.475; - scaley *= 0.475; - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.475 * panel_size) ); */ + scalex = scaley = 0.475; break; case DISPLAY_TEXTSIZE_MEDIUM: - scalex *= 0.7; - scaley *= 0.7; - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(0.700 * panel_size) ); */ + scalex = scaley = 0.7; break; case DISPLAY_TEXTSIZE_LARGE: - /* g_sprintf (font_str, XKB_PREFERRED_FONT, (int)(1.000 * panel_size) ); */ + scalex = scaley = 1; break; } + DBG ("txt size scale x/y: %.2f/%.2f", scalex, scaley); + + text_height = actual_height * scaley; + scaley = text_height / pango_height; + radius = (text_height < 32) ? 1.2 : 2.5; + diameter = 2 * radius; + + text_width = actual_width * scalex; + if (actual_width - text_width < 3 + variant_markers_count * diameter) + { + text_width = actual_width - 3 - (variant_markers_count) * diameter; + } + else if (textsize == DISPLAY_TEXTSIZE_LARGE) + { + text_width -= 3; + } + + scalex = text_width/pango_width; - pango_width *= scalex; - pango_height *= scaley; - radius = (pango_height < 32) ? 1.5 : 2.5; - layoutx = (actual_width - (pango_width + variant_markers_count * 2*radius)) / 2; - layouty = (actual_height - pango_height) / 2; + layoutx = (actual_width - + (text_width + (variant_markers_count ? 3:0) + + variant_markers_count * diameter)) / 2; + layouty = (actual_height - text_height) / 2; - DBG ("scaled pango_width/height: %d/%d", pango_width, pango_height); + DBG ("text_width/height: %.2f/%.2f", text_width, text_height); DBG ("layout x/y: %.2f/%.2f scale x/y: %.2f/%.2f, radius: %.2f", layoutx, layouty, scalex, scaley, radius); @@ -227,17 +219,13 @@ xkb_cairo_draw_label (cairo_t *cr, pango_cairo_show_layout (cr, layout); cairo_restore (cr); - /* cairo_scale (cr, 1/scalex, 1/scaley); */ for (i = 0; i < variant_markers_count; i++) { cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_width (cr, 1); - /* radius = (panel_size < 32) ? 1.5 : 2.5; */ - /* if (scalex < 1.0) */ - /* radius *= scalex; */ xkb_cairo_arc_for_label (cr, - layoutx + pango_width + 3 + (2*radius * i), - layouty + pango_height - (pango_height / 5), + layoutx + text_width + 3 + (diameter * i), + layouty + text_height - (text_height / 5), radius, 0, 2 * G_PI ); cairo_fill (cr); diff --git a/panel-plugin/xkb-cairo.h b/panel-plugin/xkb-cairo.h index 13b790a..4be2b24 100644 --- a/panel-plugin/xkb-cairo.h +++ b/panel-plugin/xkb-cairo.h @@ -46,14 +46,14 @@ void xkb_cairo_draw_flag (cairo_t *cr, void xkb_cairo_draw_label (cairo_t *cr, const gchar *group_name, - gint panel_size, - gint actual_width, - gint actual_height, - gint width, - gint height, - gint variant_markers_count, - gint textsize, - GdkColor fgcolor); + const gint panel_size, + const gint actual_width, + const gint actual_height, + const gint width, + const gint height, + const gint variant_markers_count, + const gint textsize, + const GdkColor fgcolor); #endif _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits