some whitespace cleanup
authorDiederick Niehorster <dcnieho@gmail.com>
Wed, 12 Jul 2017 20:44:47 +0000 (20:44 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Wed, 12 Jul 2017 20:44:47 +0000 (20:44 +0000)
(cherry picked from commit 2dd5aa4aa1b5c19392f9abd00e0f6893907df205)

git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1830 7f0cb862-5218-0410-a997-914c9d46530a

src/fg_init.c
src/fg_joystick.c
src/fg_main.c
src/freeglutdll.def.in
src/mswin/fg_joystick_mswin.c
src/mswin/fg_main_mswin.c

index c3c00e5..ed29a83 100644 (file)
@@ -689,14 +689,14 @@ static void fghInitErrorFuncCallback( const char *fmt, va_list ap, FGCBUserData
 
 void FGAPIENTRY glutInitErrorFunc( FGError callback )
 {
-       if (callback)
-       {
-               glutInitErrorFuncUcall( fghInitErrorFuncCallback, (FGCBUserData)callback );
-       }
-       else
-       {
-               glutInitErrorFuncUcall( NULL, NULL );
-       }
+    if (callback)
+    {
+        glutInitErrorFuncUcall( fghInitErrorFuncCallback, (FGCBUserData)callback );
+    }
+    else
+    {
+        glutInitErrorFuncUcall( NULL, NULL );
+    }
 }
 
 /*
@@ -717,14 +717,14 @@ static void fghInitWarningFuncCallback( const char *fmt, va_list ap, FGCBUserDat
 
 void FGAPIENTRY glutInitWarningFunc( FGWarning callback )
 {
-       if (callback)
-       {
-               glutInitWarningFuncUcall( fghInitWarningFuncCallback, (FGCBUserData)callback );
-       }
-       else
-       {
-               glutInitWarningFuncUcall( NULL, NULL );
-       }
+    if (callback)
+    {
+        glutInitWarningFuncUcall( fghInitWarningFuncCallback, (FGCBUserData)callback );
+    }
+    else
+    {
+        glutInitWarningFuncUcall( NULL, NULL );
+    }
 }
 
 /*** END OF FILE ***/
index b73d7e7..2f4f6ed 100644 (file)
@@ -581,7 +581,7 @@ void fgPlatformJoystickRawRead( SFG_Joystick* joy, int* buttons, float* axes )
 
 void fgPlatformJoystickOpen( SFG_Joystick* joy )
 {
-       int i = 0;
+    int i = 0;
     OSStatus err;
 
     /* XXX FIXME: get joystick name in Mac */
@@ -856,7 +856,7 @@ static void fghJoystickOpen( SFG_Joystick* joy )
     joy->num_axes = joy->num_buttons = 0;
     joy->name[ 0 ] = '\0';
 
-       fgPlatformJoystickOpen ( joy );
+    fgPlatformJoystickOpen ( joy );
 
 }
 
@@ -878,7 +878,7 @@ static void fghJoystickInit( int ident )
     fgJoystick[ ident ]->num_axes = fgJoystick[ ident ]->num_buttons = 0;
     fgJoystick[ ident ]->error = GL_TRUE;
 
-       fgPlatformJoystickInit( fgJoystick, ident );
+    fgPlatformJoystickInit( fgJoystick, ident );
 
     fghJoystickOpen( fgJoystick[ ident  ] );
 }
@@ -906,7 +906,7 @@ void fgJoystickClose( void )
     {
         if( fgJoystick[ ident ] )
         {
-                       fgPlatformJoystickClose ( ident );
+            fgPlatformJoystickClose ( ident );
 
             free( fgJoystick[ ident ] );
             fgJoystick[ ident ] = NULL;
index 97c7a32..ff01110 100644 (file)
@@ -179,7 +179,7 @@ static void fghcbCheckJoystickPolls( SFG_Window *window,
                                      SFG_Enumerator *enumerator )
 {
     fg_time_t checkTime;
-    
+
     if (window->State.JoystickPollRate > 0 && FETCH_WCB( *window, Joystick ))
     {
         /* This window has a joystick to be polled (if pollrate <= 0, user needs to poll manually with glutForceJoystickFunc */
@@ -200,7 +200,7 @@ static void fghcbCheckJoystickPolls( SFG_Window *window,
 
 /*
  * Check all windows for joystick polling
- * 
+ *
  * The real way to do this is to make use of the glutTimer() API
  * to more cleanly re-implement the joystick API.  Then, this code
  * and all other "joystick timer" code can be yanked.
@@ -237,18 +237,18 @@ static void fghCheckTimers( void )
     }
 }
 
+
 /* Platform-dependent time in milliseconds, as an unsigned 64-bit integer.
  * This doesn't overflow in any reasonable time, so no need to worry about
  * that. The GLUT API return value will however overflow after 49.7 days,
  * which means you will still get in trouble when running the
  * application for more than 49.7 days.
- */  
+ */
 fg_time_t fgSystemTime(void)
 {
-       return fgPlatformSystemTime();
+    return fgPlatformSystemTime();
 }
-  
+
 /*
  * Elapsed Time
  */
@@ -446,7 +446,7 @@ void fgProcessWork(SFG_Window *window)
 void FGAPIENTRY glutMainLoopEvent( void )
 {
     /* Process input */
-       fgPlatformProcessSingleEvent ();
+    fgPlatformProcessSingleEvent ();
 
     if( fgState.Timers.First )
         fghCheckTimers( );
index 988d7d3..50971bb 100644 (file)
 VERSION @VERSION_MAJOR@.@VERSION_MINOR@
 EXPORTS
-       glutInit
-       glutInitWindowPosition
-       glutInitWindowSize
-       glutInitDisplayMode
-       glutInitDisplayString
-       glutMainLoop
-       glutMainLoopEvent
-       glutLeaveMainLoop
-       glutCreateWindow
-       glutCreateSubWindow
-       glutDestroyWindow
-       glutSetWindow
-       glutGetWindow
-       glutSetWindowData
-       glutGetWindowData
-       glutSetWindowTitle
-       glutSetIconTitle
-       glutReshapeWindow
-       glutPositionWindow
-       glutShowWindow
-       glutHideWindow
-       glutIconifyWindow
-       glutPushWindow
-       glutPopWindow
-       glutFullScreen
-       glutPostWindowRedisplay
-       glutPostRedisplay
-       glutSwapBuffers
-       glutWarpPointer
-       glutSetCursor
-       glutEstablishOverlay
-       glutRemoveOverlay
-       glutUseLayer
-       glutPostOverlayRedisplay
-       glutPostWindowOverlayRedisplay
-       glutShowOverlay
-       glutHideOverlay
-       glutCreateMenu
-       glutDestroyMenu
-       glutGetMenu
-       glutSetMenu
-       glutGetMenuData
-       glutSetMenuData
-       glutAddMenuEntry
-       glutAddSubMenu
-       glutChangeToMenuEntry
-       glutChangeToSubMenu
-       glutRemoveMenuItem
-       glutAttachMenu
-       glutDetachMenu
-       glutTimerFunc
-       glutIdleFunc
-       glutKeyboardFunc
-       glutSpecialFunc
-       glutReshapeFunc
+    glutInit
+    glutInitWindowPosition
+    glutInitWindowSize
+    glutInitDisplayMode
+    glutInitDisplayString
+    glutMainLoop
+    glutMainLoopEvent
+    glutLeaveMainLoop
+    glutCreateWindow
+    glutCreateSubWindow
+    glutDestroyWindow
+    glutSetWindow
+    glutGetWindow
+    glutSetWindowData
+    glutGetWindowData
+    glutSetWindowTitle
+    glutSetIconTitle
+    glutReshapeWindow
+    glutPositionWindow
+    glutShowWindow
+    glutHideWindow
+    glutIconifyWindow
+    glutPushWindow
+    glutPopWindow
+    glutFullScreen
+    glutPostWindowRedisplay
+    glutPostRedisplay
+    glutSwapBuffers
+    glutWarpPointer
+    glutSetCursor
+    glutEstablishOverlay
+    glutRemoveOverlay
+    glutUseLayer
+    glutPostOverlayRedisplay
+    glutPostWindowOverlayRedisplay
+    glutShowOverlay
+    glutHideOverlay
+    glutCreateMenu
+    glutDestroyMenu
+    glutGetMenu
+    glutSetMenu
+    glutGetMenuData
+    glutSetMenuData
+    glutAddMenuEntry
+    glutAddSubMenu
+    glutChangeToMenuEntry
+    glutChangeToSubMenu
+    glutRemoveMenuItem
+    glutAttachMenu
+    glutDetachMenu
+    glutTimerFunc
+    glutIdleFunc
+    glutKeyboardFunc
+    glutSpecialFunc
+    glutReshapeFunc
     glutPositionFunc
-       glutVisibilityFunc
-       glutDisplayFunc
-       glutMouseFunc
-       glutMouseWheelFunc
-       glutMotionFunc
-       glutPassiveMotionFunc
-       glutEntryFunc
-       glutCloseFunc
-       glutWMCloseFunc
-       glutKeyboardUpFunc
-       glutSpecialUpFunc
-       glutJoystickFunc
-       glutMenuStateFunc
-       glutMenuStatusFunc
-       glutMenuDestroyFunc
-       glutOverlayDisplayFunc
-       glutWindowStatusFunc
-       glutSpaceballMotionFunc
-       glutSpaceballRotateFunc
-       glutSpaceballButtonFunc
-       glutButtonBoxFunc
-       glutDialsFunc
-       glutTabletMotionFunc
-       glutTabletButtonFunc
-       glutSetOption
-       glutGet
-       glutDeviceGet
-       glutGetModifiers
-       glutLayerGet
-       glutBitmapCharacter
-       glutBitmapWidth
-       glutStrokeCharacter
-       glutStrokeWidth
-       glutBitmapLength
-       glutStrokeLength
-       glutBitmapHeight
-       glutStrokeHeight
-       glutBitmapString
-       glutStrokeString
-       glutWireCube
-       glutSolidCube
-       glutWireSphere
-       glutSolidSphere
-       glutWireCone
-       glutSolidCone
-       glutWireTorus
-       glutSolidTorus
-       glutWireDodecahedron
-       glutSolidDodecahedron
-       glutWireOctahedron
-       glutSolidOctahedron
-       glutWireTetrahedron
-       glutSolidTetrahedron
-       glutWireIcosahedron
-       glutSolidIcosahedron
-       glutWireRhombicDodecahedron
-       glutSolidRhombicDodecahedron
-       glutWireSierpinskiSponge
-       glutSolidSierpinskiSponge
-       glutWireTeapot
-       glutSolidTeapot
-       glutWireTeacup
-       glutSolidTeacup
-       glutWireTeaspoon
-       glutSolidTeaspoon
-       glutWireCylinder
-       glutSolidCylinder
-       glutGameModeString
-       glutEnterGameMode
-       glutLeaveGameMode
-       glutGameModeGet
-       glutVideoResizeGet
-       glutSetupVideoResizing
-       glutStopVideoResizing
-       glutVideoResize
-       glutVideoPan
-       glutSetColor
-       glutGetColor
-       glutCopyColormap
-       glutIgnoreKeyRepeat
-       glutSetKeyRepeat
-       glutForceJoystickFunc
-       glutExtensionSupported
-       glutReportErrors
-       glutGetProcAddress
-       glutExit
-       glutFullScreenToggle
-       glutLeaveFullScreen
+    glutVisibilityFunc
+    glutDisplayFunc
+    glutMouseFunc
+    glutMouseWheelFunc
+    glutMotionFunc
+    glutPassiveMotionFunc
+    glutEntryFunc
+    glutCloseFunc
+    glutWMCloseFunc
+    glutKeyboardUpFunc
+    glutSpecialUpFunc
+    glutJoystickFunc
+    glutMenuStateFunc
+    glutMenuStatusFunc
+    glutMenuDestroyFunc
+    glutOverlayDisplayFunc
+    glutWindowStatusFunc
+    glutSpaceballMotionFunc
+    glutSpaceballRotateFunc
+    glutSpaceballButtonFunc
+    glutButtonBoxFunc
+    glutDialsFunc
+    glutTabletMotionFunc
+    glutTabletButtonFunc
+    glutSetOption
+    glutGet
+    glutDeviceGet
+    glutGetModifiers
+    glutLayerGet
+    glutBitmapCharacter
+    glutBitmapWidth
+    glutStrokeCharacter
+    glutStrokeWidth
+    glutBitmapLength
+    glutStrokeLength
+    glutBitmapHeight
+    glutStrokeHeight
+    glutBitmapString
+    glutStrokeString
+    glutWireCube
+    glutSolidCube
+    glutWireSphere
+    glutSolidSphere
+    glutWireCone
+    glutSolidCone
+    glutWireTorus
+    glutSolidTorus
+    glutWireDodecahedron
+    glutSolidDodecahedron
+    glutWireOctahedron
+    glutSolidOctahedron
+    glutWireTetrahedron
+    glutSolidTetrahedron
+    glutWireIcosahedron
+    glutSolidIcosahedron
+    glutWireRhombicDodecahedron
+    glutSolidRhombicDodecahedron
+    glutWireSierpinskiSponge
+    glutSolidSierpinskiSponge
+    glutWireTeapot
+    glutSolidTeapot
+    glutWireTeacup
+    glutSolidTeacup
+    glutWireTeaspoon
+    glutSolidTeaspoon
+    glutWireCylinder
+    glutSolidCylinder
+    glutGameModeString
+    glutEnterGameMode
+    glutLeaveGameMode
+    glutGameModeGet
+    glutVideoResizeGet
+    glutSetupVideoResizing
+    glutStopVideoResizing
+    glutVideoResize
+    glutVideoPan
+    glutSetColor
+    glutGetColor
+    glutCopyColormap
+    glutIgnoreKeyRepeat
+    glutSetKeyRepeat
+    glutForceJoystickFunc
+    glutExtensionSupported
+    glutReportErrors
+    glutGetProcAddress
+    glutExit
+    glutFullScreenToggle
+    glutLeaveFullScreen
     glutSetMenuFont
-       glutGetModeValues
-       glutInitContextFlags
-       glutInitContextVersion
-       glutInitContextProfile
-       glutInitErrorFunc
-       glutInitWarningFunc
-       __glutInitWithExit
-       __glutCreateWindowWithExit
-       __glutCreateMenuWithExit
-       glutMultiButtonFunc
-       glutMultiEntryFunc
-       glutMultiMotionFunc
-       glutMultiPassiveFunc
+    glutGetModeValues
+    glutInitContextFlags
+    glutInitContextVersion
+    glutInitContextProfile
+    glutInitErrorFunc
+    glutInitWarningFunc
+    __glutInitWithExit
+    __glutCreateWindowWithExit
+    __glutCreateMenuWithExit
+    glutMultiButtonFunc
+    glutMultiEntryFunc
+    glutMultiMotionFunc
+    glutMultiPassiveFunc
     glutInitContextFunc
     glutAppStatusFunc
     glutSetVertexAttribCoord3
index d584b59..e38c21a 100644 (file)
@@ -170,7 +170,7 @@ static int fghJoystickGetOEMProductName ( SFG_Joystick* joy, char *buf, int buf_
 
 void fgPlatformJoystickOpen( SFG_Joystick* joy )
 {
-       int i = 0;
+    int i = 0;
 
     joy->pJoystick.js.dwFlags = JOY_RETURNALL;
     joy->pJoystick.js.dwSize  = sizeof( joy->pJoystick.js );
index 1958755..8ad8308 100644 (file)
@@ -63,7 +63,7 @@ struct GXKeyList gxKeyList;
 #endif /* _WIN32_WCE */
 
 #ifdef _DEBUG
-/* 
+/*
  * WM_ message to string, for debugging
  * This is taken from the 8.0 SDK, so Windows 8 API and everything earlier is included
  */
@@ -474,7 +474,7 @@ fg_time_t fgPlatformSystemTime ( void )
     /* Check if we just wrapped */
     if (currTime32 < lastTime32)
         timeEpoch++;
-    
+
     lastTime32 = currTime32;
 
     return currTime32 | timeEpoch << 32;
@@ -542,7 +542,7 @@ static void fghPlatformOnWindowStatusNotify(SFG_Window *window, GLboolean visSta
     {
         SFG_Window *saved_window = fgStructure.CurrentWindow;
 
-        /* On win32 we only have two states, window displayed and window not displayed (iconified) 
+        /* On win32 we only have two states, window displayed and window not displayed (iconified)
          * We map these to GLUT_FULLY_RETAINED and GLUT_HIDDEN respectively.
          */
         INVOKE_WCB( *window, WindowStatus, ( visState ? GLUT_FULLY_RETAINED:GLUT_HIDDEN ) );
@@ -592,7 +592,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke
                          rControl = 0, rShift = 0, rAlt = 0;
 
     int keypress = -1;
-    
+
     /* if keydown, check for repeat */
     /* If repeat is globally switched off, it cannot be switched back on per window.
      * But if it is globally switched on, it can be switched off per window. This matches
@@ -601,7 +601,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke
      */
     if( keydown && ( fgState.KeyRepeat==GLUT_KEY_REPEAT_OFF || window->State.IgnoreKeyRepeat==GL_TRUE ) && (HIWORD(lParam) & KF_REPEAT) )
         return 1;
-    
+
     /* Remember the current modifiers state so user can query it from their callback */
     fgState.Modifiers = fgPlatformGetModifiers( );
 
@@ -715,7 +715,7 @@ static LRESULT fghWindowProcKeyPress(SFG_Window *window, UINT uMsg, GLboolean ke
             keypress = GLUT_KEY_F4;
     }
 #endif
-    
+
     if( keypress != -1 )
         if (keydown)
             INVOKE_WCB( *window, Special,
@@ -756,7 +756,7 @@ SFG_Window* fghWindowUnderCursor(SFG_Window *window)
         mouse_pos.x = GET_X_LPARAM(mouse_pos_dw);
         mouse_pos.y = GET_Y_LPARAM(mouse_pos_dw);
         ScreenToClient( window->Window.Handle, &mouse_pos );
-        
+
         hwnd = ChildWindowFromPoint(window->Window.Handle, mouse_pos);
         if (hwnd && hwnd!=window->Window.Handle)   /* can be NULL if mouse outside parent by the time we get here, or can be same as parent if we didn't find a child */
         {
@@ -888,7 +888,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
             width  = LOWORD(lParam);
             height = HIWORD(lParam);
 #endif /* defined(_WIN32_WCE) */
-            
+
             /* Update state and call callback, if there was a change */
             fghOnReshapeNotify(window, width, height, GL_FALSE);
         }
@@ -935,15 +935,15 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
             if (!IsIconic(window->Window.Handle))
             {
                 RECT windowRect;
-                
+
                 /* lParam contains coordinates of top-left of client area.
                  * Get top-left of non-client area of window, matching coordinates of
-                 * glutInitPosition and glutPositionWindow, but not those of 
+                 * glutInitPosition and glutPositionWindow, but not those of
                  * glutGet(GLUT_WINDOW_X) and glutGet(GLUT_WINDOW_Y), which return
                  * top-left of client area.
                  */
                 GetWindowRect( window->Window.Handle, &windowRect );
-            
+
                 if (window->Parent)
                 {
                     /* For child window, we should return relative to upper-left
@@ -1031,7 +1031,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
             {
                 TRACKMOUSEEVENT tme;
 
-                /* Cursor just entered window, set cursor look */ 
+                /* Cursor just entered window, set cursor look */
                 fgSetCursor ( window, window->State.Cursor ) ;
 
                 /* If an EntryFunc callback is specified by the user, also
@@ -1090,7 +1090,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
     case WM_PAINT:
     {
         RECT rect;
-        
+
         /* As per docs, upon receiving WM_PAINT, first check if the update region is not empty before you call BeginPaint */
         if (GetUpdateRect(hWnd,&rect,FALSE))
         {
@@ -1279,7 +1279,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
     {
         int wheel_number = 0;   /* Only one scroll wheel on windows */
 #if defined(_WIN32_WCE)
-        int modkeys = LOWORD(wParam); 
+        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)
@@ -1296,10 +1296,10 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
 
         window = fghWindowUnderCursor(window);
 
-               fgState.MouseWheelTicks += ticks;
+        fgState.MouseWheelTicks += ticks;
         if ( abs ( fgState.MouseWheelTicks ) >= WHEEL_DELTA )
-               {
-                       int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;
+        {
+            int direction = ( fgState.MouseWheelTicks > 0 ) ? 1 : -1;
 
             if( ! FETCH_WCB( *window, MouseWheel ) &&
                 ! FETCH_WCB( *window, Mouse ) )
@@ -1309,7 +1309,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
             fgState.Modifiers = fgPlatformGetModifiers( );
 
             while( abs ( fgState.MouseWheelTicks ) >= WHEEL_DELTA )
-                       {
+            {
                 if( FETCH_WCB( *window, MouseWheel ) )
                     INVOKE_WCB( *window, MouseWheel,
                                 ( wheel_number,
@@ -1319,7 +1319,7 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
                                 )
                     );
                 else  /* No mouse wheel, call the mouse button callback twice */
-                               {
+                {
                     /*
                      * Map wheel zero to button 3 and 4; +1 to 3, -1 to 4
                      *  "    "   one                     +1 to 5, -1 to 6, ...
@@ -1338,13 +1338,13 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
                                 ( button, GLUT_UP,
                                   window->State.MouseX, window->State.MouseY )
                     );
-                               }
+                }
 
-                               fgState.MouseWheelTicks -= WHEEL_DELTA * direction;
-                       }
+                fgState.MouseWheelTicks -= WHEEL_DELTA * direction;
+            }
 
             fgState.Modifiers = INVALID_MODIFIERS;
-               }
+        }
         /* Per docs, should return zero */
         lRet = 0;
     }
@@ -1498,60 +1498,60 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
         break;
 
 #ifdef WM_TOUCH
-       /* handle multi-touch messages */
-       case WM_TOUCH:
-       {
-               unsigned int numInputs = (unsigned int)wParam;
-               unsigned int i = 0;
-               TOUCHINPUT* ti = (TOUCHINPUT*)malloc( sizeof(TOUCHINPUT)*numInputs);
-
-               if (fghGetTouchInputInfo == (pGetTouchInputInfo)0xDEADBEEF) {
-                   fghGetTouchInputInfo = (pGetTouchInputInfo)GetProcAddress(GetModuleHandle("user32"),"GetTouchInputInfo");
-                   fghCloseTouchInputHandle = (pCloseTouchInputHandle)GetProcAddress(GetModuleHandle("user32"),"CloseTouchInputHandle");
-               }
-
-               if (!fghGetTouchInputInfo) { 
-                       free( (void*)ti );
-                       break;
-               }
-
-               if (fghGetTouchInputInfo( (HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT) )) {
-                       /* Handle each contact point */
-                       for (i = 0; i < numInputs; ++i ) {
-
-                               POINT tp;
-                               tp.x = TOUCH_COORD_TO_PIXEL(ti[i].x);
-                               tp.y = TOUCH_COORD_TO_PIXEL(ti[i].y);
-                               ScreenToClient( hWnd, &tp );
-
-                               ti[i].dwID = ti[i].dwID * 2;
-
-                               if (ti[i].dwFlags & TOUCHEVENTF_DOWN) {
-                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_ENTERED ) );
-                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_DOWN ) );
-                               } else if (ti[i].dwFlags & TOUCHEVENTF_MOVE) {
-                                       INVOKE_WCB( *window, MultiMotion, ( ti[i].dwID, tp.x, tp.y ) );
-                               } else if (ti[i].dwFlags & TOUCHEVENTF_UP)   { 
-                                       INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_UP ) );
-                                       INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_LEFT ) );
-                               }
-                       }
-               }
-               fghCloseTouchInputHandle((HTOUCHINPUT)lParam);
-               free( (void*)ti );
-               lRet = 0; /*DefWindowProc( hWnd, uMsg, wParam, lParam );*/
-               break;
-       }
+    /* handle multi-touch messages */
+    case WM_TOUCH:
+    {
+        unsigned int numInputs = (unsigned int)wParam;
+        unsigned int i = 0;
+        TOUCHINPUT* ti = (TOUCHINPUT*)malloc( sizeof(TOUCHINPUT)*numInputs);
+
+        if (fghGetTouchInputInfo == (pGetTouchInputInfo)0xDEADBEEF) {
+            fghGetTouchInputInfo = (pGetTouchInputInfo)GetProcAddress(GetModuleHandle("user32"),"GetTouchInputInfo");
+            fghCloseTouchInputHandle = (pCloseTouchInputHandle)GetProcAddress(GetModuleHandle("user32"),"CloseTouchInputHandle");
+        }
+
+        if (!fghGetTouchInputInfo) {
+            free( (void*)ti );
+            break;
+        }
+
+        if (fghGetTouchInputInfo( (HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT) )) {
+            /* Handle each contact point */
+            for (i = 0; i < numInputs; ++i ) {
+
+                POINT tp;
+                tp.x = TOUCH_COORD_TO_PIXEL(ti[i].x);
+                tp.y = TOUCH_COORD_TO_PIXEL(ti[i].y);
+                ScreenToClient( hWnd, &tp );
+
+                ti[i].dwID = ti[i].dwID * 2;
+
+                if (ti[i].dwFlags & TOUCHEVENTF_DOWN) {
+                    INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_ENTERED ) );
+                    INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_DOWN ) );
+                } else if (ti[i].dwFlags & TOUCHEVENTF_MOVE) {
+                    INVOKE_WCB( *window, MultiMotion, ( ti[i].dwID, tp.x, tp.y ) );
+                } else if (ti[i].dwFlags & TOUCHEVENTF_UP)   {
+                    INVOKE_WCB( *window, MultiButton, ( ti[i].dwID, tp.x, tp.y, 0, GLUT_UP ) );
+                    INVOKE_WCB( *window, MultiEntry,  ( ti[i].dwID, GLUT_LEFT ) );
+                }
+            }
+        }
+        fghCloseTouchInputHandle((HTOUCHINPUT)lParam);
+        free( (void*)ti );
+        lRet = 0; /*DefWindowProc( hWnd, uMsg, wParam, lParam );*/
+        break;
+    }
 #endif
 
 #ifdef WM_INPUT
-       case WM_INPUT:
+    case WM_INPUT:
         /* Added by Jinrong Xie <stonexjr at gmail.com> for SpaceNavigator support on Windows. Dec 2014 */
-               if (fgHasSpaceball())
-               {
-                       fgSpaceballHandleWinEvent(hWnd, wParam, lParam);
-               }
-               break;
+        if (fgHasSpaceball())
+        {
+            fgSpaceballHandleWinEvent(hWnd, wParam, lParam);
+        }
+        break;
 #endif
     default:
         /* Handle unhandled messages */
@@ -1615,7 +1615,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
                 window->State.DesiredWidth  = window->State.pWState.OldRect.right  - window->State.pWState.OldRect.left;
                 window->State.DesiredHeight = window->State.pWState.OldRect.bottom - window->State.pWState.OldRect.top;
             }
-                
+
             /* We'll finish off the fullscreen operation below after the other GLUT_POSITION_WORK|GLUT_SIZE_WORK|GLUT_ZORDER_WORK */
         }
         else
@@ -1626,7 +1626,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
             RECT rect;
             HMONITOR hMonitor;
             MONITORINFO mi;
-        
+
             /* save current window rect, style, exstyle and maximized state */
             window->State.pWState.OldMaximized = !!IsZoomed(window->Window.Handle);
             if (window->State.pWState.OldMaximized)
@@ -1649,7 +1649,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
 
             /* For fullscreen mode, find the monitor that is covered the most
                 * by the window and get its rect as the resize target.
-                   */
+                */
             hMonitor= MonitorFromWindow(window->Window.Handle, MONITOR_DEFAULTTONEAREST);
             mi.cbSize = sizeof(mi);
             GetMonitorInfo(hMonitor, &mi);
@@ -1668,7 +1668,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
 
     /* Now deal with normal position, reshape and z order requests (some might have been set when handling GLUT_FULLSCREEN_WORK above */
     {
-        /* get rect describing window's current position and size, 
+        /* get rect describing window's current position and size,
             * in screen coordinates and in FreeGLUT format
             * (size (right-left, bottom-top) is client area size, top and left
             * are outside of window including decorations).
@@ -1678,7 +1678,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
         if (workMask & GLUT_POSITION_WORK)
         {
             flags &= ~SWP_NOMOVE;
-                
+
             /* Move rect so that top-left is at requested position */
             /* This also automatically makes sure that child window requested coordinates are relative
                 * to top-left of parent's client area (needed input for SetWindowPos on child windows),
@@ -1689,7 +1689,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
         if (workMask & GLUT_SIZE_WORK)
         {
             flags &= ~SWP_NOSIZE;
-                
+
             /* Note on maximizing behavior of Windows: the resize borders are off
                 * the screen such that the client area extends all the way from the
                 * leftmost corner to the rightmost corner to maximize screen real
@@ -1724,7 +1724,7 @@ void fgPlatformPosResZordWork(SFG_Window* window, unsigned int workMask)
     if (!window->Parent)
         /* get the window rect from this to feed to SetWindowPos, correct for window decorations */
         fghComputeWindowRectFromClientArea_QueryWindow(&clientRect,window,TRUE);
-    
+
     /* Do the requested positioning, moving, and z order push/pop. */
     SetWindowPos( window->Window.Handle,
                     insertAfter,