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