glut_joy.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:2k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* Copyright (c) Mark J. Kilgard, 1997, 1998. */
  2. /* This program is freely distributable without licensing fees
  3.    and is provided without guarantee or warrantee expressed or
  4.    implied. This program is -not- in the public domain. */
  5. #ifdef _WIN32
  6. #include <windows.h>
  7. #include <mmsystem.h>  /* Win32 Multimedia API header. */
  8. #endif
  9. #include "glutint.h"
  10. /* CENTRY */
  11. void APIENTRY
  12. glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)
  13. {
  14. #ifdef _WIN32
  15.   if (joystickFunc && (pollInterval > 0)) {
  16.     if (__glutCurrentWindow->entryState == WM_SETFOCUS) {
  17.       MMRESULT result;
  18.       /* Capture joystick focus if current window has
  19.     focus now. */
  20.       result = joySetCapture(__glutCurrentWindow->win,
  21.         JOYSTICKID1, 0, TRUE);
  22.       if (result == JOYERR_NOERROR) {
  23.         (void) joySetThreshold(JOYSTICKID1, pollInterval);
  24.       }
  25.     }
  26.     __glutCurrentWindow->joyPollInterval = pollInterval;
  27.   } else {
  28.     /* Release joystick focus if current window has
  29.        focus now. */
  30.     if (__glutCurrentWindow->joystick
  31.       && (__glutCurrentWindow->joyPollInterval > 0)
  32.       && (__glutCurrentWindow->entryState == WM_SETFOCUS)) {
  33.       (void) joyReleaseCapture(JOYSTICKID1);
  34.     }
  35.     __glutCurrentWindow->joyPollInterval = 0;
  36.   }
  37.   __glutCurrentWindow->joystick = joystickFunc;
  38. #else
  39.   /* XXX No support currently for X11 joysticks. */
  40. #endif
  41. }
  42. void APIENTRY
  43. glutForceJoystickFunc(void)
  44. {
  45. #ifdef _WIN32
  46.   if (__glutCurrentWindow->joystick) {
  47.     JOYINFOEX jix;
  48.     MMRESULT res;
  49.     int x, y, z;
  50.     /* Poll the joystick. */
  51.     jix.dwSize = sizeof(jix);
  52.     jix.dwFlags = JOY_RETURNALL;
  53.     res = joyGetPosEx(JOYSTICKID1,&jix);
  54.     if (res == JOYERR_NOERROR) {
  55.       /* Convert to int for scaling. */
  56.       x = jix.dwXpos;
  57.       y = jix.dwYpos;
  58.       z = jix.dwZpos;
  59. #define SCALE(v)  ((int) ((v - 32767)/32.768))
  60.       __glutCurrentWindow->joystick(jix.dwButtons,
  61.         SCALE(x), SCALE(y), SCALE(z));
  62.     }
  63.   }
  64. #else
  65.   /* XXX No support currently for X11 joysticks. */
  66. #endif
  67. }
  68. /* ENDCENTRY */