1 /* Copyright (c) 1994-1996 David Hogan, see README for licence details */
12 unsigned char mask[64];
13 unsigned char fore[64];
16 Cursordata bigarrow = {
19 { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
20 0xFF, 0x0F, 0xFF, 0x0F, 0xFF, 0x1F, 0xFF, 0x3F,
21 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F,
22 0xCF, 0x1F, 0x8F, 0x0F, 0x07, 0x07, 0x03, 0x02,
24 { 0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x3F, 0xFE, 0x0F,
25 0xFE, 0x07, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F,
26 0xFE, 0x3F, 0xFE, 0x7F, 0xFE, 0x3F, 0xCE, 0x1F,
27 0x86, 0x0F, 0x06, 0x07, 0x02, 0x02, 0x00, 0x00,
31 Cursordata sweep0data = {
34 {0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03,
35 0xC0, 0x03, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF,
36 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xC0, 0x03,
37 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03},
38 {0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
39 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F,
40 0xFE, 0x7F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
41 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x00, 0x00}
44 Cursordata boxcursdata = {
47 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
48 0xFF, 0xFF, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8,
49 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0xFF, 0xFF,
50 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
51 {0x00, 0x00, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F,
52 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
53 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70,
54 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x00}
57 Cursordata sightdata = {
60 {0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0xDF, 0xFB,
61 0xCF, 0xF3, 0xC7, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF,
62 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xE3, 0xCF, 0xF3,
63 0xDF, 0x7B, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F,},
64 {0x00, 0x00, 0xF0, 0x0F, 0x8C, 0x31, 0x84, 0x21,
65 0x82, 0x41, 0x82, 0x41, 0x82, 0x41, 0xFE, 0x7F,
66 0xFE, 0x7F, 0x82, 0x41, 0x82, 0x41, 0x82, 0x41,
67 0x84, 0x21, 0x8C, 0x31, 0xF0, 0x0F, 0x00, 0x00,}
70 Cursordata arrowdata = {
73 {0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
74 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
75 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
76 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
77 {0x00, 0x00, 0xFE, 0x03, 0xFE, 0x00, 0x3E, 0x00,
78 0x7E, 0x00, 0xFE, 0x00, 0xF6, 0x01, 0xE6, 0x03,
79 0xC2, 0x07, 0x82, 0x0F, 0x00, 0x1F, 0x00, 0x3E,
80 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00,}
83 Cursordata whitearrow = {
86 {0xFF, 0x07, 0xFF, 0x07, 0xFF, 0x03, 0xFF, 0x00,
87 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07,
88 0xE7, 0x0F, 0xC7, 0x1F, 0x83, 0x3F, 0x00, 0x7F,
89 0x00, 0xFE, 0x00, 0x7C, 0x00, 0x38, 0x00, 0x10,},
90 {0xFF, 0x07, 0xFF, 0x07, 0x83, 0x03, 0xC3, 0x00,
91 0xC3, 0x00, 0x83, 0x01, 0x1B, 0x03, 0x3F, 0x06,
92 0x67, 0x0C, 0xC7, 0x18, 0x83, 0x31, 0x00, 0x63,
93 0x00, 0xC6, 0x00, 0x6C, 0x00, 0x38, 0x00, 0x10,}
96 Cursordata blittarget = {
99 {0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x7f, 0x00,
100 0xfc, 0xff, 0x00, 0xfe, 0xff, 0x01, 0xff, 0xff, 0x03,
101 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
102 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03,
103 0xff, 0xff, 0x03, 0xfe, 0xff, 0x01, 0xfc, 0xff, 0x00,
104 0xf8, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00},
105 {0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x3f, 0x00,
106 0x38, 0x73, 0x00, 0x8c, 0xc7, 0x00, 0xec, 0xdf, 0x00,
107 0x66, 0x9b, 0x01, 0x36, 0xb3, 0x01, 0xfe, 0xff, 0x01,
108 0xfe, 0xff, 0x01, 0x36, 0xb3, 0x01, 0x66, 0x9b, 0x01,
109 0xec, 0xdf, 0x00, 0x8c, 0xc7, 0x00, 0x38, 0x73, 0x00,
110 0xf0, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00}
113 Cursordata blitarrow = {
116 {0xff, 0x0f, 0x00, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00,
117 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x01, 0x00,
118 0xff, 0x03, 0x00, 0xff, 0x07, 0x00, 0xe7, 0x0f, 0x00,
119 0xc7, 0x1f, 0x00, 0x87, 0x3f, 0x00, 0x03, 0x7f, 0x00,
120 0x01, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x03,
121 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00},
122 {0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x00, 0x00,
123 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00,
124 0xf6, 0x01, 0x00, 0xe6, 0x03, 0x00, 0xc2, 0x07, 0x00,
125 0x82, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00,
126 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x01,
127 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}
130 Cursordata blitsweep = {
133 {0xc4, 0xff, 0x03, 0xce, 0xff, 0x03, 0xdf, 0xff, 0x03,
134 0x3e, 0x80, 0x03, 0x7c, 0x83, 0x03, 0xf8, 0x83, 0x03,
135 0xf7, 0x83, 0x03, 0xe7, 0x83, 0x03, 0xf7, 0x83, 0x03,
136 0xf7, 0x83, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
137 0x07, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x80, 0x03,
138 0xff, 0xff, 0x03, 0xff, 0xff, 0x03, 0xff, 0xff, 0x03},
139 {0x00, 0x00, 0x00, 0x84, 0xff, 0x01, 0x0e, 0x00, 0x01,
140 0x1c, 0x00, 0x01, 0x38, 0x00, 0x01, 0x70, 0x01, 0x01,
141 0xe0, 0x01, 0x01, 0xc2, 0x01, 0x01, 0xe2, 0x01, 0x01,
142 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
143 0x02, 0x00, 0x01, 0x02, 0x00, 0x01, 0x02, 0x00, 0x01,
144 0x02, 0x00, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x00, 0x00}
148 * Grey tile pattern for root background
152 #define grey_height 2
153 static char grey_bits[] = {
157 static XColor bl, wh;
166 f = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->fore,
167 c->width, c->width, 1, 0, 1);
168 m = XCreatePixmapFromBitmapData(dpy, s->root, (char *)c->mask,
169 c->width, c->width, 1, 0, 1);
170 return XCreatePixmapCursor(dpy, f, m, &bl, &wh,
171 c->hot[0], c->hot[1]);
180 XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
181 "black", &bl, &dummy);
182 XAllocNamedColor(dpy, DefaultColormap(dpy, s->num),
183 "white", &wh, &dummy);
186 s->arrow = getcursor(&blitarrow, s);
187 s->target = getcursor(&blittarget, s);
188 s->sweep0 = getcursor(&blitsweep, s);
189 s->boxcurs = getcursor(&blitsweep, s);
192 s->arrow = getcursor(&bigarrow, s);
193 s->target = getcursor(&sightdata, s);
194 s->sweep0 = getcursor(&sweep0data, s);
195 s->boxcurs = getcursor(&boxcursdata, s);
198 s->root_pixmap = XCreatePixmapFromBitmapData(dpy,
199 s->root, grey_bits, grey_width, grey_height,
200 s->black, s->white, s->depth);
202 s->bordcurs[BorderN] = XCreateFontCursor(dpy, 138);
203 s->bordcurs[BorderNNE] = XCreateFontCursor(dpy, 136);
204 s->bordcurs[BorderENE] = s->bordcurs[BorderNNE] ;
205 s->bordcurs[BorderE] = XCreateFontCursor(dpy, 96);
206 s->bordcurs[BorderESE] = XCreateFontCursor(dpy, 14);
207 s->bordcurs[BorderSSE] = s->bordcurs[BorderESE];
208 s->bordcurs[BorderS] = XCreateFontCursor(dpy, 16);
209 s->bordcurs[BorderSSW] = XCreateFontCursor(dpy, 12);
210 s->bordcurs[BorderWSW] = s->bordcurs[BorderSSW];
211 s->bordcurs[BorderW] = XCreateFontCursor(dpy, 70);
212 s->bordcurs[BorderWNW] = XCreateFontCursor(dpy, 134);
213 s->bordcurs[BorderNNW] = s->bordcurs[BorderWNW];
219 Cursor crosscursor = {
221 {0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
222 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
223 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0,
224 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, },
225 {0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
226 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x7F, 0xFE,
227 0x7F, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
228 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, }
233 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
234 0xFF, 0xFF, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F,
235 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF,
236 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, },
237 {0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE,
238 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
239 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
240 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, }
243 Cursor sightcursor = {
245 {0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0xFB, 0xDF,
246 0xF3, 0xCF, 0xE3, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF,
247 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC7, 0xF3, 0xCF,
248 0x7B, 0xDF, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, },
249 {0x00, 0x00, 0x0F, 0xF0, 0x31, 0x8C, 0x21, 0x84,
250 0x41, 0x82, 0x41, 0x82, 0x41, 0x82, 0x7F, 0xFE,
251 0x7F, 0xFE, 0x41, 0x82, 0x41, 0x82, 0x41, 0x82,
252 0x21, 0x84, 0x31, 0x8C, 0x0F, 0xF0, 0x00, 0x00, }
255 Cursor whitearrow = {
257 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC,
258 0xFF, 0xF0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC,
259 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC,
260 0xF3, 0xF8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, },
261 {0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0xC0, 0x1C,
262 0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x38, 0xC0, 0x1C,
263 0xC0, 0x0E, 0xC0, 0x07, 0xCE, 0x0E, 0xDF, 0x1C,
264 0xD3, 0xB8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, }
269 {0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe,
270 0x7c, 0x7e, 0x78, 0x7e, 0x00, 0xfc, 0x01, 0xf8,
271 0x03, 0xf0, 0x07, 0xe0, 0x07, 0xc0, 0x07, 0xc0,
272 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, },
273 {0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf8, 0x3c, 0x3c,
274 0x38, 0x1c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0xf0,
275 0x01, 0xe0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80,
276 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
281 {0xfe, 0x00, 0x82, 0x00, 0x8c, 0x00, 0x87, 0xff,
282 0xa0, 0x01, 0xb0, 0x01, 0xd0, 0x01, 0x11, 0xff,
283 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
284 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x00, },
285 {0x00, 0x00, 0x7c, 0x00, 0x70, 0x00, 0x78, 0x00,
286 0x5f, 0xfe, 0x4f, 0xfe, 0x0f, 0xfe, 0x0e, 0x00,
287 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
288 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x00, 0x00, }
293 {0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x06, 0xc0,
294 0x1c, 0x70, 0x10, 0x10, 0x0c, 0x60, 0xfc, 0x7f,
295 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xff, 0xff,
296 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
297 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
298 0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80, 0x03, 0x80,
299 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00,
300 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
305 {0x00, 0x7f, 0x00, 0x41, 0x00, 0x31, 0xff, 0xe1,
306 0x80, 0x05, 0x80, 0x0d, 0x80, 0x0b, 0xff, 0x88,
307 0x00, 0x88, 0x0, 0x88, 0x00, 0x88, 0x00, 0x88,
308 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, },
309 {0x00, 0x00, 0x00, 0x3e, 0x00, 0x0e, 0x00, 0x1e,
310 0x7f, 0xfa, 0x7f, 0xf2, 0x7f, 0xf0, 0x00, 0x70,
311 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
312 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, }
317 {0x07, 0xc0, 0x04, 0x40, 0x04, 0x40, 0x04, 0x58,
318 0x04, 0x68, 0x04, 0x6c, 0x04, 0x06, 0x04, 0x02,
319 0x04, 0x06, 0x04, 0x6c, 0x04, 0x68, 0x04, 0x58,
320 0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x07, 0xc0, },
321 {0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80,
322 0x03, 0x90, 0x03, 0x90, 0x03, 0xf8, 0x03, 0xfc,
323 0x03, 0xf8, 0x03, 0x90, 0x03, 0x90, 0x03, 0x80,
324 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
329 {0x00, 0xf8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
330 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88,
331 0xff, 0x88, 0x80, 0x0b, 0x80, 0x0d, 0x80, 0x05,
332 0xff, 0xe1, 0x00, 0x31, 0x00, 0x41, 0x00, 0x7f, },
333 {0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
334 0x0, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70,
335 0x00, 0x70, 0x7f, 0xf0, 0x7f, 0xf2, 0x7f, 0xfa,
336 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3e, 0x00, 0x00, }
341 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
342 0xff, 0xff, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01,
343 0xfc, 0x7f, 0x0c, 0x60, 0x10, 0x10, 0x1c, 0x70,
344 0x06, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, },
345 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
346 0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe,
347 0x03, 0x80, 0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80,
348 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
353 {0x1f, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
354 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00,
355 0x11, 0xff, 0xd0, 0x01, 0xb0, 0x01, 0xa0, 0x01,
356 0x87, 0xff, 0x8c, 0x00, 0x82, 0x00, 0xfe, 0x00, },
357 {0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
358 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
359 0x0e, 0x00, 0x0f, 0xfe, 0x4f, 0xfe, 0x5f, 0xfe,
360 0x78, 0x00, 0x70, 0x00, 0x7c, 0x00, 0x00, 0x0, }
365 {0x03, 0xe0, 0x02, 0x20, 0x02, 0x20, 0x1a, 0x20,
366 0x16, 0x20, 0x36, 0x20, 0x60, 0x20, 0x40, 0x20,
367 0x60, 0x20, 0x36, 0x20, 0x16, 0x20, 0x1a, 0x20,
368 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x03, 0xe0, },
369 {0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0,
370 0x09, 0xc0, 0x09, 0xc0, 0x1f, 0xc0, 0x3f, 0xc0,
371 0x1f, 0xc0, 0x09, 0xc0, 0x09, 0xc0, 0x01, 0xc0,
372 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, }
375 Cursor *corners[9] = {