From 98584d9b257ef9cd1e5db99033ed0764b7b62ac3 Mon Sep 17 00:00:00 2001 From: Diederick Niehorster Date: Mon, 4 Mar 2013 09:17:03 +0000 Subject: [PATCH] handling of mouse messages more conform docs, some cleanup git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1548 7f0cb862-5218-0410-a997-914c9d46530a --- src/mswin/fg_main_mswin.c | 30 ++++++++++++++++++++++-------- src/mswin/fg_window_mswin.c | 4 +--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/mswin/fg_main_mswin.c b/src/mswin/fg_main_mswin.c index ea56131..d962153 100644 --- a/src/mswin/fg_main_mswin.c +++ b/src/mswin/fg_main_mswin.c @@ -681,12 +681,13 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR case WM_MOUSEMOVE: { + /* Per docs, use LOWORD/HIWORD for WinCE and GET_X_LPARAM/GET_Y_LPARAM for desktop windows */ #if defined(_WIN32_WCE) - window->State.MouseX = 320-HIWORD( lParam ); + window->State.MouseX = 320-HIWORD( lParam ); /* XXX: Docs say x should be loword and y hiword? */ window->State.MouseY = LOWORD( lParam ); #else - window->State.MouseX = LOWORD( lParam ); - window->State.MouseY = HIWORD( lParam ); + window->State.MouseX = GET_X_LPARAM( lParam ); + window->State.MouseY = GET_Y_LPARAM( lParam ); #endif /* defined(_WIN32_WCE) */ /* Restrict to [-32768, 32767] to match X11 behaviour */ /* See comment in "freeglut_developer" mailing list 10/4/04 */ @@ -724,12 +725,13 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR GLboolean pressed = GL_TRUE; int button; + /* Per docs, use LOWORD/HIWORD for WinCE and GET_X_LPARAM/GET_Y_LPARAM for desktop windows */ #if defined(_WIN32_WCE) - window->State.MouseX = 320-HIWORD( lParam ); + window->State.MouseX = 320-HIWORD( lParam ); /* XXX: Docs say x should be loword and y hiword? */ window->State.MouseY = LOWORD( lParam ); #else - window->State.MouseX = LOWORD( lParam ); - window->State.MouseY = HIWORD( lParam ); + window->State.MouseX = GET_X_LPARAM( lParam ); + window->State.MouseY = GET_Y_LPARAM( lParam ); #endif /* defined(_WIN32_WCE) */ /* Restrict to [-32768, 32767] to match X11 behaviour */ @@ -832,10 +834,22 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR case WM_MOUSEWHEEL: { - SFG_Window *child_window = NULL; int wheel_number = 0; /* Only one scroll wheel on windows */ - /* int GET_KEYSTATE_WPARAM( wParam ); */ +#if defined(_WIN32_WCE) + int modkeys = LOWORD(wParam); + short ticks = (short)HIWORD(wParam); + /* commented out as should not be needed here, mouse motion is processed in WM_MOUSEMOVE first: + xPos = LOWORD(lParam); -- straight from docs, not consistent with mouse nutton and mouse motion above (which i think is wrong) + yPos = HIWORD(lParam); + */ +#else + /* int modkeys = GET_KEYSTATE_WPARAM( wParam ); */ short ticks = GET_WHEEL_DELTA_WPARAM( wParam ); + /* commented out as should not be needed here, mouse motion is processed in WM_MOUSEMOVE first: + window->State.MouseX = GET_X_LPARAM( lParam ); + window->State.MouseY = GET_Y_LPARAM( lParam ); + */ +#endif /* defined(_WIN32_WCE) */ window = fghWindowUnderCursor(window); diff --git a/src/mswin/fg_window_mswin.c b/src/mswin/fg_window_mswin.c index dbc87b1..518e0d3 100644 --- a/src/mswin/fg_window_mswin.c +++ b/src/mswin/fg_window_mswin.c @@ -406,7 +406,6 @@ void fghGetStyleFromWindow( const SFG_Window *window, DWORD *windowStyle, DWORD } } - /* Computes position of corners of window Rect (outer position including * decorations) based on the provided client rect and based on the style * of the window in question. @@ -455,7 +454,6 @@ void fghComputeWindowRectFromClientArea_QueryWindow( RECT *clientRect, const SFG fghComputeWindowRectFromClientArea_UseStyle(clientRect, windowStyle, windowExStyle, posIsOutside); } - /* Gets the rect describing the client area (drawable area) of the * specified window. Output is position of corners of client area (drawable area) on the screen. * Does not touch clientRect if window pointer or window handle is NULL. @@ -464,7 +462,6 @@ void fghComputeWindowRectFromClientArea_QueryWindow( RECT *clientRect, const SFG void fghGetClientArea( RECT *clientRect, const SFG_Window *window ) { POINT topLeftClient = {0,0}; - POINT topLeftWindow = {0,0}; freeglut_return_if_fail((window && window->Window.Handle)); @@ -476,6 +473,7 @@ void fghGetClientArea( RECT *clientRect, const SFG_Window *window ) OffsetRect(clientRect,topLeftClient.x,topLeftClient.y); } + #if(WINVER >= 0x500) typedef struct { -- 1.7.10.4