21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_DIRECTFB
32 #include "../SDL_sysvideo.h"
33 #include "../../events/SDL_mouse_c.h"
35 static SDL_Cursor *DirectFB_CreateDefaultCursor(
void);
37 int hot_x,
int hot_y);
42 static const char *
arrow[] = {
79 DirectFB_CreateDefaultCursor(
void)
84 DFB_CursorData *curdata;
85 DFBSurfaceDescription dsc;
94 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
95 dsc.caps = DSCAPS_VIDEOONLY;
98 dsc.pixelformat = DSPF_ARGB;
107 (
void *) &dest, &pitch));
110 for (
i = 0;
i < 32;
i++)
112 for (
j = 0;
j < 32;
j++)
116 case ' ': dest[
j] = 0x00000000;
break;
117 case '.': dest[
j] = 0xffffffff;
break;
118 case 'X': dest[
j] = 0xff000000;
break;
121 dest += (pitch >> 2);
124 curdata->surf->Unlock(curdata->surf);
137 DFB_CursorData *curdata;
138 DFBSurfaceDescription dsc;
151 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
152 dsc.caps = DSCAPS_VIDEOONLY;
155 dsc.pixelformat = DSPF_ARGB;
159 curdata->hotx =
hot_x;
160 curdata->hoty = hot_y;
164 (
void *) &dest, &pitch));
168 memcpy((
char *) dest +
i * pitch,
171 curdata->surf->Unlock(curdata->surf);
191 DFB_DisplayData *dispdata =
193 DFB_WindowData *windata = (DFB_WindowData *)
window->driverdata;
197 SetCursorShape(windata->dfbwin,
198 curdata->surf, curdata->hotx,
202 SetCooperativeLevel(dispdata->layer,
203 DLSCL_ADMINISTRATIVE));
205 SetCursorOpacity(dispdata->layer,
208 SetCooperativeLevel(dispdata->layer,
234 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->
driverdata;
235 DFB_WindowData *windata = (DFB_WindowData *)
window->driverdata;
240 cx +
x + windata->client.x,
241 cy +
y + windata->client.y));
252 static void DirectFB_FreeMouse(
SDL_Mouse * mouse);
256 static DFBEnumerationResult
257 EnumMice(DFBInputDeviceID device_id, DFBInputDeviceDescription desc,
260 DFB_DeviceData *devdata = callbackdata;
262 if ((desc.type & DIDTF_MOUSE) && (device_id & id_mask)) {
266 mouse.id = device_id;
272 mouse.FreeMouse = DirectFB_FreeMouse;
275 SDL_AddMouse(&mouse, desc.name, 0, 0, 1);
276 devdata->mouse_id[devdata->num_mice++] = device_id;
286 devdata->num_mice = 0;
287 if (devdata->use_linux_input) {
290 devdata->dfb->EnumInputDevices(devdata->dfb, EnumMice, devdata);
291 if (devdata->num_mice == 0) {
294 devdata->dfb->EnumInputDevices(devdata->dfb, EnumMice, devdata);
297 if (devdata->num_mice == 0) {
306 mouse.FreeMouse = DirectFB_FreeMouse;
309 SDL_AddMouse(&mouse,
"Mouse", 0, 0, 1);
310 devdata->num_mice = 1;
319 if (devdata->use_linux_input) {
339 DFB_DisplayData *dispdata = (DFB_DisplayData *) display->
driverdata;
340 DFB_WindowData *windata = (DFB_WindowData *)
window->driverdata;
346 cx +
x + windata->client.x,
347 cy +
y + windata->client.y));
376 devdata->num_mice = 1;