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) { }