blob: 5025607922c2115b0f3243891239bbf18df77cc1 [file] [log] [blame]
/* Copyright (c) Mark J. Kilgard, 1997, 1998. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
#ifdef _WIN32
#ifdef __MINGW32__
#include <GL/gl.h>
#endif
#include <windows.h>
#ifndef __CYGWIN32__
#include <mmsystem.h> /* Win32 Multimedia API header. */
#endif
#endif
#include "glutint.h"
/* CENTRY */
void GLUTAPIENTRY
glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval)
{
#ifdef _WIN32
if (joystickFunc && (pollInterval > 0)) {
if (__glutCurrentWindow->entryState == WM_SETFOCUS) {
MMRESULT result;
/* Capture joystick focus if current window has
focus now. */
result = joySetCapture(__glutCurrentWindow->win,
JOYSTICKID1, 0, TRUE);
if (result == JOYERR_NOERROR) {
(void) joySetThreshold(JOYSTICKID1, pollInterval);
}
}
__glutCurrentWindow->joyPollInterval = pollInterval;
} else {
/* Release joystick focus if current window has
focus now. */
if (__glutCurrentWindow->joystick
&& (__glutCurrentWindow->joyPollInterval > 0)
&& (__glutCurrentWindow->entryState == WM_SETFOCUS)) {
(void) joyReleaseCapture(JOYSTICKID1);
}
__glutCurrentWindow->joyPollInterval = 0;
}
__glutCurrentWindow->joystick = joystickFunc;
#else
/* XXX No support currently for X11 joysticks. */
#endif
}
void GLUTAPIENTRY
glutForceJoystickFunc(void)
{
#ifdef _WIN32
if (__glutCurrentWindow->joystick) {
JOYINFOEX jix;
MMRESULT res;
int x, y, z;
/* Poll the joystick. */
jix.dwSize = sizeof(jix);
jix.dwFlags = JOY_RETURNALL;
res = joyGetPosEx(JOYSTICKID1,&jix);
if (res == JOYERR_NOERROR) {
/* Convert to int for scaling. */
x = jix.dwXpos;
y = jix.dwYpos;
z = jix.dwZpos;
#define SCALE(v) ((int) ((v - 32767)/32.768))
__glutCurrentWindow->joystick(jix.dwButtons,
SCALE(x), SCALE(y), SCALE(z));
}
}
#else
/* XXX No support currently for X11 joysticks. */
#endif
}
/* ENDCENTRY */