Blame


1 b5990708 2003-09-30 devnull #include <u.h>
2 b5990708 2003-09-30 devnull #include <libc.h>
3 b5990708 2003-09-30 devnull #include <draw.h>
4 b5990708 2003-09-30 devnull #include <mouse.h>
5 b5990708 2003-09-30 devnull #include <frame.h>
6 b5990708 2003-09-30 devnull
7 b5990708 2003-09-30 devnull void
8 b5990708 2003-09-30 devnull frinit(Frame *f, Rectangle r, Font *ft, Image *b, Image *cols[NCOL])
9 b5990708 2003-09-30 devnull {
10 b5990708 2003-09-30 devnull f->font = ft;
11 b5990708 2003-09-30 devnull f->display = b->display;
12 b5990708 2003-09-30 devnull f->maxtab = 8*stringwidth(ft, "0");
13 b5990708 2003-09-30 devnull f->nbox = 0;
14 b5990708 2003-09-30 devnull f->nalloc = 0;
15 b5990708 2003-09-30 devnull f->nchars = 0;
16 b5990708 2003-09-30 devnull f->nlines = 0;
17 b5990708 2003-09-30 devnull f->p0 = 0;
18 b5990708 2003-09-30 devnull f->p1 = 0;
19 b5990708 2003-09-30 devnull f->box = 0;
20 b5990708 2003-09-30 devnull f->lastlinefull = 0;
21 b5990708 2003-09-30 devnull if(cols != 0)
22 b5990708 2003-09-30 devnull memmove(f->cols, cols, sizeof f->cols);
23 b5990708 2003-09-30 devnull frsetrects(f, r, b);
24 b5990708 2003-09-30 devnull if(f->tick==nil && f->cols[BACK]!=0)
25 b5990708 2003-09-30 devnull frinittick(f);
26 b5990708 2003-09-30 devnull }
27 b5990708 2003-09-30 devnull
28 b5990708 2003-09-30 devnull void
29 b5990708 2003-09-30 devnull frinittick(Frame *f)
30 b5990708 2003-09-30 devnull {
31 b5990708 2003-09-30 devnull Image *b;
32 b5990708 2003-09-30 devnull Font *ft;
33 b5990708 2003-09-30 devnull
34 b5990708 2003-09-30 devnull b = f->display->screenimage;
35 b5990708 2003-09-30 devnull ft = f->font;
36 b5990708 2003-09-30 devnull if(f->tick)
37 b5990708 2003-09-30 devnull freeimage(f->tick);
38 b5990708 2003-09-30 devnull f->tick = allocimage(f->display, Rect(0, 0, FRTICKW, ft->height), b->chan, 0, DWhite);
39 b5990708 2003-09-30 devnull if(f->tick == nil)
40 b5990708 2003-09-30 devnull return;
41 b5990708 2003-09-30 devnull if(f->tickback)
42 b5990708 2003-09-30 devnull freeimage(f->tickback);
43 b5990708 2003-09-30 devnull f->tickback = allocimage(f->display, f->tick->r, b->chan, 0, DWhite);
44 b5990708 2003-09-30 devnull if(f->tickback == 0){
45 b5990708 2003-09-30 devnull freeimage(f->tick);
46 b5990708 2003-09-30 devnull f->tick = 0;
47 b5990708 2003-09-30 devnull return;
48 b5990708 2003-09-30 devnull }
49 b5990708 2003-09-30 devnull /* background color */
50 b5990708 2003-09-30 devnull draw(f->tick, f->tick->r, f->cols[BACK], nil, ZP);
51 b5990708 2003-09-30 devnull /* vertical line */
52 b5990708 2003-09-30 devnull draw(f->tick, Rect(FRTICKW/2, 0, FRTICKW/2+1, ft->height), f->display->black, nil, ZP);
53 b5990708 2003-09-30 devnull /* box on each end */
54 b5990708 2003-09-30 devnull draw(f->tick, Rect(0, 0, FRTICKW, FRTICKW), f->cols[TEXT], nil, ZP);
55 b5990708 2003-09-30 devnull draw(f->tick, Rect(0, ft->height-FRTICKW, FRTICKW, ft->height), f->cols[TEXT], nil, ZP);
56 b5990708 2003-09-30 devnull }
57 b5990708 2003-09-30 devnull
58 b5990708 2003-09-30 devnull void
59 b5990708 2003-09-30 devnull frsetrects(Frame *f, Rectangle r, Image *b)
60 b5990708 2003-09-30 devnull {
61 b5990708 2003-09-30 devnull f->b = b;
62 b5990708 2003-09-30 devnull f->entire = r;
63 b5990708 2003-09-30 devnull f->r = r;
64 b5990708 2003-09-30 devnull f->r.max.y -= (r.max.y-r.min.y)%f->font->height;
65 b5990708 2003-09-30 devnull f->maxlines = (r.max.y-r.min.y)/f->font->height;
66 b5990708 2003-09-30 devnull }
67 b5990708 2003-09-30 devnull
68 b5990708 2003-09-30 devnull void
69 b5990708 2003-09-30 devnull frclear(Frame *f, int freeall)
70 b5990708 2003-09-30 devnull {
71 b5990708 2003-09-30 devnull if(f->nbox)
72 b5990708 2003-09-30 devnull _frdelbox(f, 0, f->nbox-1);
73 b5990708 2003-09-30 devnull if(f->box)
74 b5990708 2003-09-30 devnull free(f->box);
75 b5990708 2003-09-30 devnull if(freeall){
76 b5990708 2003-09-30 devnull freeimage(f->tick);
77 b5990708 2003-09-30 devnull freeimage(f->tickback);
78 b5990708 2003-09-30 devnull f->tick = 0;
79 b5990708 2003-09-30 devnull f->tickback = 0;
80 b5990708 2003-09-30 devnull }
81 b5990708 2003-09-30 devnull f->box = 0;
82 b5990708 2003-09-30 devnull f->ticked = 0;
83 b5990708 2003-09-30 devnull }