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 cc954796 2012-11-26 rsc if(f->cols[BACK] == nil || f->display == nil)
35 cc954796 2012-11-26 rsc return;
36 cc954796 2012-11-26 rsc f->tickscale = scalesize(f->display, 1);
37 b5990708 2003-09-30 devnull b = f->display->screenimage;
38 b5990708 2003-09-30 devnull ft = f->font;
39 b5990708 2003-09-30 devnull if(f->tick)
40 b5990708 2003-09-30 devnull freeimage(f->tick);
41 cc954796 2012-11-26 rsc f->tick = allocimage(f->display, Rect(0, 0, f->tickscale*FRTICKW, ft->height), b->chan, 0, DWhite);
42 b5990708 2003-09-30 devnull if(f->tick == nil)
43 b5990708 2003-09-30 devnull return;
44 b5990708 2003-09-30 devnull if(f->tickback)
45 b5990708 2003-09-30 devnull freeimage(f->tickback);
46 b5990708 2003-09-30 devnull f->tickback = allocimage(f->display, f->tick->r, b->chan, 0, DWhite);
47 b5990708 2003-09-30 devnull if(f->tickback == 0){
48 b5990708 2003-09-30 devnull freeimage(f->tick);
49 b5990708 2003-09-30 devnull f->tick = 0;
50 b5990708 2003-09-30 devnull return;
51 b5990708 2003-09-30 devnull }
52 b5990708 2003-09-30 devnull /* background color */
53 b5990708 2003-09-30 devnull draw(f->tick, f->tick->r, f->cols[BACK], nil, ZP);
54 b5990708 2003-09-30 devnull /* vertical line */
55 cc954796 2012-11-26 rsc draw(f->tick, Rect(f->tickscale*(FRTICKW/2), 0, f->tickscale*(FRTICKW/2+1), ft->height), f->display->black, nil, ZP);
56 b5990708 2003-09-30 devnull /* box on each end */
57 cc954796 2012-11-26 rsc draw(f->tick, Rect(0, 0, f->tickscale*FRTICKW, f->tickscale*FRTICKW), f->cols[TEXT], nil, ZP);
58 cc954796 2012-11-26 rsc draw(f->tick, Rect(0, ft->height-f->tickscale*FRTICKW, f->tickscale*FRTICKW, ft->height), f->cols[TEXT], nil, ZP);
59 b5990708 2003-09-30 devnull }
60 b5990708 2003-09-30 devnull
61 b5990708 2003-09-30 devnull void
62 b5990708 2003-09-30 devnull frsetrects(Frame *f, Rectangle r, Image *b)
63 b5990708 2003-09-30 devnull {
64 b5990708 2003-09-30 devnull f->b = b;
65 b5990708 2003-09-30 devnull f->entire = r;
66 b5990708 2003-09-30 devnull f->r = r;
67 b5990708 2003-09-30 devnull f->r.max.y -= (r.max.y-r.min.y)%f->font->height;
68 b5990708 2003-09-30 devnull f->maxlines = (r.max.y-r.min.y)/f->font->height;
69 b5990708 2003-09-30 devnull }
70 b5990708 2003-09-30 devnull
71 b5990708 2003-09-30 devnull void
72 b5990708 2003-09-30 devnull frclear(Frame *f, int freeall)
73 b5990708 2003-09-30 devnull {
74 b5990708 2003-09-30 devnull if(f->nbox)
75 b5990708 2003-09-30 devnull _frdelbox(f, 0, f->nbox-1);
76 b5990708 2003-09-30 devnull if(f->box)
77 b5990708 2003-09-30 devnull free(f->box);
78 b5990708 2003-09-30 devnull if(freeall){
79 b5990708 2003-09-30 devnull freeimage(f->tick);
80 b5990708 2003-09-30 devnull freeimage(f->tickback);
81 b5990708 2003-09-30 devnull f->tick = 0;
82 b5990708 2003-09-30 devnull f->tickback = 0;
83 b5990708 2003-09-30 devnull }
84 b5990708 2003-09-30 devnull f->box = 0;
85 b5990708 2003-09-30 devnull f->ticked = 0;
86 b5990708 2003-09-30 devnull }