[Xfce4-commits] <xfce4-xkb-plugin:master> Scale layout label text to the size of the button

Igor Slepchin noreply at xfce.org
Wed Mar 20 18:48:03 CET 2013


Updating branch refs/heads/master
         to e0fe4255033fab3615006ca23358bfbb7dba1604 (commit)
       from b8861cade0f00d2443358a43af8826b170673175 (commit)

commit e0fe4255033fab3615006ca23358bfbb7dba1604
Author: Igor Slepchin <igor.slepchin at 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
 


More information about the Xfce4-commits mailing list