1 /***********************************************************
2 * Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
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.
11 * DESCRIPTION: code for handling custom mouse cursors
12 ***********************************************************/
14 /***********************************************************
16 ***********************************************************/
19 #include "glutState.h"
20 #include "glutCursors.h"
22 static const unsigned char *cursorTable
[] = {
23 XC_arrow
, /* GLUT_CURSOR_RIGHT_ARROW */
24 XC_top_left_arrow
, /* GLUT_CURSOR_LEFT_ARROW */
25 XC_hand1
, /* GLUT_CURSOR_INFO */
26 XC_pirate
, /* GLUT_CURSOR_DESTROY */
27 XC_question_arrow
, /* GLUT_CURSOR_HELP */
28 XC_exchange
, /* GLUT_CURSOR_CYCLE */
29 XC_spraycan
, /* GLUT_CURSOR_SPRAY */
30 XC_watch
, /* GLUT_CURSOR_WAIT */
31 XC_xterm
, /* GLUT_CURSOR_TEXT */
32 XC_crosshair
, /* GLUT_CURSOR_CROSSHAIR */
33 XC_sb_v_double_arrow
, /* GLUT_CURSOR_UP_DOWN */
34 XC_sb_h_double_arrow
, /* GLUT_CURSOR_LEFT_RIGHT */
35 XC_top_side
, /* GLUT_CURSOR_TOP_SIDE */
36 XC_bottom_side
, /* GLUT_CURSOR_BOTTOM_SIDE */
37 XC_left_side
, /* GLUT_CURSOR_LEFT_SIDE */
38 XC_right_side
, /* GLUT_CURSOR_RIGHT_SIDE */
39 XC_top_left_corner
, /* GLUT_CURSOR_TOP_LEFT_CORNER */
40 XC_top_right_corner
, /* GLUT_CURSOR_TOP_RIGHT_CORNER */
41 XC_bottom_right_corner
, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */
42 XC_bottom_left_corner
, /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */
45 /***********************************************************
46 * FUNCTION: glutSetCursor (4.13)
48 * DESCRIPTION: set a new mouse cursor for current window
49 ***********************************************************/
50 void glutSetCursor(int cursor
) {
51 gState
.currentWindow
->Window()->Lock();
52 gState
.currentWindow
->cursor
= cursor
;
53 __glutSetCursor(cursor
);
54 gState
.currentWindow
->Window()->Unlock();
57 /***********************************************************
58 * FUNCTION: __glutSetCursor
60 * DESCRIPTION: the actual cursor changing routine
61 ***********************************************************/
62 void __glutSetCursor(int cursor
) {
63 int realcursor
= cursor
;
64 if (cursor
< 0 || cursor
> GLUT_CURSOR_BOTTOM_LEFT_CORNER
) {
66 case GLUT_CURSOR_INHERIT
:
67 return; // don't change cursor
68 case GLUT_CURSOR_NONE
:
69 // this hides the cursor until the user moves the mouse
70 // change it to HideCursor() AT YOUR OWN RISK!
71 be_app
->ObscureCursor();
73 case GLUT_CURSOR_FULL_CROSSHAIR
:
74 realcursor
= GLUT_CURSOR_CROSSHAIR
;
77 __glutWarning("unknown cursor\n");
81 be_app
->SetCursor(cursorTable
[realcursor
]);
84 /***********************************************************
85 * FUNCTION: glutWarpPointer (x.xx)
87 * DESCRIPTION: move the mouse pointer to a new location
88 * (note: can't do this in BeOS!)
89 ***********************************************************/
90 void glutWarpPointer(int x
, int y
) { }