handling of mouse messages more conform docs, some cleanup

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1548 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
dcnieho 2013-03-04 09:17:03 +00:00
parent bf4a53a72e
commit 76f9c9a902
2 changed files with 23 additions and 11 deletions

View File

@ -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);

View File

@ -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
{