1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/* 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
#include <windows.h>
#ifndef __CYGWIN32
#include <mmsystem.h> /* Win32 Multimedia API header. */
#endif
#endif
#include "glutint.h"
/* CENTRY */
void APIENTRY
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 APIENTRY
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 */
|