drw_text: account for fallback fonts in ellipsis_width 33685b06
additionally, ellipsis_width (which shouldn't change) is made static to
avoid re-calculating it on each drw_text() call.
NRK · 2022-03-28 21:38 1 file(s) · +4 −2
drw.c +4 −2
252 252
drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
253 253
{
254 254
	int i, ty, ellipsis_x = 0;
255 -
	unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len, ellipsis_width;
255 +
	unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
256 256
	XftDraw *d = NULL;
257 257
	Fnt *usedfont, *curfont, *nextfont;
258 258
	int utf8strlen, utf8charlen, render = x || y || w || h;
266 266
	/* keep track of a couple codepoints for which we have no match. */
267 267
	enum { nomatches_len = 64 };
268 268
	static struct { long codepoint[nomatches_len]; unsigned int idx; } nomatches;
269 +
	static unsigned int ellipsis_width = 0;
269 270
270 271
	if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
271 272
		return 0;
283 284
	}
284 285
285 286
	usedfont = drw->fonts;
286 -
	drw_font_getexts(usedfont, "...", 3, &ellipsis_width, NULL);
287 +
	if (!ellipsis_width && render)
288 +
		ellipsis_width = drw_fontset_getwidth(drw, "...");
287 289
	while (1) {
288 290
		ew = ellipsis_len = utf8strlen = 0;
289 291
		utf8str = text;