diff options
Diffstat (limited to 'src/xftrender.c')
-rw-r--r-- | src/xftrender.c | 83 |
1 files changed, 49 insertions, 34 deletions
diff --git a/src/xftrender.c b/src/xftrender.c index 227ae7e..aad5431 100644 --- a/src/xftrender.c +++ b/src/xftrender.c @@ -164,6 +164,49 @@ bail1: _XftFontManageMemory (dpy, pub); } +/* + * Dispatch glyph drawing to the correct XRenderCompositeText function + */ +static void +_XftCompositeText (Display *dpy, + int op, + Picture src, + Picture dst, + XRenderPictFormat *format, + int srcx, + int srcy, + int dstx, + int dsty, + int eltwidth, + XGlyphElt8 *elts, + int nelt) +{ + if (nelt == 0) + return; + + switch (eltwidth) { + case 1: + default: + XRenderCompositeText8 (dpy, op, + src, dst, format, + srcx, srcy, dstx, dsty, + (XGlyphElt8*)elts, nelt); + break; + case 2: + XRenderCompositeText16(dpy, op, + src, dst, format, + srcx, srcy, dstx, dsty, + (XGlyphElt16*)elts, nelt); + break; + case 4: + XRenderCompositeText32(dpy, op, + src, dst, format, + srcx, srcy, dstx, dsty, + (XGlyphElt32*)elts, nelt); + break; + } +} + _X_EXPORT void XftGlyphSpecRender (Display *dpy, int op, @@ -345,23 +388,9 @@ XftGlyphSpecRender (Display *dpy, elts[nelt].nchars = n; nelt++; } - switch (width) { - case 1: - XRenderCompositeText8 (dpy, op, src, dst, font->format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - elts, nelt); - break; - case 2: - XRenderCompositeText16 (dpy, op, src, dst, font->format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - (XGlyphElt16 *) elts, nelt); - break; - case 4: - XRenderCompositeText32 (dpy, op, src, dst, font->format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - (XGlyphElt32 *) elts, nelt); - break; - } + _XftCompositeText(dpy, op, src, dst, font->format, + srcx, srcy, glyphs[0].x, glyphs[0].y, + width, elts, nelt); if (elts != elts_local) free (elts); @@ -638,23 +667,9 @@ XftGlyphFontSpecRender (Display *dpy, elts[nelt].nchars = n; nelt++; } - switch (width) { - case 1: - XRenderCompositeText8 (dpy, op, src, dst, format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - elts, nelt); - break; - case 2: - XRenderCompositeText16 (dpy, op, src, dst, format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - (XGlyphElt16 *) elts, nelt); - break; - case 4: - XRenderCompositeText32 (dpy, op, src, dst, format, - srcx, srcy, glyphs[0].x, glyphs[0].y, - (XGlyphElt32 *) elts, nelt); - break; - } + _XftCompositeText(dpy, op, src, dst, format, + srcx, srcy, glyphs[0].x, glyphs[0].y, + width, elts, nelt); if (elts != elts_local) free (elts); |