21 #include "../../SDL_internal.h" 23 #if SDL_VIDEO_DRIVER_WINDOWS 28 #include "../../events/SDL_mouse_c.h" 33 static int rawInputEnableCount = 0;
38 RAWINPUTDEVICE rawMouse = { 0x01, 0x02, 0,
NULL };
41 rawInputEnableCount++;
42 if (rawInputEnableCount > 1) {
46 if (rawInputEnableCount == 0) {
49 rawInputEnableCount--;
50 if (rawInputEnableCount > 0) {
56 rawMouse.dwFlags |= RIDEV_REMOVE;
60 if (RegisterRawInputDevices(&rawMouse, 1,
sizeof(RAWINPUTDEVICE)) ==
FALSE) {
73 WIN_CreateDefaultCursor()
88 WIN_CreateCursor(
SDL_Surface * surface,
int hot_x,
int hot_y)
92 const size_t pad = (
sizeof (
size_t) * 8);
103 bmh.bV4Size =
sizeof(bmh);
104 bmh.bV4Width = surface->
w;
105 bmh.bV4Height = -surface->
h;
107 bmh.bV4BitCount = 32;
109 bmh.bV4AlphaMask = 0xFF000000;
110 bmh.bV4RedMask = 0x00FF0000;
111 bmh.bV4GreenMask = 0x0000FF00;
112 bmh.bV4BlueMask = 0x000000FF;
114 maskbitslen = ((surface->
w + (pad - (surface->
w % pad))) / 8) * surface->
h;
116 if (maskbits ==
NULL) {
127 ii.xHotspot = (DWORD)hot_x;
128 ii.yHotspot = (DWORD)hot_y;
129 ii.hbmColor = CreateDIBSection(hdc, (BITMAPINFO*)&bmh, DIB_RGB_COLORS, &pixels,
NULL, 0);
130 ii.hbmMask = CreateBitmap(surface->
w, surface->
h, 1, 1, maskbits);
131 ReleaseDC(
NULL, hdc);
138 hicon = CreateIconIndirect(&ii);
140 DeleteObject(ii.hbmColor);
141 DeleteObject(ii.hbmMask);
188 hicon = LoadCursor(
NULL, name);
225 HWND hwnd = data->
hwnd;
235 ClientToScreen(hwnd, &pt);
236 SetCursorPos(pt.x, pt.y);
240 WIN_WarpMouseGlobal(
int x,
int y)
246 SetCursorPos(pt.x, pt.y);
251 WIN_SetRelativeMouseMode(
SDL_bool enabled)
253 return ToggleRawInput(enabled);
270 return ToggleRawInput(window !=
NULL);
274 WIN_GetGlobalMouseState(
int *x,
int *y)
321 if (rawInputEnableCount) {
322 rawInputEnableCount = 1;
void SDL_SetDoubleClickTime(Uint32 interval)
SDL_Mouse * SDL_GetMouse(void)
int(* ShowCursor)(SDL_Cursor *cursor)
GLint GLint GLint GLint GLint x
int(* SetRelativeMouseMode)(SDL_bool enabled)
#define SDL_BUTTON_X2MASK
static SDL_Window * window
A collection of pixels used in software blitting.
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
Uint32(* GetGlobalMouseState)(int *x, int *y)
GLuint const GLchar * name
#define SDL_GetKeyboardFocus
uint32_t Uint32
An unsigned 32-bit integer type.
void WIN_OnWindowEnter(_THIS, SDL_Window *window)
void WIN_InitMouse(_THIS)
int(* CaptureMouse)(SDL_Window *window)
SDL_Cursor *(* CreateCursor)(SDL_Surface *surface, int hot_x, int hot_y)
void * SDL_calloc(size_t nmemb, size_t size)
GLint GLint GLint GLint GLint GLint y
uint8_t Uint8
An unsigned 8-bit integer type.
#define SDL_stack_alloc(type, count)
#define SDL_BUTTON_X1MASK
SDL_SystemCursor
Cursor types for SDL_CreateSystemCursor().
void SDL_SetDefaultCursor(SDL_Cursor *cursor)
void WIN_QuitMouse(_THIS)
int(* WarpMouseGlobal)(int x, int y)
GLenum GLenum GLsizei const GLuint GLboolean enabled
void(* FreeCursor)(SDL_Cursor *cursor)
#define SDL_assert(condition)
#define SDL_OutOfMemory()
#define SDL_GetMouseFocus
int WIN_SetError(const char *prefix)
The type used to identify a window.
void(* WarpMouse)(SDL_Window *window, int x, int y)
SDL_VideoDevice * SDL_GetVideoDevice(void)
#define SDL_stack_free(data)
SDL_Cursor *(* CreateSystemCursor)(SDL_SystemCursor id)
#define SDL_Unsupported()
Uint8 focus_click_pending