Blame


1 76193d7c 2003-09-30 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <libc.h>
3 76193d7c 2003-09-30 devnull #include <draw.h>
4 76193d7c 2003-09-30 devnull
5 76193d7c 2003-09-30 devnull Point
6 76193d7c 2003-09-30 devnull Pt(int x, int y)
7 76193d7c 2003-09-30 devnull {
8 76193d7c 2003-09-30 devnull Point p;
9 76193d7c 2003-09-30 devnull
10 76193d7c 2003-09-30 devnull p.x = x;
11 76193d7c 2003-09-30 devnull p.y = y;
12 76193d7c 2003-09-30 devnull return p;
13 76193d7c 2003-09-30 devnull }
14 76193d7c 2003-09-30 devnull
15 76193d7c 2003-09-30 devnull Rectangle
16 76193d7c 2003-09-30 devnull Rect(int x, int y, int bx, int by)
17 76193d7c 2003-09-30 devnull {
18 76193d7c 2003-09-30 devnull Rectangle r;
19 76193d7c 2003-09-30 devnull
20 76193d7c 2003-09-30 devnull r.min.x = x;
21 76193d7c 2003-09-30 devnull r.min.y = y;
22 76193d7c 2003-09-30 devnull r.max.x = bx;
23 76193d7c 2003-09-30 devnull r.max.y = by;
24 76193d7c 2003-09-30 devnull return r;
25 76193d7c 2003-09-30 devnull }
26 76193d7c 2003-09-30 devnull
27 76193d7c 2003-09-30 devnull Rectangle
28 76193d7c 2003-09-30 devnull Rpt(Point min, Point max)
29 76193d7c 2003-09-30 devnull {
30 76193d7c 2003-09-30 devnull Rectangle r;
31 76193d7c 2003-09-30 devnull
32 76193d7c 2003-09-30 devnull r.min = min;
33 76193d7c 2003-09-30 devnull r.max = max;
34 76193d7c 2003-09-30 devnull return r;
35 76193d7c 2003-09-30 devnull }
36 76193d7c 2003-09-30 devnull
37 76193d7c 2003-09-30 devnull Point
38 76193d7c 2003-09-30 devnull addpt(Point a, Point b)
39 76193d7c 2003-09-30 devnull {
40 76193d7c 2003-09-30 devnull a.x += b.x;
41 76193d7c 2003-09-30 devnull a.y += b.y;
42 76193d7c 2003-09-30 devnull return a;
43 76193d7c 2003-09-30 devnull }
44 76193d7c 2003-09-30 devnull
45 76193d7c 2003-09-30 devnull Point
46 76193d7c 2003-09-30 devnull subpt(Point a, Point b)
47 76193d7c 2003-09-30 devnull {
48 76193d7c 2003-09-30 devnull a.x -= b.x;
49 76193d7c 2003-09-30 devnull a.y -= b.y;
50 76193d7c 2003-09-30 devnull return a;
51 76193d7c 2003-09-30 devnull }
52 76193d7c 2003-09-30 devnull
53 76193d7c 2003-09-30 devnull Rectangle
54 76193d7c 2003-09-30 devnull insetrect(Rectangle r, int n)
55 76193d7c 2003-09-30 devnull {
56 76193d7c 2003-09-30 devnull r.min.x += n;
57 76193d7c 2003-09-30 devnull r.min.y += n;
58 76193d7c 2003-09-30 devnull r.max.x -= n;
59 76193d7c 2003-09-30 devnull r.max.y -= n;
60 76193d7c 2003-09-30 devnull return r;
61 76193d7c 2003-09-30 devnull }
62 76193d7c 2003-09-30 devnull
63 76193d7c 2003-09-30 devnull Point
64 76193d7c 2003-09-30 devnull divpt(Point a, int b)
65 76193d7c 2003-09-30 devnull {
66 76193d7c 2003-09-30 devnull a.x /= b;
67 76193d7c 2003-09-30 devnull a.y /= b;
68 76193d7c 2003-09-30 devnull return a;
69 76193d7c 2003-09-30 devnull }
70 76193d7c 2003-09-30 devnull
71 76193d7c 2003-09-30 devnull Point
72 76193d7c 2003-09-30 devnull mulpt(Point a, int b)
73 76193d7c 2003-09-30 devnull {
74 76193d7c 2003-09-30 devnull a.x *= b;
75 76193d7c 2003-09-30 devnull a.y *= b;
76 76193d7c 2003-09-30 devnull return a;
77 76193d7c 2003-09-30 devnull }
78 76193d7c 2003-09-30 devnull
79 76193d7c 2003-09-30 devnull Rectangle
80 76193d7c 2003-09-30 devnull rectsubpt(Rectangle r, Point p)
81 76193d7c 2003-09-30 devnull {
82 76193d7c 2003-09-30 devnull r.min.x -= p.x;
83 76193d7c 2003-09-30 devnull r.min.y -= p.y;
84 76193d7c 2003-09-30 devnull r.max.x -= p.x;
85 76193d7c 2003-09-30 devnull r.max.y -= p.y;
86 76193d7c 2003-09-30 devnull return r;
87 76193d7c 2003-09-30 devnull }
88 76193d7c 2003-09-30 devnull
89 76193d7c 2003-09-30 devnull Rectangle
90 76193d7c 2003-09-30 devnull rectaddpt(Rectangle r, Point p)
91 76193d7c 2003-09-30 devnull {
92 76193d7c 2003-09-30 devnull r.min.x += p.x;
93 76193d7c 2003-09-30 devnull r.min.y += p.y;
94 76193d7c 2003-09-30 devnull r.max.x += p.x;
95 76193d7c 2003-09-30 devnull r.max.y += p.y;
96 76193d7c 2003-09-30 devnull return r;
97 76193d7c 2003-09-30 devnull }
98 76193d7c 2003-09-30 devnull
99 76193d7c 2003-09-30 devnull int
100 76193d7c 2003-09-30 devnull eqpt(Point p, Point q)
101 76193d7c 2003-09-30 devnull {
102 76193d7c 2003-09-30 devnull return p.x==q.x && p.y==q.y;
103 76193d7c 2003-09-30 devnull }
104 76193d7c 2003-09-30 devnull
105 76193d7c 2003-09-30 devnull int
106 76193d7c 2003-09-30 devnull eqrect(Rectangle r, Rectangle s)
107 76193d7c 2003-09-30 devnull {
108 76193d7c 2003-09-30 devnull return r.min.x==s.min.x && r.max.x==s.max.x &&
109 76193d7c 2003-09-30 devnull r.min.y==s.min.y && r.max.y==s.max.y;
110 76193d7c 2003-09-30 devnull }
111 76193d7c 2003-09-30 devnull
112 76193d7c 2003-09-30 devnull int
113 76193d7c 2003-09-30 devnull rectXrect(Rectangle r, Rectangle s)
114 76193d7c 2003-09-30 devnull {
115 76193d7c 2003-09-30 devnull return r.min.x<s.max.x && s.min.x<r.max.x &&
116 76193d7c 2003-09-30 devnull r.min.y<s.max.y && s.min.y<r.max.y;
117 76193d7c 2003-09-30 devnull }
118 76193d7c 2003-09-30 devnull
119 76193d7c 2003-09-30 devnull int
120 76193d7c 2003-09-30 devnull rectinrect(Rectangle r, Rectangle s)
121 76193d7c 2003-09-30 devnull {
122 76193d7c 2003-09-30 devnull return s.min.x<=r.min.x && r.max.x<=s.max.x && s.min.y<=r.min.y && r.max.y<=s.max.y;
123 76193d7c 2003-09-30 devnull }
124 76193d7c 2003-09-30 devnull
125 76193d7c 2003-09-30 devnull int
126 76193d7c 2003-09-30 devnull ptinrect(Point p, Rectangle r)
127 76193d7c 2003-09-30 devnull {
128 76193d7c 2003-09-30 devnull return p.x>=r.min.x && p.x<r.max.x &&
129 76193d7c 2003-09-30 devnull p.y>=r.min.y && p.y<r.max.y;
130 76193d7c 2003-09-30 devnull }
131 76193d7c 2003-09-30 devnull
132 76193d7c 2003-09-30 devnull Rectangle
133 76193d7c 2003-09-30 devnull canonrect(Rectangle r)
134 76193d7c 2003-09-30 devnull {
135 76193d7c 2003-09-30 devnull int t;
136 76193d7c 2003-09-30 devnull if (r.max.x < r.min.x) {
137 76193d7c 2003-09-30 devnull t = r.min.x;
138 76193d7c 2003-09-30 devnull r.min.x = r.max.x;
139 76193d7c 2003-09-30 devnull r.max.x = t;
140 76193d7c 2003-09-30 devnull }
141 76193d7c 2003-09-30 devnull if (r.max.y < r.min.y) {
142 76193d7c 2003-09-30 devnull t = r.min.y;
143 76193d7c 2003-09-30 devnull r.min.y = r.max.y;
144 76193d7c 2003-09-30 devnull r.max.y = t;
145 76193d7c 2003-09-30 devnull }
146 76193d7c 2003-09-30 devnull return r;
147 76193d7c 2003-09-30 devnull }
148 76193d7c 2003-09-30 devnull
149 76193d7c 2003-09-30 devnull void
150 76193d7c 2003-09-30 devnull combinerect(Rectangle *r1, Rectangle r2)
151 76193d7c 2003-09-30 devnull {
152 76193d7c 2003-09-30 devnull if(r1->min.x > r2.min.x)
153 76193d7c 2003-09-30 devnull r1->min.x = r2.min.x;
154 76193d7c 2003-09-30 devnull if(r1->min.y > r2.min.y)
155 76193d7c 2003-09-30 devnull r1->min.y = r2.min.y;
156 76193d7c 2003-09-30 devnull if(r1->max.x < r2.max.x)
157 76193d7c 2003-09-30 devnull r1->max.x = r2.max.x;
158 76193d7c 2003-09-30 devnull if(r1->max.y < r2.max.y)
159 76193d7c 2003-09-30 devnull r1->max.y = r2.max.y;
160 76193d7c 2003-09-30 devnull }
161 76193d7c 2003-09-30 devnull
162 76193d7c 2003-09-30 devnull u32int
163 76193d7c 2003-09-30 devnull drawld2chan[] = {
164 76193d7c 2003-09-30 devnull GREY1,
165 76193d7c 2003-09-30 devnull GREY2,
166 76193d7c 2003-09-30 devnull GREY4,
167 76193d7c 2003-09-30 devnull CMAP8,
168 76193d7c 2003-09-30 devnull };
169 76193d7c 2003-09-30 devnull
170 76193d7c 2003-09-30 devnull u32int
171 76193d7c 2003-09-30 devnull setalpha(u32int color, uchar alpha)
172 76193d7c 2003-09-30 devnull {
173 76193d7c 2003-09-30 devnull int red, green, blue;
174 76193d7c 2003-09-30 devnull
175 76193d7c 2003-09-30 devnull red = (color >> 3*8) & 0xFF;
176 76193d7c 2003-09-30 devnull green = (color >> 2*8) & 0xFF;
177 76193d7c 2003-09-30 devnull blue = (color >> 1*8) & 0xFF;
178 76193d7c 2003-09-30 devnull /* ignore incoming alpha */
179 76193d7c 2003-09-30 devnull red = (red * alpha)/255;
180 76193d7c 2003-09-30 devnull green = (green * alpha)/255;
181 76193d7c 2003-09-30 devnull blue = (blue * alpha)/255;
182 76193d7c 2003-09-30 devnull return (red<<3*8) | (green<<2*8) | (blue<<1*8) | (alpha<<0*8);
183 76193d7c 2003-09-30 devnull }
184 76193d7c 2003-09-30 devnull
185 76193d7c 2003-09-30 devnull Point ZP;
186 76193d7c 2003-09-30 devnull Rectangle ZR;
187 76193d7c 2003-09-30 devnull int
188 76193d7c 2003-09-30 devnull Rfmt(Fmt *f)
189 76193d7c 2003-09-30 devnull {
190 76193d7c 2003-09-30 devnull Rectangle r;
191 76193d7c 2003-09-30 devnull
192 76193d7c 2003-09-30 devnull r = va_arg(f->args, Rectangle);
193 76193d7c 2003-09-30 devnull return fmtprint(f, "%P %P", r.min, r.max);
194 76193d7c 2003-09-30 devnull }
195 76193d7c 2003-09-30 devnull
196 76193d7c 2003-09-30 devnull int
197 76193d7c 2003-09-30 devnull Pfmt(Fmt *f)
198 76193d7c 2003-09-30 devnull {
199 76193d7c 2003-09-30 devnull Point p;
200 76193d7c 2003-09-30 devnull
201 76193d7c 2003-09-30 devnull p = va_arg(f->args, Point);
202 76193d7c 2003-09-30 devnull return fmtprint(f, "[%d %d]", p.x, p.y);
203 76193d7c 2003-09-30 devnull }