diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/libframe/frinit.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/libframe/frinit.c')
-rwxr-xr-x | sys/src/libframe/frinit.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/sys/src/libframe/frinit.c b/sys/src/libframe/frinit.c new file mode 100755 index 000000000..e0dc41a03 --- /dev/null +++ b/sys/src/libframe/frinit.c @@ -0,0 +1,84 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <thread.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; +} |