6f8feba6695380f328ca8afead6a496e9954d40d
[freeglut] / src / Common / freeglut_spaceball.c
1 /* Spaceball support for Linux.\r
2  * Written by John Tsiombikas <nuclear@member.fsf.org>\r
3  *\r
4  * This code supports 3Dconnexion's 6-dof space-whatever devices.\r
5  * It can communicate with either the proprietary 3Dconnexion daemon (3dxsrv)\r
6  * free spacenavd (http://spacenav.sourceforge.net), through the "standard"\r
7  * magellan X-based protocol.\r
8  */\r
9 \r
10 #include <GL/freeglut.h>\r
11 #include "freeglut_internal.h"\r
12 \r
13 /* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
14 \r
15 extern void fgPlatformInitializeSpaceball(void);\r
16 extern void fgPlatformSpaceballClose(void);\r
17 extern int fgPlatformHasSpaceball(void);\r
18 extern int fgPlatformSpaceballNumButtons(void);\r
19 extern void fgPlatformSpaceballSetWindow(SFG_Window *window);\r
20 \r
21 \r
22 int sball_initialized = 0;\r
23 \r
24 void fgInitialiseSpaceball(void)\r
25 {\r
26     if(sball_initialized != 0) {\r
27         return;\r
28     }\r
29 \r
30     fgPlatformInitializeSpaceball();\r
31 \r
32     sball_initialized = 1;\r
33 }\r
34 \r
35 void fgSpaceballClose(void)\r
36 {\r
37         fgPlatformSpaceballClose();}\r
38 \r
39 int fgHasSpaceball(void)\r
40 {\r
41     if(sball_initialized == 0) {\r
42         fgInitialiseSpaceball();\r
43         if(sball_initialized != 1) {\r
44             fgWarning("fgInitialiseSpaceball failed\n");\r
45             return 0;\r
46         }\r
47     }\r
48 \r
49     return fgPlatformHasSpaceball();\r
50 }\r
51 \r
52 int fgSpaceballNumButtons(void)\r
53 {\r
54     if(sball_initialized == 0) {\r
55         fgInitialiseSpaceball();\r
56         if(sball_initialized != 1) {\r
57             fgWarning("fgInitialiseSpaceball failed\n");\r
58             return 0;\r
59         }\r
60     }\r
61 \r
62     return fgPlatformSpaceballNumButtons();\r
63 }\r
64 \r
65 void fgSpaceballSetWindow(SFG_Window *window)\r
66 {\r
67     if(sball_initialized == 0) {\r
68         fgInitialiseSpaceball();\r
69         if(sball_initialized != 1) {\r
70             return;\r
71         }\r
72     }\r
73 \r
74     fgPlatformSpaceballSetWindow(window);\r
75 }\r
76 \r