From bbdf33a907eca12ccf0af8ac64847bd1849518f7 Mon Sep 17 00:00:00 2001 From: Richard Rauch Date: Fri, 7 Nov 2003 06:25:20 +0000 Subject: [PATCH] Further normalized the style of the cursor code. git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@309 7f0cb862-5218-0410-a997-914c9d46530a --- src/freeglut_cursor.c | 99 ++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/src/freeglut_cursor.c b/src/freeglut_cursor.c index f514652..bc7f63a 100644 --- a/src/freeglut_cursor.c +++ b/src/freeglut_cursor.c @@ -55,26 +55,31 @@ */ void FGAPIENTRY glutSetCursor( int cursorID ) { - freeglut_assert_ready; - freeglut_assert_window; + freeglut_assert_ready; /* XXX WHY do we need the timer active for this? */ + 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? - */ + /* + * 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; + +#define MAP_CURSOR(a,b) \ + case a: \ + cursor = XCreateFontCursor( fgDisplay.Display, b ); \ + break; + if( GLUT_CURSOR_FULL_CROSSHAIR == cursorID ) cursorID = GLUT_CURSOR_CROSSHAIR; @@ -108,23 +113,33 @@ void FGAPIENTRY glutSetCursor( int cursorID ) } if( GLUT_CURSOR_INHERIT == cursorID ) - XUndefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle ); + XUndefineCursor( fgDisplay.Display, + fgStructure.Window->Window.Handle ); else - XDefineCursor( fgDisplay.Display, fgStructure.Window->Window.Handle, cursor ); + 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. */ -# define MAP_CURSOR(a,b) case a: SetCursor( LoadCursor( NULL, b ) ); \ - SetClassLong(fgStructure.Window->Window.Handle,GCL_HCURSOR,(LONG)LoadCursor(NULL,b)); \ + /* + * 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; + /* Nuke the cursor AND change it for this window class. */ -# define ZAP_CURSOR(a,b) case a: SetCursor( NULL ); \ - SetClassLong(fgStructure.Window->Window.Handle,GCL_HCURSOR,(LONG)NULL); \ +# define ZAP_CURSOR(a,b) \ + case a: \ + SetCursor( NULL ); \ + SetClassLong( fgStructure.Window->Window.Handle, \ + GCL_HCURSOR, ( LONG )NULL ); \ break; switch( cursorID ) @@ -133,13 +148,13 @@ void FGAPIENTRY glutSetCursor( int cursorID ) 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_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_WAIT, IDC_WAIT ); MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW ); MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); - /* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */ + /* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */ ZAP_CURSOR( GLUT_CURSOR_NONE, NULL ); default: @@ -155,30 +170,30 @@ void FGAPIENTRY glutSetCursor( int cursorID ) */ void FGAPIENTRY glutWarpPointer( int x, int y ) { - freeglut_assert_ready; - freeglut_assert_window; + freeglut_assert_ready; /* XXX WHY do we need the timer active for this? */ + 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 ); /* XXX Is this really necessary? */ #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 } -- 1.7.10.4