X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffreeglut_cursor.c;h=91bf604b1874682938d16baf45a184b4e9edf8bd;hb=0b1a7966eeafc97ab68fcf331fddeeb22ca3b619;hp=15bc4ea56dd1c24b21f57e756522e4ebb25f8ac4;hpb=f5a6203a479c182d2a2fad69186acb1430c53886;p=freeglut diff --git a/src/freeglut_cursor.c b/src/freeglut_cursor.c index 15bc4ea..91bf604 100644 --- a/src/freeglut_cursor.c +++ b/src/freeglut_cursor.c @@ -35,7 +35,7 @@ #include "freeglut_internal.h" #if TARGET_HOST_UNIX_X11 - #include + #include #endif /* @@ -57,30 +57,31 @@ */ void FGAPIENTRY glutSetCursor( int cursorID ) { - freeglut_assert_ready; - freeglut_assert_window; + freeglut_assert_ready; + freeglut_assert_window; #if TARGET_HOST_UNIX_X11 - /* - * Open issues: - * (a) GLUT_CURSOR_NONE doesn't do what it should. We can probably - * build an empty pixmap for it, though, quite painlessly. - * (b) Are we allocating resources, or causing X to do so? - * If yes, we should arrange to deallocate! - * (c) No error checking. Is that a problem? - * (d) FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows - * for this, but if there is a system that easily supports a full- - * window (or full-screen) crosshair, we might consider it. - * (e) Out-of-range cursor-types are ignored. Should we abort? - * Print a warning message? - */ - { - Cursor cursor; -#define MAP_CURSOR(a,b) case a: cursor = XCreateFontCursor( fgDisplay.Display, b ); break; - if( GLUT_CURSOR_FULL_CROSSHAIR == cursorID ) + /* + * Open issues: + * (a) GLUT_CURSOR_NONE doesn't do what it should. We can probably + * build an empty pixmap for it, though, quite painlessly. + * (b) Are we allocating resources, or causing X to do so? + * If yes, we should arrange to deallocate! + * (c) No error checking. Is that a problem? + * (d) FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows + * for this, but if there is a system that easily supports a full- + * window (or full-screen) crosshair, we might consider it. + * (e) Out-of-range cursor-types are ignored. Should we abort? + * Print a warning message? + */ + { + Cursor cursor; +# define MAP_CURSOR(a,b) case a: cursor = XCreateFontCursor( fgDisplay.Display, b ); break; + if( GLUT_CURSOR_FULL_CROSSHAIR == cursorID ) cursorID = GLUT_CURSOR_CROSSHAIR; - switch( cursorID ) - { + + switch( cursorID ) + { MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, XC_right_ptr); MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, XC_left_ptr); MAP_CURSOR( GLUT_CURSOR_INFO, XC_hand1); @@ -102,24 +103,24 @@ void FGAPIENTRY glutSetCursor( int cursorID ) MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, XC_bottom_right_corner); MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER, XC_bottom_left_corner); MAP_CURSOR( GLUT_CURSOR_NONE, XC_bogosity); - case GLUT_CURSOR_INHERIT: - break; - default: - return; - } - - if( GLUT_CURSOR_INHERIT == cursorID ) - XUndefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle ); - else - XDefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle, cursor ); + case GLUT_CURSOR_INHERIT: + break; + default: + return; } + if( GLUT_CURSOR_INHERIT == cursorID ) + XUndefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle ); + else + XDefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle, cursor ); + } + #elif TARGET_HOST_WIN32 - /* - * This is a temporary solution only... - */ - /* Set the cursor AND change it for this window class. */ + /* + * This is a temporary solution only... + */ + /* Set the cursor AND change it for this window class. */ # define MAP_CURSOR(a,b) case a: SetCursor( LoadCursor( NULL, b ) ); \ SetClassLong(fgStructure.Window->Window.Handle,GCL_HCURSOR,(LONG)LoadCursor(NULL,b)); \ break; @@ -148,7 +149,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) } #endif - fgStructure.Window->State.Cursor = cursorID; + fgStructure.Window->State.Cursor = cursorID; } /* @@ -156,33 +157,32 @@ void FGAPIENTRY glutSetCursor( int cursorID ) */ void FGAPIENTRY glutWarpPointer( int x, int y ) { - freeglut_assert_ready; - freeglut_assert_window; + freeglut_assert_ready; + freeglut_assert_window; #if TARGET_HOST_UNIX_X11 - XWarpPointer( + XWarpPointer( fgDisplay.Display, None, fgStructure.Window->Window.Handle, 0, 0, 0, 0, x, y - ); - XFlush( fgDisplay.Display ); + ); + XFlush( fgDisplay.Display ); #elif TARGET_HOST_WIN32 - { - POINT coords = { x, y }; - /* - * ClientToScreen() translates {coords} for us. - */ - ClientToScreen( fgStructure.Window->Window.Handle, &coords ); - SetCursorPos( coords.x, coords.y ); - } + { + POINT coords = { x, y }; + /* + * ClientToScreen() translates {coords} for us. + */ + ClientToScreen( fgStructure.Window->Window.Handle, &coords ); + SetCursorPos( coords.x, coords.y ); + } #endif - } /*** END OF FILE ***/