summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c')
-rw-r--r--3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c394
1 files changed, 0 insertions, 394 deletions
diff --git a/3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c b/3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c
deleted file mode 100644
index 0657d2f06ac..00000000000
--- a/3rdparty/SDL2/src/video/directfb/SDL_DirectFB_mouse.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- Simple DirectMedia Layer
- Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-*/
-#include "../../SDL_internal.h"
-
-#if SDL_VIDEO_DRIVER_DIRECTFB
-
-#include "SDL_assert.h"
-
-#include "SDL_DirectFB_video.h"
-#include "SDL_DirectFB_mouse.h"
-#include "SDL_DirectFB_modes.h"
-#include "SDL_DirectFB_window.h"
-
-#include "../SDL_sysvideo.h"
-#include "../../events/SDL_mouse_c.h"
-
-static SDL_Cursor *DirectFB_CreateDefaultCursor(void);
-static SDL_Cursor *DirectFB_CreateCursor(SDL_Surface * surface,
- int hot_x, int hot_y);
-static int DirectFB_ShowCursor(SDL_Cursor * cursor);
-static void DirectFB_MoveCursor(SDL_Cursor * cursor);
-static void DirectFB_FreeCursor(SDL_Cursor * cursor);
-static void DirectFB_WarpMouse(SDL_Window * window, int x, int y);
-static void DirectFB_FreeMouse(SDL_Mouse * mouse);
-
-static const char *arrow[] = {
- /* pixels */
- "X ",
- "XX ",
- "X.X ",
- "X..X ",
- "X...X ",
- "X....X ",
- "X.....X ",
- "X......X ",
- "X.......X ",
- "X........X ",
- "X.....XXXXX ",
- "X..X..X ",
- "X.X X..X ",
- "XX X..X ",
- "X X..X ",
- " X..X ",
- " X..X ",
- " X..X ",
- " XX ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
-};
-
-static SDL_Cursor *
-DirectFB_CreateDefaultCursor(void)
-{
- SDL_VideoDevice *dev = SDL_GetVideoDevice();
-
- SDL_DFB_DEVICEDATA(dev);
- DFB_CursorData *curdata;
- DFBResult ret;
- DFBSurfaceDescription dsc;
- SDL_Cursor *cursor;
- Uint32 *dest;
- Uint32 *p;
- int pitch, i, j;
-
- SDL_DFB_ALLOC_CLEAR( cursor, sizeof(*cursor));
- SDL_DFB_ALLOC_CLEAR(curdata, sizeof(*curdata));
-
- dsc.flags =
- DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
- dsc.caps = DSCAPS_VIDEOONLY;
- dsc.width = 32;
- dsc.height = 32;
- dsc.pixelformat = DSPF_ARGB;
-
- SDL_DFB_CHECKERR(devdata->dfb->CreateSurface(devdata->dfb, &dsc,
- &curdata->surf));
- curdata->hotx = 0;
- curdata->hoty = 0;
- cursor->driverdata = curdata;
-
- SDL_DFB_CHECKERR(curdata->surf->Lock(curdata->surf, DSLF_WRITE,
- (void *) &dest, &pitch));
-
- /* Relies on the fact that this is only called with ARGB surface. */
- for (i = 0; i < 32; i++)
- {
- for (j = 0; j < 32; j++)
- {
- switch (arrow[i][j])
- {
- case ' ': dest[j] = 0x00000000; break;
- case '.': dest[j] = 0xffffffff; break;
- case 'X': dest[j] = 0xff000000; break;
- }
- }
- dest += (pitch >> 2);
- }
-
- curdata->surf->Unlock(curdata->surf);
- return cursor;
- error:
- return NULL;
-}
-
-/* Create a cursor from a surface */
-static SDL_Cursor *
-DirectFB_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y)
-{
- SDL_VideoDevice *dev = SDL_GetVideoDevice();
-
- SDL_DFB_DEVICEDATA(dev);
- DFB_CursorData *curdata;
- DFBResult ret;
- DFBSurfaceDescription dsc;
- SDL_Cursor *cursor;
- Uint32 *dest;
- Uint32 *p;
- int pitch, i;
-
- SDL_assert(surface->format->format == SDL_PIXELFORMAT_ARGB8888);
- SDL_assert(surface->pitch == surface->w * 4);
-
- SDL_DFB_ALLOC_CLEAR( cursor, sizeof(*cursor));
- SDL_DFB_ALLOC_CLEAR(curdata, sizeof(*curdata));
-
- dsc.flags =
- DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT | DSDESC_CAPS;
- dsc.caps = DSCAPS_VIDEOONLY;
- dsc.width = surface->w;
- dsc.height = surface->h;
- dsc.pixelformat = DSPF_ARGB;
-
- SDL_DFB_CHECKERR(devdata->dfb->CreateSurface(devdata->dfb, &dsc,
- &curdata->surf));
- curdata->hotx = hot_x;
- curdata->hoty = hot_y;
- cursor->driverdata = curdata;
-
- SDL_DFB_CHECKERR(curdata->surf->Lock(curdata->surf, DSLF_WRITE,
- (void *) &dest, &pitch));
-
- p = surface->pixels;
- for (i = 0; i < surface->h; i++)
- memcpy((char *) dest + i * pitch,
- (char *) p + i * surface->pitch, 4 * surface->w);
-
- curdata->surf->Unlock(curdata->surf);
- return cursor;
- error:
- return NULL;
-}
-
-/* Show the specified cursor, or hide if cursor is NULL */
-static int
-DirectFB_ShowCursor(SDL_Cursor * cursor)
-{
- SDL_DFB_CURSORDATA(cursor);
- DFBResult ret;
- SDL_Window *window;
-
- window = SDL_GetFocusWindow();
- if (!window)
- return -1;
- else {
- SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
-
- if (display) {
- DFB_DisplayData *dispdata =
- (DFB_DisplayData *) display->driverdata;
- DFB_WindowData *windata = (DFB_WindowData *) window->driverdata;
-
- if (cursor)
- SDL_DFB_CHECKERR(windata->dfbwin->
- SetCursorShape(windata->dfbwin,
- curdata->surf, curdata->hotx,
- curdata->hoty));
-
- SDL_DFB_CHECKERR(dispdata->layer->
- SetCooperativeLevel(dispdata->layer,
- DLSCL_ADMINISTRATIVE));
- SDL_DFB_CHECKERR(dispdata->layer->
- SetCursorOpacity(dispdata->layer,
- cursor ? 0xC0 : 0x00));
- SDL_DFB_CHECKERR(dispdata->layer->
- SetCooperativeLevel(dispdata->layer,
- DLSCL_SHARED));
- }
- }
-
- return 0;
- error:
- return -1;
-}
-
-/* Free a window manager cursor */
-static void
-DirectFB_FreeCursor(SDL_Cursor * cursor)
-{
- SDL_DFB_CURSORDATA(cursor);
-
- SDL_DFB_RELEASE(curdata->surf);
- SDL_DFB_FREE(cursor->driverdata);
- SDL_DFB_FREE(cursor);
-}
-
-/* Warp the mouse to (x,y) */
-static void
-DirectFB_WarpMouse(SDL_Window * window, int x, int y)
-{
- SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
- DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata;
- DFB_WindowData *windata = (DFB_WindowData *) window->driverdata;
- DFBResult ret;
- int cx, cy;
-
- SDL_DFB_CHECKERR(windata->dfbwin->GetPosition(windata->dfbwin, &cx, &cy));
- SDL_DFB_CHECKERR(dispdata->layer->WarpCursor(dispdata->layer,
- cx + x + windata->client.x,
- cy + y + windata->client.y));
-
- error:
- return;
-}
-
-#if USE_MULTI_API
-
-static void DirectFB_WarpMouse(SDL_Mouse * mouse, SDL_Window * window,
- int x, int y);
-
-static int id_mask;
-
-static DFBEnumerationResult
-EnumMice(DFBInputDeviceID device_id, DFBInputDeviceDescription desc,
- void *callbackdata)
-{
- DFB_DeviceData *devdata = callbackdata;
-
- if ((desc.type & DIDTF_MOUSE) && (device_id & id_mask)) {
- SDL_Mouse mouse;
-
- SDL_zero(mouse);
- mouse.id = device_id;
- mouse.CreateCursor = DirectFB_CreateCursor;
- mouse.ShowCursor = DirectFB_ShowCursor;
- mouse.MoveCursor = DirectFB_MoveCursor;
- mouse.FreeCursor = DirectFB_FreeCursor;
- mouse.WarpMouse = DirectFB_WarpMouse;
- mouse.FreeMouse = DirectFB_FreeMouse;
- mouse.cursor_shown = 1;
-
- SDL_AddMouse(&mouse, desc.name, 0, 0, 1);
- devdata->mouse_id[devdata->num_mice++] = device_id;
- }
- return DFENUM_OK;
-}
-
-void
-DirectFB_InitMouse(_THIS)
-{
- SDL_DFB_DEVICEDATA(_this);
-
- devdata->num_mice = 0;
- if (devdata->use_linux_input) {
- /* try non-core devices first */
- id_mask = 0xF0;
- devdata->dfb->EnumInputDevices(devdata->dfb, EnumMice, devdata);
- if (devdata->num_mice == 0) {
- /* try core devices */
- id_mask = 0x0F;
- devdata->dfb->EnumInputDevices(devdata->dfb, EnumMice, devdata);
- }
- }
- if (devdata->num_mice == 0) {
- SDL_Mouse mouse;
-
- SDL_zero(mouse);
- mouse.CreateCursor = DirectFB_CreateCursor;
- mouse.ShowCursor = DirectFB_ShowCursor;
- mouse.MoveCursor = DirectFB_MoveCursor;
- mouse.FreeCursor = DirectFB_FreeCursor;
- mouse.WarpMouse = DirectFB_WarpMouse;
- mouse.FreeMouse = DirectFB_FreeMouse;
- mouse.cursor_shown = 1;
-
- SDL_AddMouse(&mouse, "Mouse", 0, 0, 1);
- devdata->num_mice = 1;
- }
-}
-
-void
-DirectFB_QuitMouse(_THIS)
-{
- SDL_DFB_DEVICEDATA(_this);
-
- if (devdata->use_linux_input) {
- SDL_MouseQuit();
- } else {
- SDL_DelMouse(0);
- }
-}
-
-
-/* This is called when a mouse motion event occurs */
-static void
-DirectFB_MoveCursor(SDL_Cursor * cursor)
-{
-
-}
-
-/* Warp the mouse to (x,y) */
-static void
-DirectFB_WarpMouse(SDL_Mouse * mouse, SDL_Window * window, int x, int y)
-{
- SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
- DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata;
- DFB_WindowData *windata = (DFB_WindowData *) window->driverdata;
- DFBResult ret;
- int cx, cy;
-
- SDL_DFB_CHECKERR(windata->dfbwin->GetPosition(windata->dfbwin, &cx, &cy));
- SDL_DFB_CHECKERR(dispdata->layer->WarpCursor(dispdata->layer,
- cx + x + windata->client.x,
- cy + y + windata->client.y));
-
- error:
- return;
-}
-
-/* Free the mouse when it's time */
-static void
-DirectFB_FreeMouse(SDL_Mouse * mouse)
-{
- /* nothing yet */
-}
-
-#else /* USE_MULTI_API */
-
-void
-DirectFB_InitMouse(_THIS)
-{
- SDL_DFB_DEVICEDATA(_this);
-
- SDL_Mouse *mouse = SDL_GetMouse();
-
- mouse->CreateCursor = DirectFB_CreateCursor;
- mouse->ShowCursor = DirectFB_ShowCursor;
- mouse->WarpMouse = DirectFB_WarpMouse;
- mouse->FreeCursor = DirectFB_FreeCursor;
-
- SDL_SetDefaultCursor(DirectFB_CreateDefaultCursor());
-
- devdata->num_mice = 1;
-}
-
-void
-DirectFB_QuitMouse(_THIS)
-{
-}
-
-
-#endif
-
-#endif /* SDL_VIDEO_DRIVER_DIRECTFB */
-
-/* vi: set ts=4 sw=4 expandtab: */