diff options
Diffstat (limited to 'src/globals.c')
-rw-r--r-- | src/globals.c | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/src/globals.c b/src/globals.c index 8824484..fda69bf 100644 --- a/src/globals.c +++ b/src/globals.c @@ -280,7 +280,8 @@ init_globals (void) /* Wrapper font functions to support Xft */ void -rp_draw_string (rp_screen *s, Drawable d, int style, int x, int y, char *string, int length) +rp_draw_string (rp_screen *s, Drawable d, int style, int x, int y, + char *string, int length) { if (length < 0) length = strlen (string); @@ -291,22 +292,37 @@ rp_draw_string (rp_screen *s, Drawable d, int style, int x, int y, char *string, XftDraw *draw; draw = XftDrawCreate (dpy, d, DefaultVisual (dpy, s->screen_num), DefaultColormap (dpy, s->screen_num)); - if (draw) - { - XftDrawString8 (draw, style == STYLE_NORMAL ? &s->xft_fg_color:&s->xft_bg_color, s->xft_font, x, y, (FcChar8*) string, length); - XftDrawDestroy (draw); - } + if (!draw) + { + PRINT_ERROR (("Failed to allocate XftDraw object\n")); + return; + } + + if (defaults.utf8_locale) + { + XftDrawStringUtf8 (draw, style == STYLE_NORMAL ? &s->xft_fg_color : + &s->xft_bg_color, s->xft_font, x, y, + (FcChar8*) string, length); + } else - PRINT_ERROR(("Failed to allocate XftDraw object\n")); + { + XftDrawString8 (draw, style == STYLE_NORMAL ? &s->xft_fg_color : + &s->xft_bg_color, s->xft_font, x, y, + (FcChar8*) string, length); + } + XftDrawDestroy (draw); } else + PRINT_ERROR (("No Xft font available.\n")); +#else + XmbDrawString (dpy, d, defaults.font, style == STYLE_NORMAL ? s->normal_gc : + s->inverse_gc, x, y, string, length); #endif - XmbDrawString (dpy, d, defaults.font, style == STYLE_NORMAL ? s->normal_gc:s->inverse_gc, x, y, string, length); } int #ifdef USE_XFT_FONT -rp_text_width (rp_screen *s, XFontSet font, char *string, int count) +rp_text_width (rp_screen *s, XFontSet font UNUSED, char *string, int count) #else rp_text_width (rp_screen *s UNUSED, XFontSet font, char *string, int count) #endif @@ -318,11 +334,16 @@ rp_text_width (rp_screen *s UNUSED, XFontSet font, char *string, int count) if (s->xft_font) { XGlyphInfo extents; - XftTextExtents8 (dpy, s->xft_font, (FcChar8*) string, count, &extents); + if (defaults.utf8_locale) + XftTextExtentsUtf8 (dpy, s->xft_font, (FcChar8*) string, count, &extents); + else + XftTextExtents8 (dpy, s->xft_font, (FcChar8*) string, count, &extents); return extents.xOff; } - else + PRINT_ERROR (("No Xft font available.\n")); + return 0; +#else + return XmbTextEscapement (font, string, count); #endif - return XmbTextEscapement (font, string, count); } |