X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=render%2Ffont.c;h=a0e622d55364deac81a5f66f50690127173bc649;hb=138d3e38d88dbcb1426bd1eb0cd8c43dd01777ad;hp=e91925b5090f745984e3cf096b6fc5d6c7adc54a;hpb=3678f8df8a3d2f5fb20d07d9124c3f0b8618ca5d;p=chaz%2Fopenbox diff --git a/render/font.c b/render/font.c index e91925b5..a0e622d5 100644 --- a/render/font.c +++ b/render/font.c @@ -2,7 +2,7 @@ font.c for the Openbox window manager Copyright (c) 2006 Mikael Magnusson - Copyright (c) 2003 Ben Jansens + Copyright (c) 2003-2007 Dana Jansens Copyright (c) 2003 Derek Foreman This program is free software; you can redistribute it and/or modify @@ -175,6 +175,8 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) XftColor c; 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 @@ -188,9 +190,37 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) w = area->width - 4; h = area->height; - pango_layout_set_text(t->font->layout, t->string, -1); + /* * * 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); + } + + pango_layout_set_text(t->font->layout, text, -1); pango_layout_set_width(t->font->layout, w * PANGO_SCALE); + g_free(text); + + /* * * end of setting up the layout * * */ + pango_layout_get_pixel_extents(t->font->layout, NULL, &rect); mw = rect.width; @@ -213,6 +243,9 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) c.color.blue = t->shadow_color->b | t->shadow_color->b << 8; c.color.alpha = 0xffff * t->shadow_alpha / 255; c.pixel = t->shadow_color->pixel; + + pango_layout_set_attributes(t->font->layout, NULL); + /* see below... */ pango_xft_render_layout_line (d, &c, pango_layout_get_line(t->font->layout, 0), @@ -226,6 +259,9 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) c.color.alpha = 0xff | 0xff << 8; /* fully opaque text */ c.pixel = t->color->pixel; + pango_layout_set_attributes(t->font->layout, attrs); + if (attrs != NULL) pango_attr_list_unref(attrs); + /* layout_line() uses y to specify the baseline The line doesn't need to be freed, it's a part of the layout */ pango_xft_render_layout_line