X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_internal.h;h=013cae89917a90654ffaf4cf148c033e25289a5c;hb=c4ffff1de4b14af7f0efb231f476961c21f3f552;hp=03b08bfdeb4ed7992eae11a11a842eaacf4c1eff;hpb=fffd18193541999b2b5c00905dea0f1effa0ec07;p=freeglut diff --git a/src/freeglut_internal.h b/src/freeglut_internal.h index 03b08bf..013cae8 100644 --- a/src/freeglut_internal.h +++ b/src/freeglut_internal.h @@ -30,18 +30,24 @@ /* XXX Update these for each release! */ #define VERSION_MAJOR 2 -#define VERSION_MINOR 0 -#define VERSION_PATCH 2 +#define VERSION_MINOR 2 +#define VERSION_PATCH 0 /* * Freeglut is meant to be available under all Unix/X11 and Win32 platforms. */ -#if !defined(_WIN32) -# define TARGET_HOST_UNIX_X11 1 +#if defined(_WIN32_WCE) +# define TARGET_HOST_UNIX_X11 0 # define TARGET_HOST_WIN32 0 -#else +# define TARGET_HOST_WINCE 1 +#elif defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) # define TARGET_HOST_UNIX_X11 0 # define TARGET_HOST_WIN32 1 +# define TARGET_HOST_WINCE 0 +#else +# define TARGET_HOST_UNIX_X11 1 +# define TARGET_HOST_WIN32 0 +# define TARGET_HOST_WINCE 0 #endif #define FREEGLUT_MAX_MENUS 3 @@ -61,7 +67,11 @@ #if TARGET_HOST_WIN32 #include #include +#include +#include +#endif +#if defined(_MSC_VER) #define strdup _strdup #endif @@ -230,7 +240,7 @@ struct tagSFG_State GLboolean GLDebugSwitch; /* OpenGL state debugging switch */ GLboolean XSyncSwitch; /* X11 sync protocol switch */ - GLboolean IgnoreKeyRepeat; /* Whether to ignore key repeat. */ + int KeyRepeat; /* Global key repeat mode. */ int Modifiers; /* Current ALT/SHIFT/CTRL state */ GLuint FPSInterval; /* Interval between FPS printfs */ @@ -285,7 +295,7 @@ struct tagSFG_Display #endif -#elif TARGET_HOST_WIN32 +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE HINSTANCE Instance; /* The application's instance */ DEVMODE DisplayMode; /* Desktop's display settings */ @@ -319,7 +329,7 @@ struct tagSFG_Timer typedef Window SFG_WindowHandleType ; typedef GLXContext SFG_WindowContextType ; -#elif TARGET_HOST_WIN32 +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE typedef HWND SFG_WindowHandleType ; typedef HGLRC SFG_WindowContextType ; @@ -338,7 +348,9 @@ struct tagSFG_Context #if TARGET_HOST_UNIX_X11 XVisualInfo* VisualInfo; /* The window's visual information */ -#elif TARGET_HOST_WIN32 + Pixmap Pixmap; /* Used for offscreen rendering */ + /* GLXPixmap GLXPixMap; */ /* Used for offscreen rendering */ +#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE HDC Device; /* The window's device context */ #endif @@ -353,6 +365,8 @@ struct tagSFG_WindowState { int Width; /* Window's width in pixels */ int Height; /* The same about the height */ + int OldWidth; /* Window width from before a resize */ + int OldHeight; /* " height " " " " */ GLboolean Redisplay; /* Do we have to redisplay? */ GLboolean Visible; /* Is the window visible now */ @@ -360,17 +374,43 @@ struct tagSFG_WindowState int Cursor; /* The currently selected cursor */ long JoystickPollRate; /* The joystick polling rate */ - long JoystickLastPoll; /* When the last poll has happened */ + long JoystickLastPoll; /* When the last poll happened */ int MouseX, MouseY; /* The most recent mouse position */ - GLboolean IsGameMode; /* Is this the game mode window? */ + GLboolean IgnoreKeyRepeat; /* Whether to ignore key repeat. */ + GLboolean KeyRepeating; /* Currently in repeat mode */ + GLboolean IsGameMode; /* Is this the game mode window? */ GLboolean NeedToResize; /* Do we need to resize the window? */ }; /* + * 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]) = (void *) func); \ +} while( 0 ) \ + +/* * FETCH_WCB() is used as: * * FETCH_WCB( window, Visibility ); @@ -457,7 +497,7 @@ enum CB_ButtonBox, CB_TabletMotion, CB_TabletButton, - + /* Always make this the LAST one */ TOTAL_CALLBACKS }; @@ -544,8 +584,8 @@ struct tagSFG_Window typedef struct tagSFG_WindowList SFG_WindowList ; struct tagSFG_WindowList { + SFG_Node node; SFG_Window *window ; - SFG_WindowList *next ; }; /* @@ -556,6 +596,7 @@ struct tagSFG_Structure { SFG_List Windows; /* The global windows list */ SFG_List Menus; /* The global menus list */ + SFG_List WindowsToDestroy; SFG_Window* Window; /* The currently active win. */ SFG_Menu* Menu; /* Same, but menu... */ @@ -701,7 +742,7 @@ XVisualInfo* fgChooseVisual( void ); /* * The window procedure for Win32 events handling */ -#if TARGET_HOST_WIN32 +#if TARGET_HOST_WIN32 || TARGET_HOST_WINCE LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly, @@ -810,6 +851,7 @@ void fgListInit(SFG_List *list); void fgListAppend(SFG_List *list, SFG_Node *node); void fgListRemove(SFG_List *list, SFG_Node *node); int fgListLength(SFG_List *list); +void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node); /* * Error Messages functions