From c2384ac19ed1a2b8b8406594459275d45dccbe96 Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:08:53 +0000 Subject: [PATCH 01/10] Added support for 3Dconnexion Space Navigator. (cherry picked from commit 857105a0b4a4c44fcdd9b11a33eff0c910ce41a9) (cherry picked from commit 857105a0b4a4c44fcdd9b11a33eff0c910ce41a9) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1759 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/fg_spaceball.c | 2 +- .../freeglut/src/mswin/fg_internal_mswin.h | 6 + freeglut/freeglut/src/mswin/fg_main_mswin.c | 10 ++ .../freeglut/src/mswin/fg_spaceball_mswin.c | 141 +++++++++++++++++- 4 files changed, 154 insertions(+), 5 deletions(-) diff --git a/freeglut/freeglut/src/fg_spaceball.c b/freeglut/freeglut/src/fg_spaceball.c index b1b321c..52d9841 100644 --- a/freeglut/freeglut/src/fg_spaceball.c +++ b/freeglut/freeglut/src/fg_spaceball.c @@ -29,7 +29,7 @@ void fgInitialiseSpaceball(void) fgPlatformInitializeSpaceball(); - sball_initialized = 1; + //sball_initialized = 1; } void fgSpaceballClose(void) diff --git a/freeglut/freeglut/src/mswin/fg_internal_mswin.h b/freeglut/freeglut/src/mswin/fg_internal_mswin.h index 0fefb31..c5ef600 100644 --- a/freeglut/freeglut/src/mswin/fg_internal_mswin.h +++ b/freeglut/freeglut/src/mswin/fg_internal_mswin.h @@ -127,6 +127,12 @@ struct tagSFG_PlatformJoystick #define FREEGLUT_MENU_PEN_HBACK_COLORS {0.15f, 0.15f, 0.45f, 1.0f} +/* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */ +/* Spaceball device functions, defined in fg_spaceball_mswin.c */ +//Added by Jinrong Xie (stonexjr @ gmail.com) 12/24/2014 +int fgIsSpaceballWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam); +void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam); + /* Function to be called on exit */ extern void (__cdecl *__glutExitFunc)( int return_value ); diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 54ec12c..97b8363 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -1543,6 +1543,16 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; } #endif + //Added by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 + //for SpaceNavigator support on Windows. + /* + case WM_ACTIVATEAPP: + fgInitialiseSpaceball(); + break; + */ + case WM_INPUT: + fgSpaceballHandleWinEvent(hWnd, wParam, lParam); + break; default: /* Handle unhandled messages */ lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 3726389..4d96c31 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -2,11 +2,15 @@ * fg_spaceball_mswin.c * * Spaceball support for Windows - * + * * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved. * Written by Evan Felix * Creation date: Sat Feb 4, 2012 * + * Copyright (c) 2014 Jinrong Xie. All Rights Reserved. + * Written by Jinrong Xie + * Modification date: Wed Dec 24, 2014 + * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation @@ -24,16 +28,47 @@ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + /* - * This code is a very complicated way of doing nothing. - * But is needed for mswindows platform builds. + * This code is enhanced by at least supporting 3Dconnexion's + * six degree of freedom navigator. */ #include #include "../fg_internal.h" +enum { + SPNAV_EVENT_ANY, + SPNAV_EVENT_MOTION_TRANSLATION, + SPNAV_EVENT_MOTION_ROTATION, + SPNAV_EVENT_BUTTON /* includes both press and release */ +}; + +extern int sball_initialized; +unsigned int __fgSpaceKeystate = 0; +RAWINPUTDEVICE __fgSpaceball = { 0x01, 0x08, 0x00, 0x00 }; + void fgPlatformInitializeSpaceball(void) { + HWND hwnd; + sball_initialized = 1; + if (!fgStructure.CurrentWindow) + { + sball_initialized = 0; + return; + } + hwnd = fgStructure.CurrentWindow->Window.Handle; + + BOOL ok; + UINT cbSize = sizeof(__fgSpaceball); + __fgSpaceball.hwndTarget = hwnd; + ok = RegisterRawInputDevices(&__fgSpaceball, 1, cbSize); + + if (!ok){ + __fgSpaceball.hwndTarget = NULL; + sball_initialized = 0; + } + return; } @@ -44,7 +79,7 @@ void fgPlatformSpaceballClose(void) int fgPlatformHasSpaceball(void) { - return 0; + return __fgSpaceball.hwndTarget ? 1 : 0; } int fgPlatformSpaceballNumButtons(void) @@ -56,3 +91,101 @@ void fgPlatformSpaceballSetWindow(SFG_Window *window) { return; } + +int fgIsSpaceballWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) +{ +} + +void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) +{ + #define LOGITECH_VENDOR_ID 0x46d + HRAWINPUT hRawInput = (HRAWINPUT)lParam; + UINT inputCode = (UINT)wParam; + RAWINPUTHEADER hdr; + UINT size; + BYTE *rawInputBuffer; + PRAWINPUT pRawInput; + UINT res; + RID_DEVICE_INFO sRidDeviceInfo; + + if (!sball_initialized) + { + fgPlatformInitializeSpaceball(); + if (!sball_initialized) + { + return; + } + } + + res = GetRawInputData(hRawInput, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)); + if (res == -1) + return; + + rawInputBuffer = (BYTE*)malloc(size); + pRawInput = (PRAWINPUT)rawInputBuffer; + + res = GetRawInputData(hRawInput, RID_INPUT, pRawInput, &size, sizeof(RAWINPUTHEADER)); + if (res == -1) + return; + if (pRawInput->header.dwType != RIM_TYPEHID) + return; + + sRidDeviceInfo.cbSize = sizeof(RID_DEVICE_INFO); + size = sizeof(RID_DEVICE_INFO); + res = GetRawInputDeviceInfo(pRawInput->header.hDevice, RIDI_DEVICEINFO, &sRidDeviceInfo, &size); + if (res == -1) + return; + + SFG_Window* window = fgWindowByHandle(hwnd); + if ((window == NULL)) + return; + + if (sRidDeviceInfo.hid.dwVendorId == LOGITECH_VENDOR_ID) + { + // Motion data comes in two parts: motion type and + // displacement/rotation along three axis. + // Orientation is a right handed coordinate system with + // X goes right, Y goes up and Z goes towards viewer, e.g. + // the one used in OpenGL + if (pRawInput->data.hid.bRawData[0] == + SPNAV_EVENT_MOTION_TRANSLATION)//0x01) + { // Translation vector + short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]); + short X = pnData[0]; + short Y = -pnData[2]; + short Z = pnData[1]; + INVOKE_WCB(*window, SpaceMotion, (X, Y, Z)); + } + else if (pRawInput->data.hid.bRawData[0] == + SPNAV_EVENT_MOTION_ROTATION)//0x02) + { // Axis aligned rotation vector + short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]); + short rX = pnData[0]; + short rY = -pnData[2]; + short rZ = pnData[1]; + INVOKE_WCB(*window, SpaceRotation, (rX, rY, rZ)); + } + else if (pRawInput->data.hid.bRawData[0] == + SPNAV_EVENT_BUTTON)//0x03) + { // State of the keys + unsigned long dwKeystate = *(unsigned long*)(&pRawInput->data.hid.bRawData[1]); + unsigned int state = GLUT_UP; + if (FETCH_WCB(*window, SpaceButton)) + { + int i; + for (i = 0; i < 32; i++) + { + unsigned long stateBefore = __fgSpaceKeystate&(1 << i); + unsigned long stateNow = dwKeystate&(1 << i); + + if (stateBefore && !stateNow) + INVOKE_WCB(*window, SpaceButton, (stateBefore, GLUT_DOWN)); + if (!stateBefore && stateNow) + INVOKE_WCB(*window, SpaceButton, (stateNow, GLUT_UP)); + + } + } + __fgSpaceKeystate = dwKeystate; + } + } +} \ No newline at end of file From b593d219d67205e8201edc4bcc3c01013c3b47ab Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:00 +0000 Subject: [PATCH 02/10] Added support for 3Dconnexion Space Navigator. (cherry picked from commit 5c1e897f1a843963f5f8e49314ce06424a2525b3) (cherry picked from commit 5c1e897f1a843963f5f8e49314ce06424a2525b3) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1760 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 4d96c31..901954d 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -30,6 +30,8 @@ */ /* + * Modified by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 + * for Space Navigator support on Windows. * This code is enhanced by at least supporting 3Dconnexion's * six degree of freedom navigator. */ @@ -68,8 +70,6 @@ void fgPlatformInitializeSpaceball(void) __fgSpaceball.hwndTarget = NULL; sball_initialized = 0; } - - return; } void fgPlatformSpaceballClose(void) @@ -94,6 +94,7 @@ void fgPlatformSpaceballSetWindow(SFG_Window *window) int fgIsSpaceballWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) { + return 0; } void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) @@ -101,7 +102,6 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) #define LOGITECH_VENDOR_ID 0x46d HRAWINPUT hRawInput = (HRAWINPUT)lParam; UINT inputCode = (UINT)wParam; - RAWINPUTHEADER hdr; UINT size; BYTE *rawInputBuffer; PRAWINPUT pRawInput; From 949f7b37475ad30ac59fe004f7bd2d5e032cdd67 Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:06 +0000 Subject: [PATCH 03/10] minor update making code more compact. (cherry picked from commit 09f401761814677e37e750aeecb9ffee450bd989) (cherry picked from commit 09f401761814677e37e750aeecb9ffee450bd989) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1761 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_main_mswin.c | 10 ++++------ freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 97b8363..247312d 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -1545,13 +1545,11 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR #endif //Added by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 //for SpaceNavigator support on Windows. - /* - case WM_ACTIVATEAPP: - fgInitialiseSpaceball(); - break; - */ case WM_INPUT: - fgSpaceballHandleWinEvent(hWnd, wParam, lParam); + if (fgHasSpaceball()) + { + fgSpaceballHandleWinEvent(hWnd, wParam, lParam); + } break; default: /* Handle unhandled messages */ diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 901954d..ba2ccf0 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -148,7 +148,7 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) // X goes right, Y goes up and Z goes towards viewer, e.g. // the one used in OpenGL if (pRawInput->data.hid.bRawData[0] == - SPNAV_EVENT_MOTION_TRANSLATION)//0x01) + SPNAV_EVENT_MOTION_TRANSLATION) { // Translation vector short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]); short X = pnData[0]; @@ -157,7 +157,7 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) INVOKE_WCB(*window, SpaceMotion, (X, Y, Z)); } else if (pRawInput->data.hid.bRawData[0] == - SPNAV_EVENT_MOTION_ROTATION)//0x02) + SPNAV_EVENT_MOTION_ROTATION) { // Axis aligned rotation vector short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]); short rX = pnData[0]; @@ -166,7 +166,7 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) INVOKE_WCB(*window, SpaceRotation, (rX, rY, rZ)); } else if (pRawInput->data.hid.bRawData[0] == - SPNAV_EVENT_BUTTON)//0x03) + SPNAV_EVENT_BUTTON) { // State of the keys unsigned long dwKeystate = *(unsigned long*)(&pRawInput->data.hid.bRawData[1]); unsigned int state = GLUT_UP; From 238b0ae02c4eda1f8e81619269f20b3bac6630ed Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:13 +0000 Subject: [PATCH 04/10] Minor fix on indentation. (cherry picked from commit bfe1b60a499ab12e648d9d68c8012b35fa5eec11) (cherry picked from commit bfe1b60a499ab12e648d9d68c8012b35fa5eec11) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1762 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_main_mswin.c | 4 ++-- freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 247312d..b384b08 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -1543,8 +1543,8 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; } #endif - //Added by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 - //for SpaceNavigator support on Windows. + //Added by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 + //for SpaceNavigator support on Windows. case WM_INPUT: if (fgHasSpaceball()) { diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index ba2ccf0..5a0d85d 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -10,7 +10,7 @@ * Copyright (c) 2014 Jinrong Xie. All Rights Reserved. * Written by Jinrong Xie * Modification date: Wed Dec 24, 2014 - + * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation From 8dfbfaca71fe194bac0c68ee47f89f53ce7cf34b Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:20 +0000 Subject: [PATCH 05/10] Minor fix on indentation. (cherry picked from commit c93cdcdbbd8e3611ad3e8a0ca32bba9be2ff0c2c) (cherry picked from commit c93cdcdbbd8e3611ad3e8a0ca32bba9be2ff0c2c) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1763 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_main_mswin.c | 4 ++-- freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index b384b08..17d00e1 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -1543,8 +1543,8 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; } #endif - //Added by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 - //for SpaceNavigator support on Windows. + //Added by Jinrong Xie 12/24/2014 + //for SpaceNavigator support on Windows. case WM_INPUT: if (fgHasSpaceball()) { diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 5a0d85d..09f6a96 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -53,7 +53,7 @@ RAWINPUTDEVICE __fgSpaceball = { 0x01, 0x08, 0x00, 0x00 }; void fgPlatformInitializeSpaceball(void) { HWND hwnd; - sball_initialized = 1; + sball_initialized = 1; if (!fgStructure.CurrentWindow) { sball_initialized = 0; @@ -188,4 +188,4 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) __fgSpaceKeystate = dwKeystate; } } -} \ No newline at end of file +} From 8cafe7e34c7a947af102006fd16bad43a473485a Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:27 +0000 Subject: [PATCH 06/10] fixed unsafe usage of malloc() pointed out by jtsiomb. (cherry picked from commit aa5514903def8bcc8ceac2487f629b766d23094d) (cherry picked from commit aa5514903def8bcc8ceac2487f629b766d23094d) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1764 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_internal_mswin.h | 2 +- freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/freeglut/freeglut/src/mswin/fg_internal_mswin.h b/freeglut/freeglut/src/mswin/fg_internal_mswin.h index c5ef600..912b6f7 100644 --- a/freeglut/freeglut/src/mswin/fg_internal_mswin.h +++ b/freeglut/freeglut/src/mswin/fg_internal_mswin.h @@ -129,7 +129,7 @@ struct tagSFG_PlatformJoystick /* -- PRIVATE FUNCTION DECLARATIONS ---------------------------------------- */ /* Spaceball device functions, defined in fg_spaceball_mswin.c */ -//Added by Jinrong Xie (stonexjr @ gmail.com) 12/24/2014 +//Added by Jinrong Xie 12/24/2014 int fgIsSpaceballWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam); void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam); diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 09f6a96..277b648 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -37,6 +37,7 @@ */ #include +#include #include "../fg_internal.h" enum { @@ -121,7 +122,7 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) if (res == -1) return; - rawInputBuffer = (BYTE*)malloc(size); + rawInputBuffer = malloc(size * sizeof *rawInputBuffer); pRawInput = (PRAWINPUT)rawInputBuffer; res = GetRawInputData(hRawInput, RID_INPUT, pRawInput, &size, sizeof(RAWINPUTHEADER)); From 5259e6156bdbad192116a650e1b558f67e16171f Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:33 +0000 Subject: [PATCH 07/10] fixed unsafe usage of malloc() pointed out by jtsiomb. (cherry picked from commit 16bc9077353d8c08e5214ec09288ec03f53aed97) (cherry picked from commit 16bc9077353d8c08e5214ec09288ec03f53aed97) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1765 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/src/mswin/fg_spaceball_mswin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index 277b648..f9bad24 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -30,7 +30,7 @@ */ /* - * Modified by Jinrong Xie (stonexjr@gmail.com) 12/24/2014 + * Modified by Jinrong Xie 12/24/2014 * for Space Navigator support on Windows. * This code is enhanced by at least supporting 3Dconnexion's * six degree of freedom navigator. From e595297dafac0d7ae6e9dfcf04ff0a9ebb2311ad Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:42 +0000 Subject: [PATCH 08/10] update CMake file so that it will generate proper _WIN32_WINNT and WINVER definitions in visual studio project setting. (cherry picked from commit 96e89316b6de6502522f1527b0e132e731af175a) (cherry picked from commit 96e89316b6de6502522f1527b0e132e731af175a) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1766 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/CMakeLists.txt | 16 +++++++-- freeglut/freeglut/src/fg_spaceball.c | 33 +++++++++++++++++-- freeglut/freeglut/src/mswin/fg_main_mswin.c | 6 ++-- .../freeglut/src/mswin/fg_spaceball_mswin.c | 4 +++ 4 files changed, 52 insertions(+), 7 deletions(-) diff --git a/freeglut/freeglut/CMakeLists.txt b/freeglut/freeglut/CMakeLists.txt index 34873c1..2467cd4 100644 --- a/freeglut/freeglut/CMakeLists.txt +++ b/freeglut/freeglut/CMakeLists.txt @@ -273,9 +273,21 @@ IF(WIN32) SET( CMAKE_DEBUG_POSTFIX "d" ) ENDIF(MSVC) + IF(NOT(MSVC_VERSION LESS "1300")) + # minimum requirement for spaceball device + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) + ADD_DEFINITIONS(-DWINVER=0x0501) + ELSE() # enable the use of Win2000 APIs (needed for really old compilers like MSVC6) - ADD_DEFINITIONS(-D_WIN32_WINNT=0x0500) - ADD_DEFINITIONS(-DWINVER=0x0500) + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0500) + ADD_DEFINITIONS(-DWINVER=0x0500) + ENDIF() + + IF(NOT(MSVC_VERSION LESS "1600")) + # minimum requirement for WM_TOUCH device + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0601) + ADD_DEFINITIONS(-DWINVER=0x0601) + ENDIF() ENDIF() IF(CMAKE_COMPILER_IS_GNUCC) diff --git a/freeglut/freeglut/src/fg_spaceball.c b/freeglut/freeglut/src/fg_spaceball.c index 52d9841..16b0c52 100644 --- a/freeglut/freeglut/src/fg_spaceball.c +++ b/freeglut/freeglut/src/fg_spaceball.c @@ -7,9 +7,12 @@ * magellan X-based protocol. */ + #include #include "fg_internal.h" +#if(_WIN32_WINNT >= 0x0501) + /* -- PRIVATE FUNCTIONS --------------------------------------------------- */ extern void fgPlatformInitializeSpaceball(void); @@ -28,13 +31,12 @@ void fgInitialiseSpaceball(void) } fgPlatformInitializeSpaceball(); - - //sball_initialized = 1; } void fgSpaceballClose(void) { - fgPlatformSpaceballClose();} + fgPlatformSpaceballClose(); +} int fgHasSpaceball(void) { @@ -74,3 +76,28 @@ void fgSpaceballSetWindow(SFG_Window *window) fgPlatformSpaceballSetWindow(window); } +#else + +void fgInitialiseSpaceball(void) +{ +} + +void fgSpaceballClose(void) +{ +} + +int fgHasSpaceball(void) +{ + return 0; +} + +int fgSpaceballNumButtons(void) +{ + return 0; +} + +void fgSpaceballSetWindow(SFG_Window *window) +{ +} + +#endif diff --git a/freeglut/freeglut/src/mswin/fg_main_mswin.c b/freeglut/freeglut/src/mswin/fg_main_mswin.c index 17d00e1..20a635b 100644 --- a/freeglut/freeglut/src/mswin/fg_main_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_main_mswin.c @@ -1543,14 +1543,16 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR break; } #endif - //Added by Jinrong Xie 12/24/2014 - //for SpaceNavigator support on Windows. + +#ifdef WM_INPUT case WM_INPUT: + /* Added by Jinrong Xie for SpaceNavigator support on Windows. Dec 2014 */ if (fgHasSpaceball()) { fgSpaceballHandleWinEvent(hWnd, wParam, lParam); } break; +#endif default: /* Handle unhandled messages */ lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); diff --git a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c index f9bad24..84d848d 100644 --- a/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_spaceball_mswin.c @@ -36,6 +36,8 @@ * six degree of freedom navigator. */ +#if(_WIN32_WINNT >= 0x0501) + #include #include #include "../fg_internal.h" @@ -190,3 +192,5 @@ void fgSpaceballHandleWinEvent(HWND hwnd, WPARAM wParam, LPARAM lParam) } } } + +#endif \ No newline at end of file From 976e05c12f01c8b38d5b9c9e1110582e97445060 Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:09:48 +0000 Subject: [PATCH 09/10] minor fix on CMakeLists for checking MSVC_VERSION (cherry picked from commit ce15044f7362943aee7d465bf20310ba02991dae) (cherry picked from commit ce15044f7362943aee7d465bf20310ba02991dae) git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1767 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/freeglut/CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/freeglut/freeglut/CMakeLists.txt b/freeglut/freeglut/CMakeLists.txt index 2467cd4..7d7d685 100644 --- a/freeglut/freeglut/CMakeLists.txt +++ b/freeglut/freeglut/CMakeLists.txt @@ -273,7 +273,11 @@ IF(WIN32) SET( CMAKE_DEBUG_POSTFIX "d" ) ENDIF(MSVC) - IF(NOT(MSVC_VERSION LESS "1300")) + IF(NOT(MSVC_VERSION LESS "1600")) + # minimum requirement for WM_TOUCH device + ADD_DEFINITIONS(-D_WIN32_WINNT=0x0601) + ADD_DEFINITIONS(-DWINVER=0x0601) + ELSEIF(NOT(MSVC_VERSION LESS "1300")) # minimum requirement for spaceball device ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) ADD_DEFINITIONS(-DWINVER=0x0501) @@ -283,11 +287,6 @@ IF(WIN32) ADD_DEFINITIONS(-DWINVER=0x0500) ENDIF() - IF(NOT(MSVC_VERSION LESS "1600")) - # minimum requirement for WM_TOUCH device - ADD_DEFINITIONS(-D_WIN32_WINNT=0x0601) - ADD_DEFINITIONS(-DWINVER=0x0601) - ENDIF() ENDIF() IF(CMAKE_COMPILER_IS_GNUCC) From 5d045f4f155ac499b43fc705f823b74a111995df Mon Sep 17 00:00:00 2001 From: dcnieho Date: Mon, 29 Jun 2015 10:14:05 +0000 Subject: [PATCH 10/10] todo note about Windows 8 touch support git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1768 7f0cb862-5218-0410-a997-914c9d46530a --- freeglut/web-src/progress.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/freeglut/web-src/progress.php b/freeglut/web-src/progress.php index 4c5c47e..f259f50 100644 --- a/freeglut/web-src/progress.php +++ b/freeglut/web-src/progress.php @@ -34,6 +34,9 @@ enhancements: 3.0 or later. that take an additional void* that is passed back to the user upon invocation.3.2 +Windows 8 touch supportWindows 8 replaced how touch +input works, so we need to implement support for that.3.2 + 10bit display formatsGLUT supports that but FreeGLUT currently does not. Unfinished effort to implement here.3.0