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