summaryrefslogtreecommitdiff
path: root/src/globals.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/globals.c')
-rw-r--r--src/globals.c45
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);
}