]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/rio/data.c
rio: fix handling "resize" wctl for hidden windows
[plan9front.git] / sys / src / cmd / rio / data.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <thread.h>
5 #include <cursor.h>
6 #include <mouse.h>
7 #include <keyboard.h>
8 #include <frame.h>
9 #include <fcall.h>
10 #include "dat.h"
11 #include "fns.h"
12
13 Cursor crosscursor = {
14         {-7, -7},
15         {0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
16          0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
17          0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0,
18          0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, },
19         {0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
20          0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x7F, 0xFE,
21          0x7F, 0xFE, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
22          0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, }
23 };
24
25 Cursor boxcursor = {
26         {-7, -7},
27         {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
28          0xFF, 0xFF, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F,
29          0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFF, 0xFF,
30          0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, },
31         {0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE,
32          0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
33          0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E, 0x70, 0x0E,
34          0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, }
35 };
36
37 Cursor sightcursor = {
38         {-7, -7},
39         {0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0xFB, 0xDF,
40          0xF3, 0xCF, 0xE3, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF,
41          0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC7, 0xF3, 0xCF,
42          0x7B, 0xDF, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, },
43         {0x00, 0x00, 0x0F, 0xF0, 0x31, 0x8C, 0x21, 0x84,
44          0x41, 0x82, 0x41, 0x82, 0x41, 0x82, 0x7F, 0xFE,
45          0x7F, 0xFE, 0x41, 0x82, 0x41, 0x82, 0x41, 0x82,
46          0x21, 0x84, 0x31, 0x8C, 0x0F, 0xF0, 0x00, 0x00, }
47 };
48
49 Cursor whitearrow = {
50         {0, 0},
51         {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
52          0xFF, 0xF0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC, 
53          0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
54          0xF3, 0xF8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, },
55         {0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0xC0, 0x1C, 
56          0xC0, 0x30, 0xC0, 0x30, 0xC0, 0x38, 0xC0, 0x1C, 
57          0xC0, 0x0E, 0xC0, 0x07, 0xCE, 0x0E, 0xDF, 0x1C, 
58          0xD3, 0xB8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40, }
59 };
60
61 Cursor query = {
62         {-7,-7},
63         {0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 
64          0x7c, 0x7e, 0x78, 0x7e, 0x00, 0xfc, 0x01, 0xf8, 
65          0x03, 0xf0, 0x07, 0xe0, 0x07, 0xc0, 0x07, 0xc0, 
66          0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, },
67         {0x00, 0x00, 0x0f, 0xf0, 0x1f, 0xf8, 0x3c, 0x3c, 
68          0x38, 0x1c, 0x00, 0x3c, 0x00, 0x78, 0x00, 0xf0, 
69          0x01, 0xe0, 0x03, 0xc0, 0x03, 0x80, 0x03, 0x80, 
70          0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
71 };
72
73 Cursor tl = {
74         {-4, -4},
75         {0xfe, 0x00, 0x82, 0x00, 0x8c, 0x00, 0x87, 0xff, 
76          0xa0, 0x01, 0xb0, 0x01, 0xd0, 0x01, 0x11, 0xff, 
77          0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 
78          0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x1f, 0x00, },
79         {0x00, 0x00, 0x7c, 0x00, 0x70, 0x00, 0x78, 0x00, 
80          0x5f, 0xfe, 0x4f, 0xfe, 0x0f, 0xfe, 0x0e, 0x00, 
81          0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 
82          0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x00, 0x00, }
83 };
84
85 Cursor t = {
86         {-7, -8},
87         {0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x06, 0xc0, 
88          0x1c, 0x70, 0x10, 0x10, 0x0c, 0x60, 0xfc, 0x7f, 
89          0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xff, 0xff, 
90          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, },
91         {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
92          0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80, 0x03, 0x80, 
93          0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x00, 0x00, 
94          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
95 };
96
97 Cursor tr = {
98         {-11, -4},
99         {0x00, 0x7f, 0x00, 0x41, 0x00, 0x31, 0xff, 0xe1, 
100          0x80, 0x05, 0x80, 0x0d, 0x80, 0x0b, 0xff, 0x88, 
101          0x00, 0x88, 0x0, 0x88, 0x00, 0x88, 0x00, 0x88, 
102          0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0xf8, },
103         {0x00, 0x00, 0x00, 0x3e, 0x00, 0x0e, 0x00, 0x1e, 
104          0x7f, 0xfa, 0x7f, 0xf2, 0x7f, 0xf0, 0x00, 0x70, 
105          0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 
106          0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, }
107 };
108
109 Cursor r = {
110         {-8, -7},
111         {0x07, 0xc0, 0x04, 0x40, 0x04, 0x40, 0x04, 0x58, 
112          0x04, 0x68, 0x04, 0x6c, 0x04, 0x06, 0x04, 0x02, 
113          0x04, 0x06, 0x04, 0x6c, 0x04, 0x68, 0x04, 0x58, 
114          0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x07, 0xc0, },
115         {0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 
116          0x03, 0x90, 0x03, 0x90, 0x03, 0xf8, 0x03, 0xfc, 
117          0x03, 0xf8, 0x03, 0x90, 0x03, 0x90, 0x03, 0x80, 
118          0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, }
119 };
120
121 Cursor br = {
122         {-11, -11},
123         {0x00, 0xf8, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 
124          0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x88, 
125          0xff, 0x88, 0x80, 0x0b, 0x80, 0x0d, 0x80, 0x05, 
126          0xff, 0xe1, 0x00, 0x31, 0x00, 0x41, 0x00, 0x7f, },
127         {0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 
128          0x0, 0x70, 0x00, 0x70, 0x00, 0x70, 0x00, 0x70, 
129          0x00, 0x70, 0x7f, 0xf0, 0x7f, 0xf2, 0x7f, 0xfa, 
130          0x00, 0x1e, 0x00, 0x0e, 0x00, 0x3e, 0x00, 0x00, }
131 };
132
133 Cursor b = {
134         {-7, -7},
135         {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
136          0xff, 0xff, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 
137          0xfc, 0x7f, 0x0c, 0x60, 0x10, 0x10, 0x1c, 0x70, 
138          0x06, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, },
139         {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
140          0x00, 0x00, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 
141          0x03, 0x80, 0x03, 0x80, 0x0f, 0xe0, 0x03, 0x80, 
142          0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }
143 };
144
145 Cursor bl = {
146         {-4, -11},
147         {0x1f, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 
148          0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 
149          0x11, 0xff, 0xd0, 0x01, 0xb0, 0x01, 0xa0, 0x01, 
150          0x87, 0xff, 0x8c, 0x00, 0x82, 0x00, 0xfe, 0x00, },
151         {0x00, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 
152          0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00, 
153          0x0e, 0x00, 0x0f, 0xfe, 0x4f, 0xfe, 0x5f, 0xfe, 
154          0x78, 0x00, 0x70, 0x00, 0x7c, 0x00, 0x00, 0x0, }
155 };
156
157 Cursor l = {
158         {-7, -7},
159         {0x03, 0xe0, 0x02, 0x20, 0x02, 0x20, 0x1a, 0x20, 
160          0x16, 0x20, 0x36, 0x20, 0x60, 0x20, 0x40, 0x20, 
161          0x60, 0x20, 0x36, 0x20, 0x16, 0x20, 0x1a, 0x20, 
162          0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x03, 0xe0, },
163         {0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 
164          0x09, 0xc0, 0x09, 0xc0, 0x1f, 0xc0, 0x3f, 0xc0, 
165          0x1f, 0xc0, 0x09, 0xc0, 0x09, 0xc0, 0x01, 0xc0, 
166          0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, }
167 };
168
169 Cursor *corners[9] = {
170         &tl,    &t,     &tr,
171         &l,     nil,    &r,
172         &bl,    &b,     &br,
173 };
174
175 void
176 iconinit(void)
177 {
178         background = allocimage(display, Rect(0,0,1,1), RGB24, 1, 0x777777FF);
179
180         /* greys are multiples of 0x11111100+0xFF, 14* being palest */
181         cols[BACK] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xFFFFFFFF^reverse);
182         cols[BORD] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x999999FF^reverse);
183         cols[TEXT] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x000000FF^reverse);
184         cols[HTEXT] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x000000FF);
185         if(!reverse) {
186                 cols[HIGH] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0xCCCCCCFF);
187                 titlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DGreygreen);
188                 lighttitlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPalegreygreen);
189         } else {
190                 cols[HIGH] = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPurpleblue);
191                 titlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPurpleblue);
192                 lighttitlecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x222222FF);
193         }
194         dholdcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DMedblue);
195         lightholdcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DGreyblue);
196         paleholdcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DPalegreyblue);
197         paletextcol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, 0x666666FF^reverse);
198         sizecol = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DRed);
199
200         if(reverse == 0)
201                 holdcol = dholdcol;
202         else
203                 holdcol = paleholdcol;
204 }