10 #ifndef FREEGLUT_INTERNAL_H
11 #define FREEGLUT_INTERNAL_H
18 #define VERSION_MAJOR 2
19 #define VERSION_MINOR 4
20 #define VERSION_PATCH 0
23 #if defined(_WIN32_WCE)
24 # define TARGET_HOST_UNIX_X11 0
25 # define TARGET_HOST_WIN32 0
26 # define TARGET_HOST_WINCE 1
27 #elif defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__)
28 # define TARGET_HOST_UNIX_X11 0
29 # define TARGET_HOST_WIN32 1
30 # define TARGET_HOST_WINCE 0
32 # define TARGET_HOST_UNIX_X11 1
33 # define TARGET_HOST_WIN32 0
34 # define TARGET_HOST_WINCE 0
37 #define FREEGLUT_MAX_MENUS 3
48 #define strdup _strdup
59 # include <sys/types.h>
64 #if TIME_WITH_SYS_TIME
65 # include <sys/time.h>
69 # include <sys/time.h>
76 #if TARGET_HOST_UNIX_X11
79 #include <X11/Xatom.h>
80 #include <X11/keysym.h>
82 #ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
83 #include <X11/extensions/xf86vmode.h>
89 # define M_PI 3.14159265358979323846
166 #if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
169 struct timeval
Value;
235 #if TARGET_HOST_UNIX_X11
242 #ifdef X_XF86VidModeGetModeLine
247 int DisplayModeValid;
248 XF86VidModeModeLine DisplayMode;
249 int DisplayModeClock;
250 int DisplayViewPortX;
251 int DisplayViewPortY;
257 #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
284 #if TARGET_HOST_UNIX_X11
289 #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
306 #if TARGET_HOST_UNIX_X11
308 #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
367 #define SET_WCB(window,cbname,func) \
370 if( FETCH_WCB( window, cbname ) != (SFG_Proc)(func) ) \
371 (((window).CallBacks[CB_ ## cbname]) = (SFG_Proc)(func)); \
385 #define FETCH_WCB(window,cbname) \
386 ((window).CallBacks[CB_ ## cbname])
407 #if TARGET_HOST_WIN32
408 #define INVOKE_WCB(window,cbname,arg_list) \
411 if( FETCH_WCB( window, cbname ) ) \
413 FGCB ## cbname func = (FGCB ## cbname)(FETCH_WCB( window, cbname )); \
414 fgSetWindow( &window ); \
419 #define INVOKE_WCB(window,cbname,arg_list) \
422 if( FETCH_WCB( window, cbname ) ) \
424 fgSetWindow( &window ); \
425 ((FGCB ## cbname)FETCH_WCB( window, cbname )) arg_list; \
484 #if TARGET_HOST_UNIX_X11
654 #define FREEGLUT_EXIT_IF_NOT_INITIALISED( string ) \
655 if ( ! fgState.Initialised ) \
657 fgError ( " ERROR: Function <%s> called" \
658 " without first calling 'glutInit'.", (string) ) ; \
661 #define FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED( string ) \
662 if ( ! fgState.Initialised ) \
664 fgError ( " ERROR: Internal <%s> function called" \
665 " without first calling 'glutInit'.", (string) ) ; \
668 #define FREEGLUT_INTERNAL_ERROR_EXIT( cond, string, function ) \
671 fgError ( " ERROR: Internal error <%s> in function %s", \
672 (string), (function) ) ; \
679 #define freeglut_return_if_fail( expr ) \
682 #define freeglut_return_val_if_fail( expr, val ) \
690 #define FREEGLUT_EXIT_IF_NO_WINDOW( string ) \
691 if ( ! fgStructure.CurrentWindow ) \
693 fgError ( " ERROR: Function <%s> called" \
694 " with no current window defined.", (string) ) ; \
713 #if TARGET_HOST_UNIX_X11
718 #if TARGET_HOST_WIN32 || TARGET_HOST_WINCE
719 LRESULT
CALLBACK fgWindowProc( HWND hWnd, UINT uMsg,
720 WPARAM wParam, LPARAM lParam );
722 unsigned char layer_type );
731 int x,
int y,
int w,
int h,
802 int mouse_x,
int mouse_y );
SFG_Window * fgWindowByID(int windowID)
void(* FGCBSpecialUp)(int, int, int)
@ GLUT_EXEC_STATE_RUNNING
int glutJoystickNotWorking(int ident)
void(* FGCBReshape)(int, int)
SFG_Menu * fgCreateMenu(FGCBMenu menuCallback)
void fgListRemove(SFG_List *list, SFG_Node *node)
void fgUpdateMenuHighlight(SFG_Menu *menu)
void(* FGCBSelect)(int, int, int)
int glutJoystickGetNumButtons(int ident)
SFG_Structure fgStructure
void fgListInit(SFG_List *list)
SFG_Window * fgWindowByHandle(SFG_WindowHandleType hWindow)
XVisualInfo * fgChooseVisual(void)
void(* FGCBDestroy)(void)
void(* FGCBVisibility)(int)
void(* FGCBSpecial)(int, int, int)
void fgDeactivateMenu(SFG_Window *window)
void fgCloseWindow(SFG_Window *window)
void(* FGCBMouse)(int, int, int, int)
Window SFG_WindowHandleType
void(* FGCBTabletMotion)(int, int)
void fgDestroyMenu(SFG_Menu *menu)
SFG_Menu * fgMenuByID(int menuID)
void fgAddToWindowDestroyList(SFG_Window *window)
void(* FGCBDisplay)(void)
void fgEnumSubWindows(SFG_Window *window, FGCBenumerator enumCallback, SFG_Enumerator *enumerator)
void fgInitialiseJoysticks(void)
void fgError(const char *fmt,...)
void(* FGCBSpaceRotation)(int, int, int)
SFG_Window * fgCreateWindow(SFG_Window *parent, const char *title, int x, int y, int w, int h, GLboolean gameMode, GLboolean isMenu)
void(* FGCBOverlayDisplay)(void)
void(* FGCBMenuStatus)(int, int, int)
void fgDeinitialize(void)
void fgListInsert(SFG_List *list, SFG_Node *next, SFG_Node *node)
void(* FGCBKeyboardUp)(unsigned char, int, int)
void fgEnumWindows(FGCBenumerator enumCallback, SFG_Enumerator *enumerator)
void(* FGCBJoystick)(unsigned int, int, int, int)
int fgJoystickDetect(void)
void fgJoystickPollWindow(SFG_Window *window)
void(* FGCBSpaceButton)(int, int)
void fgJoystickClose(void)
int fgListLength(SFG_List *list)
GLXContext SFG_WindowContextType
void fgOpenWindow(SFG_Window *window, const char *title, int x, int y, int w, int h, GLboolean gameMode, GLboolean isSubWindow)
#define FREEGLUT_MAX_MENUS
void fgSetWindow(SFG_Window *window)
void(* FGCBTabletButton)(int, int, int, int)
void fgWarning(const char *fmt,...)
int glutJoystickGetNumAxes(int ident)
void(* FGCBMouseWheel)(int, int, int, int)
void fgDestroyWindow(SFG_Window *window)
void(* FGCBMenuState)(int)
void(* FGCBMotion)(int, int)
void(* FGCBButtonBox)(int, int)
void(* FGCBenumerator)(SFG_Window *, SFG_Enumerator *)
void(* FGCBDials)(int, int)
GLboolean fgCheckActiveMenu(SFG_Window *window, int button, GLboolean pressed, int mouse_x, int mouse_y)
void fgListAppend(SFG_List *list, SFG_Node *node)
void fgCreateStructure(void)
void(* FGCBKeyboard)(unsigned char, int, int)
void(* FGCBWindowStatus)(int)
void fgSetCursor(SFG_Window *window, int cursorID)
void(* FGCBPassive)(int, int)
void(* FGCBSpaceMotion)(int, int, int)
void fgDestroyStructure(void)
GLubyte GLubyte GLubyte GLubyte w
typedef void(APIENTRYP PFNGLBLENDCOLORPROC)(GLclampf red
struct __GLXcontextRec * GLXContext
SFG_WindowHandleType Handle
SFG_WindowContextType Context
const GLubyte ** Characters
FGCBMenuState MenuStateCallback
GLboolean UseCurrentContext
GLboolean JoysticksInitialised
FGCBMenuStatus MenuStatusCallback
fgExecutionState ExecState
const SFG_StrokeStrip * Strips
const SFG_StrokeChar ** Characters
const SFG_StrokeVertex * Vertices
SFG_Window * CurrentWindow
SFG_MenuContext * MenuContext
SFG_List WindowsToDestroy
SFG_Proc CallBacks[TOTAL_CALLBACKS]
SFG_Menu * Menu[FREEGLUT_MAX_MENUS]
GLboolean IgnoreKeyRepeat