all repos — openbox @ 138d3e38d88dbcb1426bd1eb0cd8c43dd01777ad

openbox fork - make it a bit more like ryudo

add shortcuts for text rendering. it underlines the first character in the string that matches the shortcut
Dana Jansens danakj@orodu.net
commit

138d3e38d88dbcb1426bd1eb0cd8c43dd01777ad

parent

d91c67bf93fd8ca024c32d38b00377a6fef606c9

2 files changed, 38 insertions(+), 1 deletions(-)

jump to
M render/font.crender/font.c

@@ -175,6 +175,8 @@ gint x,y,w,h;

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 @@ x = area->x + 2;

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 @@ c.color.green = t->shadow_color->g | t->shadow_color->g << 8;

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),

@@ -225,6 +258,9 @@ c.color.green = t->color->g | t->color->g << 8;

c.color.blue = t->color->b | t->color->b << 8; 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 */
M render/render.hrender/render.h

@@ -126,6 +126,7 @@ gint shadow_offset_x;

gint shadow_offset_y; RrColor *shadow_color; gchar shadow_alpha; + gunichar shortcut; /*!< Underline this character */ }; struct _RrPixmapMask {