From 0d72f166aecf3392abf1c1a31667937f24905264 Mon Sep 17 00:00:00 2001 From: Diederick Niehorster Date: Wed, 27 Feb 2013 09:35:38 +0000 Subject: [PATCH] GLUT_CURSOR_INHERIT now works, also implemented another cursor git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1523 7f0cb862-5218-0410-a997-914c9d46530a --- progs/demos/CallbackMaker/CallbackMaker.c | 2 ++ src/mswin/fg_cursor_mswin.c | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/progs/demos/CallbackMaker/CallbackMaker.c b/progs/demos/CallbackMaker/CallbackMaker.c index ff19b91..1b41b0e 100644 --- a/progs/demos/CallbackMaker/CallbackMaker.c +++ b/progs/demos/CallbackMaker/CallbackMaker.c @@ -702,6 +702,8 @@ main(int argc, char *argv[]) /* callbacks and menus for this window */ SetWindowCallbacks( 0 ); + glutSetCursor(GLUT_CURSOR_INHERIT); /* Inherit cursor look from parent (this is default on window creation) - comment the below to see in action */ + glutSetCursor(GLUT_CURSOR_CYCLE); printf ( "Please enter something to continue: " ); diff --git a/src/mswin/fg_cursor_mswin.c b/src/mswin/fg_cursor_mswin.c index bec1876..d14da59 100644 --- a/src/mswin/fg_cursor_mswin.c +++ b/src/mswin/fg_cursor_mswin.c @@ -71,7 +71,7 @@ void fgPlatformSetCursor ( SFG_Window *window, int cursorID ) switch( cursorID ) { MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW ); - MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); + MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); /* XXX ToDo */ MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP ); MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS ); MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP ); @@ -82,7 +82,7 @@ void fgPlatformSetCursor ( SFG_Window *window, int cursorID ) MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_SIZENS ); MAP_CURSOR( GLUT_CURSOR_LEFT_RIGHT, IDC_SIZEWE ); - MAP_CURSOR( GLUT_CURSOR_TOP_SIDE, IDC_ARROW ); /* XXX ToDo */ + MAP_CURSOR( GLUT_CURSOR_TOP_SIDE, IDC_UPARROW ); MAP_CURSOR( GLUT_CURSOR_BOTTOM_SIDE, IDC_ARROW ); /* XXX ToDo */ MAP_CURSOR( GLUT_CURSOR_LEFT_SIDE, IDC_ARROW ); /* XXX ToDo */ MAP_CURSOR( GLUT_CURSOR_RIGHT_SIDE, IDC_ARROW ); /* XXX ToDo */ @@ -90,9 +90,24 @@ void fgPlatformSetCursor ( SFG_Window *window, int cursorID ) MAP_CURSOR( GLUT_CURSOR_TOP_RIGHT_CORNER, IDC_SIZENESW ); MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, IDC_SIZENWSE ); MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER, IDC_SIZENESW ); - MAP_CURSOR( GLUT_CURSOR_INHERIT, IDC_ARROW ); /* XXX ToDo */ ZAP_CURSOR( GLUT_CURSOR_NONE, NULL ); MAP_CURSOR( GLUT_CURSOR_FULL_CROSSHAIR, IDC_CROSS ); /* XXX ToDo */ + case GLUT_CURSOR_INHERIT: + { + SFG_Window *temp_window = window; + while (temp_window->Parent) + { + temp_window = temp_window->Parent; + if (temp_window->State.Cursor != GLUT_CURSOR_INHERIT) + { + fgPlatformSetCursor(window,temp_window->State.Cursor); + return; + } + } + /* No parent, or no parent with cursor type set. Fall back to default */ + fgPlatformSetCursor(window,GLUT_CURSOR_LEFT_ARROW); + } + break; default: fgError( "Unknown cursor type: %d", cursorID ); -- 1.7.10.4