summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2021-01-28 20:05:13 +1100
committerThomas E. Dickey <dickey@invisible-island.net>2022-07-09 10:12:26 -0400
commit2cbb9597e0b10d87fa9fc506910f69b9199320f0 (patch)
treed4610920c76df7be1dc003487e45589b5ff798c4
parentcac2fd528dd0ba9ed2308f6dda4598993c51cf64 (diff)
downloadxorg-lib-libXft-2cbb9597e0b10d87fa9fc506910f69b9199320f0.tar.gz
Introduce a _XftCompositeText helper function
Dispatch to XRenderCompositeText{8,16,32} based off the given width. Signed-off-by: Maxime Coste <mawww@kakoune.org> Signed-off-by: Thomas E. Dickey <dickey@invisible-island.net>
-rw-r--r--src/xftrender.c83
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);