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