diff --git a/sys/src/libdraw/string.c b/sys/src/libdraw/string.c index 62e3c3b1a..2dc2a63e7 100644 --- a/sys/src/libdraw/string.c +++ b/sys/src/libdraw/string.c @@ -76,23 +76,25 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i rptr = nil; }else rptr = &r; + subfontname = nil; sf = nil; try = 0; while((*s || *r) && len > 0){ max = Max; if(len < max) max = len; + if(subfontname){ + freesubfont(sf); + if((sf=_getsubfont(f->display, subfontname)) == nil){ + if(f->display->defaultfont == nil || f->display->defaultfont == f) + break; + f = f->display->defaultfont; + } + } if((n = cachechars(f, sptr, rptr, cbuf, max, &wid, &subfontname)) <= 0){ if(subfontname){ if(++try > 10) break; - Nextfont: - freesubfont(sf); - if((sf=_getsubfont(f->display, subfontname)) != nil) - continue; - if(f->display->defaultfont == nil || f->display->defaultfont == f) - break; - f = f->display->defaultfont; continue; } if(*r) @@ -144,9 +146,6 @@ _string(Image *dst, Point pt, Image *src, Point sp, Font *f, char *s, Rune *r, i bgp.x += wid; agefont(f); len -= n; - - if(subfontname) - goto Nextfont; } freesubfont(sf); return pt; diff --git a/sys/src/libdraw/stringwidth.c b/sys/src/libdraw/stringwidth.c index 5fb4acaaa..f0757a095 100644 --- a/sys/src/libdraw/stringwidth.c +++ b/sys/src/libdraw/stringwidth.c @@ -22,6 +22,7 @@ _stringnwidth(Font *f, char *s, Rune *r, int len) rptr = nil; }else rptr = &r; + subfontname = nil; sf = nil; twid = 0; try = 0; @@ -29,17 +30,18 @@ _stringnwidth(Font *f, char *s, Rune *r, int len) max = Max; if(len < max) max = len; + if(subfontname){ + freesubfont(sf); + if((sf=_getsubfont(f->display, subfontname)) == nil){ + if(f->display == nil || f->display->defaultfont == nil || f->display->defaultfont == f) + break; + f = f->display->defaultfont; + } + } if((n = cachechars(f, sptr, rptr, cbuf, max, &wid, &subfontname)) <= 0){ if(subfontname){ if(++try > 10) break; - Nextfont: - freesubfont(sf); - if((sf=_getsubfont(f->display, subfontname)) != nil) - continue; - if(f->display == nil || f->display->defaultfont == nil || f->display->defaultfont == f) - break; - f = f->display->defaultfont; continue; } if(*r) @@ -50,12 +52,10 @@ _stringnwidth(Font *f, char *s, Rune *r, int len) continue; } try = 0; + agefont(f); twid += wid; len -= n; - - if(subfontname) - goto Nextfont; } freesubfont(sf); return twid;