forked from Cloudxtreme/crystal-picnic
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpicursor.diff
266 lines (258 loc) · 15 KB
/
picursor.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
diff --git a/src/raspberrypi/picursor.h b/src/raspberrypi/picursor.h
index ff54700..fa07531 100644
--- a/src/raspberrypi/picursor.h
+++ b/src/raspberrypi/picursor.h
@@ -1,82 +1,30 @@
static uint32_t default_cursor[] = {
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
- 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,
- 0xff000000,0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,
- 0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,
- 0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,
- 0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xffffffff,0xff000000,0xff000000,0x00000000,
- 0x00000000,0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,
- 0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,
- 0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,
- 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xff000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
- 0x00000000,0xff000000,0xff000000,0xff000000,0xff000000,0x00000000,
- 0x00000000,0x00000000
+ 0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,
+ 0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000,
+ 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,
+ 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xff000000,0xffffffff,0xffffffff,0xff000000,0x00000000,0x00000000,0x00000000,
+ 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0xff000000,0xff000000,0xff000000,0xff000000,0x00000000,0x00000000,0x00000000
};
diff --git a/src/raspberrypi/pidisplay.c b/src/raspberrypi/pidisplay.c
index 91982fb..40e909a 100644
--- a/src/raspberrypi/pidisplay.c
+++ b/src/raspberrypi/pidisplay.c
@@ -68,58 +68,89 @@ static void delete_cursor_data(ALLEGRO_DISPLAY_RASPBERRYPI *d)
static void show_cursor(ALLEGRO_DISPLAY_RASPBERRYPI *d)
{
- if (d->cursor_data == NULL || cursor_added) {
+ if (d->cursor_data == NULL) {
return;
}
int width = d->cursor_width;
int height = d->cursor_height;
- uint32_t unused;
- cursor_resource = vc_dispmanx_resource_create(VC_IMAGE_ARGB8888, width, height, &unused);
-
- VC_RECT_T r;
- r.x = 0;
- r.y = 0;
- r.width = width;
- r.height = height;
+ if (cursor_added == false) {
+ uint32_t unused;
+ cursor_resource = vc_dispmanx_resource_create(VC_IMAGE_ARGB8888, width, height, &unused);
- int dpitch = pot(sizeof(uint32_t) * width);
-
- dispman_update = vc_dispmanx_update_start(0);
- vc_dispmanx_resource_write_data(cursor_resource, VC_IMAGE_ARGB8888, dpitch, d->cursor_data, &r);
- vc_dispmanx_update_submit_sync(dispman_update);
-
- ALLEGRO_MOUSE_STATE state;
- al_get_mouse_state(&state);
-
- dst_rect.x = state.x+d->cursor_offset_x;
- dst_rect.y = state.y+d->cursor_offset_y;
- dst_rect.width = width;
- dst_rect.height = height;
- src_rect.x = 0;
- src_rect.y = 0;
- src_rect.width = width << 16;
- src_rect.height = height << 16;
-
- dispman_update = vc_dispmanx_update_start(0);
-
- cursor_element = vc_dispmanx_element_add(
- dispman_update,
- dispman_display,
- 0/*layer*/,
- &dst_rect,
- cursor_resource,
- &src_rect,
- DISPMANX_PROTECTION_NONE,
- 0 /*alpha*/,
- 0/*clamp*/,
- 0/*transform*/
- );
-
- vc_dispmanx_update_submit_sync(dispman_update);
+ VC_RECT_T r;
+ r.x = 0;
+ r.y = 0;
+ r.width = width;
+ r.height = height;
+
+ int dpitch = pot(sizeof(uint32_t) * width);
+
+ dispman_update = vc_dispmanx_update_start(0);
+ vc_dispmanx_resource_write_data(cursor_resource, VC_IMAGE_ARGB8888, dpitch, d->cursor_data, &r);
+ vc_dispmanx_update_submit_sync(dispman_update);
- cursor_added = true;
+ ALLEGRO_MOUSE_STATE state;
+ al_get_mouse_state(&state);
+
+ dst_rect.x = state.x+d->cursor_offset_x;
+ dst_rect.y = state.y+d->cursor_offset_y;
+ dst_rect.width = width;
+ dst_rect.height = height;
+ src_rect.x = 0;
+ src_rect.y = 0;
+ src_rect.width = width << 16;
+ src_rect.height = height << 16;
+
+ dispman_update = vc_dispmanx_update_start(0);
+
+ cursor_element = vc_dispmanx_element_add(
+ dispman_update,
+ dispman_display,
+ 0/*layer*/,
+ &dst_rect,
+ cursor_resource,
+ &src_rect,
+ DISPMANX_PROTECTION_NONE,
+ 0 /*alpha*/,
+ 0/*clamp*/,
+ 0/*transform*/
+ );
+
+ vc_dispmanx_update_submit_sync(dispman_update);
+
+ cursor_added = true;
+ }
+ else {
+ ALLEGRO_DISPLAY *disp = (ALLEGRO_DISPLAY *)d;
+ VC_RECT_T src, dst;
+ src.x = 0;
+ src.y = 0;
+ src.width = d->cursor_width << 16;
+ src.height = d->cursor_height << 16;
+ ALLEGRO_MOUSE_STATE st;
+ al_get_mouse_state(&st);
+ st.x = (st.x+0.5) * d->screen_width / disp->w;
+ st.y = (st.y+0.5) * d->screen_height / disp->h;
+ dst.x = st.x+d->cursor_offset_x;
+ dst.y = st.y+d->cursor_offset_y;
+ dst.width = d->cursor_width;
+ dst.height = d->cursor_height;
+ dispman_update = vc_dispmanx_update_start(0);
+ vc_dispmanx_element_change_attributes(
+ dispman_update,
+ cursor_element,
+ 0,
+ 0,
+ 0,
+ &dst,
+ &src,
+ 0,
+ 0
+ );
+ vc_dispmanx_update_submit_sync(dispman_update);
+ }
}
static void hide_cursor(ALLEGRO_DISPLAY_RASPBERRYPI *d)
@@ -580,8 +611,11 @@ static bool raspberrypi_wait_for_vsync(ALLEGRO_DISPLAY *display)
void raspberrypi_flip_display(ALLEGRO_DISPLAY *disp)
{
- (void)disp;
eglSwapBuffers(egl_display, egl_window);
+
+ if (cursor_added) {
+ show_cursor((ALLEGRO_DISPLAY_RASPBERRYPI *)disp);
+ }
}
static void raspberrypi_update_display_region(ALLEGRO_DISPLAY *d, int x, int y,