diff options
author | rsc <devnull@localhost> | 2003-09-30 17:47:43 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2003-09-30 17:47:43 +0000 |
commit | b5990708483a1fa452b3d4b6ed2bfa998deeeb39 (patch) | |
tree | 9d2413286307f7e29a1906ebe4d1b59477ff886d /src/libframe/frinit.c | |
parent | 76193d7cb0457807b2f0b95f909ab5de19480cd7 (diff) | |
download | plan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.tar.gz plan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.tar.bz2 plan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.zip |
Initial import.
Diffstat (limited to 'src/libframe/frinit.c')
-rw-r--r-- | src/libframe/frinit.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/src/libframe/frinit.c b/src/libframe/frinit.c new file mode 100644 index 00000000..c178ede1 --- /dev/null +++ b/src/libframe/frinit.c @@ -0,0 +1,83 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <mouse.h> +#include <frame.h> + +void +frinit(Frame *f, Rectangle r, Font *ft, Image *b, Image *cols[NCOL]) +{ + f->font = ft; + f->display = b->display; + f->maxtab = 8*stringwidth(ft, "0"); + f->nbox = 0; + f->nalloc = 0; + f->nchars = 0; + f->nlines = 0; + f->p0 = 0; + f->p1 = 0; + f->box = 0; + f->lastlinefull = 0; + if(cols != 0) + memmove(f->cols, cols, sizeof f->cols); + frsetrects(f, r, b); + if(f->tick==nil && f->cols[BACK]!=0) + frinittick(f); +} + +void +frinittick(Frame *f) +{ + Image *b; + Font *ft; + + b = f->display->screenimage; + ft = f->font; + if(f->tick) + freeimage(f->tick); + f->tick = allocimage(f->display, Rect(0, 0, FRTICKW, ft->height), b->chan, 0, DWhite); + if(f->tick == nil) + return; + if(f->tickback) + freeimage(f->tickback); + f->tickback = allocimage(f->display, f->tick->r, b->chan, 0, DWhite); + if(f->tickback == 0){ + freeimage(f->tick); + f->tick = 0; + return; + } + /* background color */ + draw(f->tick, f->tick->r, f->cols[BACK], nil, ZP); + /* vertical line */ + draw(f->tick, Rect(FRTICKW/2, 0, FRTICKW/2+1, ft->height), f->display->black, nil, ZP); + /* box on each end */ + draw(f->tick, Rect(0, 0, FRTICKW, FRTICKW), f->cols[TEXT], nil, ZP); + draw(f->tick, Rect(0, ft->height-FRTICKW, FRTICKW, ft->height), f->cols[TEXT], nil, ZP); +} + +void +frsetrects(Frame *f, Rectangle r, Image *b) +{ + f->b = b; + f->entire = r; + f->r = r; + f->r.max.y -= (r.max.y-r.min.y)%f->font->height; + f->maxlines = (r.max.y-r.min.y)/f->font->height; +} + +void +frclear(Frame *f, int freeall) +{ + if(f->nbox) + _frdelbox(f, 0, f->nbox-1); + if(f->box) + free(f->box); + if(freeall){ + freeimage(f->tick); + freeimage(f->tickback); + f->tick = 0; + f->tickback = 0; + } + f->box = 0; + f->ticked = 0; +} |