1 #define XUDISBUF_SIZE (1024u)
2 static XChar2b xDrawUtf8ImageStringBuf
[XUDISBUF_SIZE
];
4 static void xDrawUtf8ImageString (int x
, int y
, int fontset
, Drawable dwb
, const char *str
, int bytelen
) {
7 bytelen
= (int)strlen(str
);
11 //y += dc.font[fontset].ascent;
13 #ifdef X11_USE_FUCKED_FONTSETS
14 XFontSet xfontset
= dc
.font
[fontset
].set
;
15 Xutf8DrawImageString(xw
.dpy
, xw
.pictab
, xfontset
, dc
.gc
, x
, y
, str
, bytelen
);
19 XChar2b
*c2bptr
= xDrawUtf8ImageStringBuf
;
21 utfcp
= sxed_utf8d_consume(utfcp
, *str
++);
22 if (sxed_utf8_valid_cp(utfcp
)) {
23 if (!sxed_utf8_printable_cp(utfcp
)) utfcp
= SXED_UTF8_REPLACEMENT_CP
;
24 c2bptr
->byte1
= (uint8_t)(utfcp
>>8);
25 c2bptr
->byte2
= (uint8_t)utfcp
;
27 if (++bpos
== XUDISBUF_SIZE
) {
28 c2bptr
= xDrawUtf8ImageStringBuf
;
29 if (dc
.gcfid
!= dc
.font
[fontset
].fid
) {
30 XSetFont(xw
.dpy
, dc
.gc
, dc
.font
[fontset
].fid
);
31 dc
.gcfid
= dc
.font
[fontset
].fid
;
33 XDrawImageString16(xw
.dpy
, dwb
, dc
.gc
, x
, y
, c2bptr
, bpos
);
34 x
+= (int)bpos
*dc
.font
[fontset
].width
;
40 c2bptr
= xDrawUtf8ImageStringBuf
;
41 if (dc
.gcfid
!= dc
.font
[fontset
].fid
) {
42 XSetFont(xw
.dpy
, dc
.gc
, dc
.font
[fontset
].fid
);
43 dc
.gcfid
= dc
.font
[fontset
].fid
;
45 XDrawImageString16(xw
.dpy
, dwb
, dc
.gc
, x
, y
, c2bptr
, bpos
);
51 static int xUtf8StringWidth (int fontset
, const char *str
, int bytelen
) {
54 bytelen
= (int)strlen(str
);
56 if (!bytelen
) return 0;
58 #ifdef X11_USE_FUCKED_FONTSETS
59 XFontSet xfontset
= dc
.font
[fontset
].set
;
61 memset(&r
, 0, sizeof(r
));
62 Xutf8TextExtents(xfontset
, str
, bytelen
, &r
, NULL
);
68 XChar2b
*c2bptr
= xDrawUtf8ImageStringBuf
;
70 utfcp
= sxed_utf8d_consume(utfcp
, *str
++);
71 if (sxed_utf8_valid_cp(utfcp
)) {
72 if (!sxed_utf8_printable_cp(utfcp
)) utfcp
= SXED_UTF8_REPLACEMENT_CP
;
73 c2bptr
->byte1
= (uint8_t)(utfcp
>>8);
74 c2bptr
->byte2
= (uint8_t)utfcp
;
76 if (++bpos
== XUDISBUF_SIZE
) {
77 c2bptr
= xDrawUtf8ImageStringBuf
;
78 wdt
+= XTextWidth16(dc
.font
[fontset
].set
, c2bptr
, bpos
);
84 c2bptr
= xDrawUtf8ImageStringBuf
;
85 wdt
+= XTextWidth16(dc
.font
[fontset
].set
, c2bptr
, bpos
);