X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_cursor.c;h=66ed155f087ef7ca8307d3baf7576fa854b12f6a;hb=ce2e5aba172eb85cda2b4f047bdcf9f54d019fd7;hp=e473e16ccbc0fa5939ffcf2dba6f096453b49f12;hpb=bc2136f7281927764a09f6c66d59336c5bf77f98;p=freeglut diff --git a/src/freeglut_cursor.c b/src/freeglut_cursor.c index e473e16..66ed155 100644 --- a/src/freeglut_cursor.c +++ b/src/freeglut_cursor.c @@ -41,7 +41,7 @@ * apart from the windowing system version. */ -/* -- INTERNAL FUNCTIONS --------------------------------------------------- */ +/* -- PRIVATE FUNCTIONS --------------------------------------------------- */ #if TARGET_HOST_UNIX_X11 /* @@ -104,16 +104,13 @@ static cursorCacheEntry cursorCache[] = { }; #endif -/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ +/* -- INTERNAL FUNCTIONS ---------------------------------------------------- */ /* * Set the cursor image to be used for the current window */ -void FGAPIENTRY glutSetCursor( int cursorID ) +void fgSetCursor ( SFG_Window *window, int cursorID ) { - FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetCursor" ); - FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetCursor" ); - #if TARGET_HOST_UNIX_X11 { Cursor cursor; @@ -150,11 +147,13 @@ void FGAPIENTRY glutSetCursor( int cursorID ) } } - if ( ( cursorIDToUse != GLUT_CURSOR_NONE ) && ( cursor == None ) ) { + if ( cursorIDToUse == GLUT_CURSOR_INHERIT ) { + XUndefineCursor( fgDisplay.Display, window->Window.Handle ); + } else if ( cursor != None ) { + XDefineCursor( fgDisplay.Display, window->Window.Handle, cursor ); + } else if ( cursorIDToUse != GLUT_CURSOR_NONE ) { fgError( "Failed to create cursor" ); } - XDefineCursor( fgDisplay.Display, - fgStructure.Window->Window.Handle, cursor ); } #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE @@ -166,7 +165,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) # define MAP_CURSOR(a,b) \ case a: \ SetCursor( LoadCursor( NULL, b ) ); \ - SetClassLong( fgStructure.Window->Window.Handle, \ + SetClassLong( window->Window.Handle, \ GCL_HCURSOR, \ ( LONG )LoadCursor( NULL, b ) ); \ break; @@ -175,7 +174,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) # define ZAP_CURSOR(a,b) \ case a: \ SetCursor( NULL ); \ - SetClassLong( fgStructure.Window->Window.Handle, \ + SetClassLong( window->Window.Handle, \ GCL_HCURSOR, ( LONG )NULL ); \ break; @@ -211,7 +210,20 @@ void FGAPIENTRY glutSetCursor( int cursorID ) } #endif - fgStructure.Window->State.Cursor = cursorID; + window->State.Cursor = cursorID; +} + +/* -- INTERFACE FUNCTIONS -------------------------------------------------- */ + +/* + * Set the cursor image to be used for the current window + */ +void FGAPIENTRY glutSetCursor( int cursorID ) +{ + FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetCursor" ); + FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetCursor" ); + + fgSetCursor ( fgStructure.CurrentWindow, cursorID ); } /* @@ -227,7 +239,7 @@ void FGAPIENTRY glutWarpPointer( int x, int y ) XWarpPointer( fgDisplay.Display, None, - fgStructure.Window->Window.Handle, + fgStructure.CurrentWindow->Window.Handle, 0, 0, 0, 0, x, y ); @@ -242,7 +254,7 @@ void FGAPIENTRY glutWarpPointer( int x, int y ) coords.y = y; /* ClientToScreen() translates {coords} for us. */ - ClientToScreen( fgStructure.Window->Window.Handle, &coords ); + ClientToScreen( fgStructure.CurrentWindow->Window.Handle, &coords ); SetCursorPos( coords.x, coords.y ); }