91 lines
3.1 KiB
C++
91 lines
3.1 KiB
C++
/***********************************************************
|
|
* Copyright (C) 1997, Be Inc. Copyright (C) 1999, Jake Hamby.
|
|
*
|
|
* 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.
|
|
*
|
|
*
|
|
* FILE: glutCursor.cpp
|
|
*
|
|
* DESCRIPTION: code for handling custom mouse cursors
|
|
***********************************************************/
|
|
|
|
/***********************************************************
|
|
* Headers
|
|
***********************************************************/
|
|
#include <GL/glut.h>
|
|
#include "glutint.h"
|
|
#include "glutState.h"
|
|
#include "glutCursors.h"
|
|
|
|
static const unsigned char *cursorTable[] = {
|
|
XC_arrow, /* GLUT_CURSOR_RIGHT_ARROW */
|
|
XC_top_left_arrow, /* GLUT_CURSOR_LEFT_ARROW */
|
|
XC_hand1, /* GLUT_CURSOR_INFO */
|
|
XC_pirate, /* GLUT_CURSOR_DESTROY */
|
|
XC_question_arrow, /* GLUT_CURSOR_HELP */
|
|
XC_exchange, /* GLUT_CURSOR_CYCLE */
|
|
XC_spraycan, /* GLUT_CURSOR_SPRAY */
|
|
XC_watch, /* GLUT_CURSOR_WAIT */
|
|
XC_xterm, /* GLUT_CURSOR_TEXT */
|
|
XC_crosshair, /* GLUT_CURSOR_CROSSHAIR */
|
|
XC_sb_v_double_arrow, /* GLUT_CURSOR_UP_DOWN */
|
|
XC_sb_h_double_arrow, /* GLUT_CURSOR_LEFT_RIGHT */
|
|
XC_top_side, /* GLUT_CURSOR_TOP_SIDE */
|
|
XC_bottom_side, /* GLUT_CURSOR_BOTTOM_SIDE */
|
|
XC_left_side, /* GLUT_CURSOR_LEFT_SIDE */
|
|
XC_right_side, /* GLUT_CURSOR_RIGHT_SIDE */
|
|
XC_top_left_corner, /* GLUT_CURSOR_TOP_LEFT_CORNER */
|
|
XC_top_right_corner, /* GLUT_CURSOR_TOP_RIGHT_CORNER */
|
|
XC_bottom_right_corner, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */
|
|
XC_bottom_left_corner, /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */
|
|
};
|
|
|
|
/***********************************************************
|
|
* FUNCTION: glutSetCursor (4.13)
|
|
*
|
|
* DESCRIPTION: set a new mouse cursor for current window
|
|
***********************************************************/
|
|
void glutSetCursor(int cursor) {
|
|
gState.currentWindow->Window()->Lock();
|
|
gState.currentWindow->cursor = cursor;
|
|
__glutSetCursor(cursor);
|
|
gState.currentWindow->Window()->Unlock();
|
|
}
|
|
|
|
/***********************************************************
|
|
* FUNCTION: __glutSetCursor
|
|
*
|
|
* DESCRIPTION: the actual cursor changing routine
|
|
***********************************************************/
|
|
void __glutSetCursor(int cursor) {
|
|
int realcursor = cursor;
|
|
if (cursor < 0 || cursor > GLUT_CURSOR_BOTTOM_LEFT_CORNER) {
|
|
switch(cursor) {
|
|
case GLUT_CURSOR_INHERIT:
|
|
return; // don't change cursor
|
|
case GLUT_CURSOR_NONE:
|
|
// this hides the cursor until the user moves the mouse
|
|
// change it to HideCursor() AT YOUR OWN RISK!
|
|
be_app->ObscureCursor();
|
|
return;
|
|
case GLUT_CURSOR_FULL_CROSSHAIR:
|
|
realcursor = GLUT_CURSOR_CROSSHAIR;
|
|
break;
|
|
default:
|
|
__glutWarning("unknown cursor\n");
|
|
return;
|
|
}
|
|
}
|
|
be_app->SetCursor(cursorTable[realcursor]);
|
|
}
|
|
|
|
/***********************************************************
|
|
* FUNCTION: glutWarpPointer (x.xx)
|
|
*
|
|
* DESCRIPTION: move the mouse pointer to a new location
|
|
* (note: can't do this in BeOS!)
|
|
***********************************************************/
|
|
void glutWarpPointer(int x, int y) { }
|