- GString *text;
- int m, em;
- size_t l;
- gboolean shortened = FALSE;
-
- y = position->y;
- w = position->width;
- h = position->height;
-
- /* accomidate for areas bigger/smaller than Xft thinks the font is tall */
- y -= (2 * (t->font->xftfont->ascent + t->font->xftfont->descent) -
- (t->font->height + h) - 1) / 2;
-
- text = g_string_new(t->string);
- l = g_utf8_strlen(text->str, -1);
- m = font_measure_string(t->font, text->str, t->shadow, t->offset);
- while (l && m > position->width) {
- shortened = TRUE;
- /* remove a character from the middle */
- text = g_string_erase(text, l-- / 2, 1);
- em = ELIPSES_LENGTH(t->font, t->shadow, t->offset);
- /* if the elipses are too large, don't show them at all */
- if (em > position->width)
- shortened = FALSE;
- m = font_measure_string(t->font, text->str, t->shadow, t->offset) + em;
- }
- if (shortened) {
- text = g_string_insert(text, (l + 1) / 2, ELIPSES);
- l += 3;
+ gint mw;
+ PangoRectangle rect;
+ gchar *text;
+ PangoAttrList* attrs = NULL;
+
+ /* center the text vertically
+ We do this centering based on the 'baseline' since different fonts have
+ different top edges. It looks bad when the whole string is moved when 1
+ character from a non-default language is included in the string */
+ y = area->y +
+ font_calculate_baseline(t->font, area->height);
+
+ /* the +2 and -4 leave a small blank edge on the sides */
+ x = area->x + 2;
+ w = area->width - 4;
+ h = area->height;
+
+ /* * * set up the layout * * */
+
+ text = g_strdup(t->string);
+
+ if (t->shortcut) {
+ gchar *i;
+ gchar *lowertext;
+
+ lowertext = g_utf8_strdown(text, -1);
+ i = g_utf8_strchr(lowertext, -1, t->shortcut);
+ if (i != NULL) {
+ PangoAttribute *a;
+
+ a = pango_attr_underline_new(PANGO_UNDERLINE_LOW);
+ a->start_index = i - lowertext;
+ a->end_index = i - lowertext +
+ g_unichar_to_utf8(t->shortcut, NULL);
+
+ attrs = pango_attr_list_new();
+ pango_attr_list_insert(attrs, a);
+ }
+ g_free(lowertext);