Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

The mouse position is relative to the client window.

Fixed setting the mouse focus when the mouse enters/leaves the window.
  • Loading branch information
slouken committed Jan 3, 2009
1 parent 1234a73 commit 804ca9335b774838c40206d4f8ccc350eda33117
Showing with 19 additions and 11 deletions.
  1. +17 −6 src/video/win32/SDL_win32events.c
  2. +2 −4 src/video/win32/SDL_win32mouse.c
  3. +0 −1 src/video/win32/SDL_win32video.h
@@ -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,
@@ -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) {
@@ -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);
@@ -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);
@@ -75,7 +75,6 @@ typedef struct SDL_VideoData
BOOL (*WTClose) (HCTX);
/* *INDENT-ON* */

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

0 comments on commit 804ca93

Please sign in to comment.