X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_internal.h;h=cea8ad81d3b7929301a0a6712f3fac6b86ba77a4;hb=34290224a4fea01b30fe3c83d3c6d00bd5945acd;hp=7ffb4b68ef4d328f83592a1dcd46104d22c03acc;hpb=612f817ef1b975ede61b5cd6b880822b66207b76;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 7ffb4b6..cea8ad8 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -36,12 +36,12 @@ /* * Freeglut is meant to be available under all Unix/X11 and Win32 platforms. */ -#if !defined(_WIN32) -# define TARGET_HOST_UNIX_X11 1 -# define TARGET_HOST_WIN32 0 -#else +#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) # define TARGET_HOST_UNIX_X11 0 # define TARGET_HOST_WIN32 1 +#else +# define TARGET_HOST_UNIX_X11 1 +# define TARGET_HOST_WIN32 0 #endif #define FREEGLUT_MAX_MENUS 3 @@ -61,7 +61,10 @@ #if TARGET_HOST_WIN32 #include #include +#include +#endif +#if defined(_MSC_VER) #define strdup _strdup #endif @@ -373,6 +376,30 @@ struct tagSFG_WindowState /* + * SET_WCB() is used as: + * + * SET_WCB( window, Visibility, func ); + * + * ...where {window} is the freeglut window to set the callback, + * {Visibility} is the window-specific callback to set, + * {func} is a function-pointer. + * + * Originally, {FETCH_WCB( ... ) = func} was rather sloppily used, + * but this can cause warnings because the FETCH_WCB() macro type- + * casts its result, and a type-cast value shouldn't be an lvalue. + * + * The {if( FETCH_WCB( ... ) != func )} test is to do type-checking + * and for no other reason. Since it's hidden in the macro, the + * ugliness is felt to be rather benign. + */ +#define SET_WCB(window,cbname,func) \ +do \ +{ \ + if( FETCH_WCB( window, cbname ) != func ) \ + (((window).CallBacks[CB_ ## cbname]) = func); \ +} while( 0 ) \ + +/* * FETCH_WCB() is used as: * * FETCH_WCB( window, Visibility );