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 }