frdraw.c - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       frdraw.c (1276B)
       ---
            1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
            2 #include <u.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->a.ptr, S^D);
           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     for(b=f->box,nb=0; nb<f->nbox; nb++, b++){
           25         _frcklinewrap0(f, &pt, b);
           26         if(pt.y == f->r.max.y){
           27             f->nchars -= _frstrlen(f, nb);
           28             _frdelbox(f, nb, f->nbox-1);
           29             break;
           30         }
           31         if(b->nrune > 0){
           32             n = _frcanfit(f, pt, b);
           33             if(n == 0)
           34                 berror("draw: _frcanfit==0");
           35             if(n != b->nrune){
           36                 _frsplitbox(f, nb, n);
           37                 b = &f->box[nb];
           38             }
           39             pt.x += b->wid;
           40         }else{
           41             if(b->a.b.bc == '\n')
           42                 pt.x = f->left, pt.y+=f->fheight;
           43             else
           44                 pt.x += _frnewwid(f, pt, b);
           45         }
           46     }
           47     return pt;
           48 }
           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 }