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.
1 file(s) · +4 −2
additionally, ellipsis_width (which shouldn't change) is made static to avoid re-calculating it on each drw_text() call.
| 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; |
|