* vim:ts=4:sw=4:expandtab
*
* i3 - an improved dynamic tiling window manager
- * © 2009-2011 Michael Stapelberg and contributors (see also: LICENSE)
+ * © 2009-2013 Michael Stapelberg and contributors (see also: LICENSE)
*
*/
#include <assert.h>
static bool load_pango_font(i3Font *font, const char *desc) {
/* Load the font description */
font->specific.pango_desc = pango_font_description_from_string(desc);
- if (!font->specific.pango_desc)
- {
+ if (!font->specific.pango_desc) {
ELOG("Could not open font %s with Pango, fallback to X font.\n", desc);
return false;
}
- LOG("Using Pango font %s, size %d",
+ LOG("Using Pango font %s, size %d\n",
pango_font_description_get_family(font->specific.pango_desc),
- pango_font_description_get_size(font->specific.pango_desc)
+ pango_font_description_get_size(font->specific.pango_desc) / PANGO_SCALE
);
/* We cache root_visual_type here, since you must call
root_visual_type, x + max_width, y + savedFont->height);
cairo_t *cr = cairo_create(surface);
PangoLayout *layout = pango_cairo_create_layout(cr);
+ gint height;
+
pango_layout_set_font_description(layout, savedFont->specific.pango_desc);
pango_layout_set_width(layout, max_width * PANGO_SCALE);
pango_layout_set_wrap(layout, PANGO_WRAP_CHAR);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
+ pango_layout_set_text(layout, text, text_len);
+
/* Do the drawing */
cairo_set_source_rgb(cr, pango_font_red, pango_font_green, pango_font_blue);
- cairo_move_to(cr, x, y);
- pango_layout_set_text(layout, text, text_len);
pango_cairo_update_layout(cr, layout);
+ pango_layout_get_pixel_size(layout, NULL, &height);
+ cairo_move_to(cr, x, y - (height - savedFont->height));
pango_cairo_show_layout(cr, layout);
/* Free resources */
#if PANGO_SUPPORT
/* Try to load a pango font if specified */
- if (strlen(pattern) > strlen("xft:") && !strncmp(pattern, "xft:", strlen("xft:"))) {
- pattern += strlen("xft:");
- if (load_pango_font(&font, pattern))
+ if (strlen(pattern) > strlen("pango:") && !strncmp(pattern, "pango:", strlen("pango:"))) {
+ const char *font_pattern = pattern + strlen("pango:");
+ if (load_pango_font(&font, font_pattern)) {
+ font.pattern = sstrdup(pattern);
+ return font;
+ }
+ } else if (strlen(pattern) > strlen("xft:") && !strncmp(pattern, "xft:", strlen("xft:"))) {
+ const char *font_pattern = pattern + strlen("xft:");
+ if (load_pango_font(&font, font_pattern)) {
+ font.pattern = sstrdup(pattern);
return font;
+ }
}
#endif
}
}
- LOG("Using X font %s", pattern);
+ font.pattern = sstrdup(pattern);
+ LOG("Using X font %s\n", pattern);
/* Get information (height/name) for this font */
if (!(font.specific.xcb.info = xcb_query_font_reply(conn, info_cookie, NULL)))
*
*/
void free_font(void) {
+ free(savedFont->pattern);
switch (savedFont->type) {
case FONT_TYPE_NONE:
/* Nothing to do */