diff options
| author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-10 01:20:24 +0100 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-01-10 01:20:24 +0100 |
| commit | f4550c4d6ae277a5ee96fac110fdd306b3e3ac40 (patch) | |
| tree | 691ee380fda31f6ff551f160964a2ad7a4cdbb63 | |
| parent | a872d5241e19adb48126578f66103a334843c4e8 (diff) | |
| parent | aa8f8d866b54d5fd396d146e4f95b3c003d37602 (diff) | |
| download | plan9front-f4550c4d6ae277a5ee96fac110fdd306b3e3ac40.tar.xz | |
merge
| -rw-r--r-- | sys/src/libdraw/string.c | 19 | ||||
| -rw-r--r-- | sys/src/libdraw/stringwidth.c | 20 |
2 files changed, 19 insertions, 20 deletions
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; |
