Navigation Menu

Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
The mouse position is relative to the client window.
Browse files Browse the repository at this point in the history
Fixed setting the mouse focus when the mouse enters/leaves the window.
  • Loading branch information
slouken committed Jan 3, 2009
1 parent 1234a73 commit 804ca93
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 11 deletions.
23 changes: 17 additions & 6 deletions src/video/win32/SDL_win32events.c
Expand Up @@ -221,6 +221,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
const RAWMOUSE *raw_mouse = NULL;
POINT point;
USHORT flags;
int w, h;

/* we're collecting data from the mouse */
GetRawInputData((HRAWINPUT) lParam, RID_INPUT, NULL, &size,
Expand All @@ -241,6 +242,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
}
/* FIXME: Doesn't this defeat the point of using raw input? */
GetCursorPos(&point);
ScreenToClient(hwnd, &point);

SDL_GetWindowSize(data->windowID, &w, &h);
if (point.x >= 0 && point.y >= 0 && point.x < w && point.y < h) {
SDL_SetMouseFocus(index, data->windowID);
} else {
SDL_SetMouseFocus(index, 0);
/* FIXME: Should we be doing anything else here? */
break;
}

/* if the message was sent by a tablet we have to send also pressure */
if (index == tablet) {
Expand Down Expand Up @@ -286,14 +297,14 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

case WM_MOUSELEAVE:
{
int index;
SDL_Mouse *mouse;
int i;

index = data->videodata->mouse;
mouse = SDL_GetMouse(index);
for (i = 0; i < SDL_GetNumMice(); ++i) {
SDL_Mouse *mouse = SDL_GetMouse(i);

if (mouse->focus == data->windowID) {
SDL_SetMouseFocus(index, 0);
if (mouse->focus == data->windowID) {
SDL_SetMouseFocus(i, 0);
}
}
}
return (0);
Expand Down
6 changes: 2 additions & 4 deletions src/video/win32/SDL_win32mouse.c
Expand Up @@ -175,11 +175,9 @@ WIN_InitMouse(_THIS)
int cursors;
data->WTInfoA(WTI_DEVICES, DVC_NPRESSURE, &pressure);
data->WTInfoA(WTI_DEVICES, DVC_NCSRTYPES, &cursors);
data->mouse =
SDL_AddMouse(&mouse, device_name, pressure.axMax,
pressure.axMin, cursors);
SDL_AddMouse(&mouse, device_name, pressure.axMax, pressure.axMin, cursors);
} else {
data->mouse = SDL_AddMouse(&mouse, device_name, 0, 0, 1);
SDL_AddMouse(&mouse, device_name, 0, 0, 1);
}
++index;
SDL_free(buffer);
Expand Down
1 change: 0 additions & 1 deletion src/video/win32/SDL_win32video.h
Expand Up @@ -75,7 +75,6 @@ typedef struct SDL_VideoData
BOOL (*WTClose) (HCTX);
/* *INDENT-ON* */

int mouse;
int keyboard;
SDL_scancode *key_layout;
} SDL_VideoData;
Expand Down

0 comments on commit 804ca93

Please sign in to comment.