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);
38 static int DirectFB_ShowCursor(
SDL_Cursor * cursor);
39 static void DirectFB_MoveCursor(
SDL_Cursor * cursor);
40 static void DirectFB_FreeCursor(
SDL_Cursor * cursor);
41 static void DirectFB_WarpMouse(
SDL_Window * window,
int x,
int y);
42 static void DirectFB_FreeMouse(
SDL_Mouse * mouse);
44 static const char *arrow[] = {
81 DirectFB_CreateDefaultCursor(
void)
88 DFBSurfaceDescription dsc;
98 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
99 dsc.caps = DSCAPS_VIDEOONLY;
102 dsc.pixelformat = DSPF_ARGB;
111 (
void *) &dest, &pitch));
114 for (i = 0; i < 32; i++)
116 for (j = 0; j < 32; j++)
120 case ' ': dest[
j] = 0x00000000;
break;
121 case '.': dest[
j] = 0xffffffff;
break;
122 case 'X': dest[
j] = 0xff000000;
break;
125 dest += (pitch >> 2);
128 curdata->
surf->Unlock(curdata->
surf);
143 DFBSurfaceDescription dsc;
156 DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
157 dsc.caps = DSCAPS_VIDEOONLY;
158 dsc.width = surface->
w;
159 dsc.height = surface->
h;
160 dsc.pixelformat = DSPF_ARGB;
164 curdata->
hotx = hot_x;
165 curdata->
hoty = hot_y;
169 (
void *) &dest, &pitch));
172 for (i = 0; i < surface->
h; i++)
173 memcpy((
char *) dest + i * pitch,
174 (
char *) p + i * surface->
pitch, 4 * surface->
w);
176 curdata->
surf->Unlock(curdata->
surf);
203 SetCursorShape(windata->dfbwin,
208 SetCooperativeLevel(dispdata->
layer,
209 DLSCL_ADMINISTRATIVE));
211 SetCursorOpacity(dispdata->
layer,
212 cursor ? 0xC0 : 0x00));
214 SetCooperativeLevel(dispdata->
layer,
247 cx + x + windata->client.x,
248 cy + y + windata->client.y));
261 static DFBEnumerationResult
262 EnumMice(DFBInputDeviceID device_id, DFBInputDeviceDescription desc,
267 if ((desc.type & DIDTF_MOUSE) && (device_id & id_mask)) {
271 mouse.id = device_id;
277 mouse.FreeMouse = DirectFB_FreeMouse;
280 SDL_AddMouse(&mouse, desc.name, 0, 0, 1);
295 devdata->
dfb->EnumInputDevices(devdata->
dfb, EnumMice, devdata);
299 devdata->
dfb->EnumInputDevices(devdata->
dfb, EnumMice, devdata);
311 mouse.FreeMouse = DirectFB_FreeMouse;
314 SDL_AddMouse(&mouse,
"Mouse", 0, 0, 1);
351 cx + x + windata->client.x,
352 cy + y + windata->client.y));
SDL_Mouse * SDL_GetMouse(void)
A collection of pixels used in software blitting.
#define SDL_DFB_RELEASE(x)
void DirectFB_QuitMouse(_THIS)
void(* MoveCursor)(SDL_Cursor *cursor)
static SDL_VideoDevice * _this
void DirectFB_InitMouse(_THIS)
uint32_t Uint32
An unsigned 32-bit integer type.
void(* FreeCursor)(SDL_Cursor *cursor)
#define SDL_DFB_DEVICEDATA(dev)
SDL_Cursor *(* CreateCursor)(SDL_Surface *surface, int hot_x, int hot_y)
int(* ShowCursor)(SDL_Cursor *cursor)
SDL_Window * SDL_GetFocusWindow(void)
void SDL_SetDefaultCursor(SDL_Cursor *cursor)
#define SDL_assert(condition)
EGLSurface EGLint EGLint y
#define SDL_DFB_ALLOC_CLEAR(r, s)
#define SDL_DFB_CHECKERR(x...)
SDL_VideoDisplay * SDL_GetDisplayForWindow(SDL_Window *window)
#define SDL_DFB_CURSORDATA(curs)
SDL_VideoDevice * SDL_GetVideoDevice(void)
IDirectFBDisplayLayer * layer
void(* WarpMouse)(SDL_Window *window, int x, int y)