X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_cursor.c;h=bf5d2eb8036d3c595d1344550f5a8b7fdae33cc4;hb=006650e1dd72e73249d41e2bcea8b1668262a999;hp=e71a3129abbf3de448decc9b2c6cd07963f1eb9b;hpb=cfbe6488d3e0e05a842b5031484fbf3fb4d5c411;p=freeglut diff --git a/src/freeglut_cursor.c b/src/freeglut_cursor.c index e71a312..bf5d2eb 100644 --- a/src/freeglut_cursor.c +++ b/src/freeglut_cursor.c @@ -29,7 +29,7 @@ #include "config.h" #endif -#include "../include/GL/freeglut.h" +#include #include "freeglut_internal.h" #if TARGET_HOST_UNIX_X11 @@ -49,11 +49,11 @@ #if TARGET_HOST_UNIX_X11 -fgGetCursorError( Cursor cursor ) +static int fghGetCursorError( Cursor cursor ) { int ret = 0; char buf[ 256 ]; - + switch( cursor ) { case BadAlloc: @@ -90,7 +90,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) /* * Open issues: * (a) Partial error checking. Is that a problem? - * Is fgGetCursorError() correct? Should we abort on errors? + * Is fghGetCursorError() correct? Should we abort on errors? * Should there be a freeglut-wide X error handler? Should * we use the X error-handler mechanism? * (b) FULL_CROSSHAIR demotes to plain CROSSHAIR. Old GLUT allows @@ -99,8 +99,8 @@ void FGAPIENTRY glutSetCursor( int cursorID ) * (c) Out-of-range cursor-types generate warnings. Should we abort? */ { - Cursor cursor; - Pixmap no_cursor; /* Used for GLUT_CURSOR_NONE */ + Cursor cursor = None; + Pixmap no_cursor = None ; /* Used for GLUT_CURSOR_NONE */ int error = 0; #define MAP_CURSOR(a,b) \ @@ -110,7 +110,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) if( GLUT_CURSOR_FULL_CROSSHAIR == cursorID ) cursorID = GLUT_CURSOR_CROSSHAIR; - + switch( cursorID ) { MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, XC_right_ptr); @@ -138,6 +138,12 @@ void FGAPIENTRY glutSetCursor( int cursorID ) case GLUT_CURSOR_NONE: { + /* + * Note that we *never* change {no_cursor_bits} from anything + * but all-zeros. It is our image and mask. We also apparently + * need to pick a color for foreground/background---but what + * one we pick doesn't matter for GLUT_CURSOR_NONE. + */ static unsigned char no_cursor_bits[ 32 ]; XColor black; no_cursor = XCreatePixmapFromBitmapData( fgDisplay.Display, @@ -156,7 +162,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) 0, 0 ); break; } - + case GLUT_CURSOR_INHERIT: break; @@ -165,7 +171,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) return; } - error = fgGetCursorError( cursor ); + error = fghGetCursorError( cursor ); if( GLUT_CURSOR_INHERIT == cursorID ) XUndefineCursor( fgDisplay.Display, @@ -180,7 +186,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) } } -#elif TARGET_HOST_WIN32 +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE /* * This is a temporary solution only... @@ -194,7 +200,7 @@ void FGAPIENTRY glutSetCursor( int cursorID ) ( LONG )LoadCursor( NULL, b ) ); \ break; - /* Nuke the cursor AND change it for this window class. */ + /* Nuke the cursor AND change it for this window class. */ # define ZAP_CURSOR(a,b) \ case a: \ SetCursor( NULL ); \ @@ -202,27 +208,27 @@ void FGAPIENTRY glutSetCursor( int cursorID ) GCL_HCURSOR, ( LONG )NULL ); \ break; - switch( cursorID ) - { - MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW ); - MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); - MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP ); - MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS ); - MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP ); - MAP_CURSOR( GLUT_CURSOR_CYCLE, IDC_SIZEALL ); - MAP_CURSOR( GLUT_CURSOR_SPRAY, IDC_CROSS ); - MAP_CURSOR( GLUT_CURSOR_WAIT, IDC_WAIT ); - MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW ); - MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); - /* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */ - ZAP_CURSOR( GLUT_CURSOR_NONE, NULL ); - - default: - MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_ARROW ); - } + switch( cursorID ) + { + MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW ); + MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); + MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP ); + MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS ); + MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP ); + MAP_CURSOR( GLUT_CURSOR_CYCLE, IDC_SIZEALL ); + MAP_CURSOR( GLUT_CURSOR_SPRAY, IDC_CROSS ); + MAP_CURSOR( GLUT_CURSOR_WAIT, IDC_WAIT ); + MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW ); + MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); + /* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */ + ZAP_CURSOR( GLUT_CURSOR_NONE, NULL ); + + default: + MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_ARROW ); + } #endif - fgStructure.Window->State.Cursor = cursorID; + fgStructure.Window->State.Cursor = cursorID; } /* @@ -244,13 +250,14 @@ void FGAPIENTRY glutWarpPointer( int x, int y ) ); XFlush( fgDisplay.Display ); /* XXX Is this really necessary? */ -#elif TARGET_HOST_WIN32 +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE { - POINT coords = { x, y }; - /* - * ClientToScreen() translates {coords} for us. - */ + POINT coords; + coords.x = x; + coords.y = y; + + /* ClientToScreen() translates {coords} for us. */ ClientToScreen( fgStructure.Window->Window.Handle, &coords ); SetCursorPos( coords.x, coords.y ); }