1 #include <u.h> 2 #include <libc.h> 3 #include <libg.h> 4 #include <frame.h> 5 6 void 7 _frredraw(Frame *f, Point pt) 8 { 9 Frbox *b; 10 int nb; 11 for(nb=0,b=f->box; nb<f->nbox; nb++, b++){ 12 _frcklinewrap(f, &pt, b); 13 if(b->nrune >= 0) 14 string(f->b, pt, f->font, (char *)b->ptr, S); 15 pt.x += b->wid; 16 } 17 } 18 19 Point 20 _frdraw(Frame *f, Point pt) 21 { 22 Frbox *b; 23 int nb, n; 24 25 for(b=f->box,nb=0; nb<f->nbox; nb++, b++){ 26 _frcklinewrap0(f, &pt, b); 27 if(pt.y == f->r.max.y){ 28 f->nchars -= _frstrlen(f, nb); 29 _frdelbox(f, nb, f->nbox-1); 30 break; 31 } 32 if(b->nrune > 0){ 33 n = _frcanfit(f, pt, b); 34 if(n == 0) 35 berror("draw: _frcanfit==0"); 36 if(n != b->nrune){ 37 _frsplitbox(f, nb, n); 38 b = &f->box[nb]; 39 } 40 pt.x += b->wid; 41 }else{ 42 if(b->bc == '\n') 43 pt.x = f->left, pt.y+=f->font->height; 44 else 45 pt.x += _frnewwid(f, pt, b); 46 } 47 } 48 return pt; 49 } 50 int 51 _frstrlen(Frame *f, int nb) 52 { 53 int n; 54 55 for(n=0; nb<f->nbox; nb++) 56 n += NRUNE(&f->box[nb]); 57 return n; 58 } 59