# define TARGET_HOST_BLACKBERRY 1
#elif defined(__posix__) || defined(__unix__) || defined(__linux__) || defined(__sun)
-# define TARGET_HOST_POSIX_X11 1
+# if defined(FREEGLUT_WAYLAND)
+# define TARGET_HOST_POSIX_WAYLAND 1
+# else
+# define TARGET_HOST_POSIX_X11 1
+# endif
#elif defined(__APPLE__)
/* This is a placeholder until we get native OSX support ironed out -- JFF 11/18/09 */
#endif
#ifndef TARGET_HOST_MS_WINDOWS
-# define TARGET_HOST_MS_WINDOWS 0
+# define TARGET_HOST_MS_WINDOWS 0
#endif
#ifndef TARGET_HOST_ANDROID
-# define TARGET_HOST_ANDROID 0
+# define TARGET_HOST_ANDROID 0
#endif
#ifndef TARGET_HOST_BLACKBERRY
-# define TARGET_HOST_BLACKBERRY 0
+# define TARGET_HOST_BLACKBERRY 0
+#endif
+
+#ifndef TARGET_HOST_POSIX_WAYLAND
+# define TARGET_HOST_POSIX_WAYLAND 0
#endif
#ifndef TARGET_HOST_POSIX_X11
-# define TARGET_HOST_POSIX_X11 0
+# define TARGET_HOST_POSIX_X11 0
#endif
#ifndef TARGET_HOST_MAC_OSX
-# define TARGET_HOST_MAC_OSX 0
+# define TARGET_HOST_MAC_OSX 0
#endif
#ifndef TARGET_HOST_SOLARIS
-# define TARGET_HOST_SOLARIS 0
+# define TARGET_HOST_SOLARIS 0
#endif
/* -- FIXED CONFIGURATION LIMITS ------------------------------------------- */
-#define FREEGLUT_MAX_MENUS 3
+#define FREEGLUT_MAX_MENUS 3
/* These files should be available on every platform. */
#include <stdio.h>
#endif
/* Platform-specific includes */
+#if TARGET_HOST_POSIX_WAYLAND
+#include "wayland/fg_internal_wl.h"
+#endif
#if TARGET_HOST_POSIX_X11
#include "x11/fg_internal_x11.h"
#endif
/* -- GLOBAL TYPE DEFINITIONS ---------------------------------------------- */
/* Freeglut callbacks type definitions */
+typedef void* FGCBUserData;
+
typedef void (* FGCBDisplay )( void );
typedef void (* FGCBReshape )( int, int );
typedef void (* FGCBPosition )( int, int );
/* The global callbacks type definitions */
typedef void (* FGCBIdle )( void );
+typedef void (* FGCBIdleUC )( FGCBUserData );
typedef void (* FGCBTimer )( int );
+typedef void (* FGCBTimerUC )( int, FGCBUserData );
typedef void (* FGCBMenuState )( int );
typedef void (* FGCBMenuStatus )( int, int, int );
/* The callback used when creating/using menus */
typedef void (* FGCBMenu )( int );
+typedef void (* FGCBMenuUC )( int, FGCBUserData );
/* The FreeGLUT error/warning handler type definition */
typedef void (* FGError ) ( const char *fmt, va_list ap);
SFG_List Timers; /* The freeglut timer hooks */
SFG_List FreeTimers; /* The unused timer hooks */
- FGCBIdle IdleCallback; /* The global idle callback */
+ FGCBIdleUC IdleCallback; /* The global idle callback */
+ FGCBUserData IdleCallbackData; /* The global idle callback data */
int ActiveMenus; /* Num. of currently active menus */
FGCBMenuState MenuStateCallback; /* Menu callbacks are global */
GLboolean SkipStaleMotion; /* skip stale motion events */
GLboolean StrokeFontDrawJoinDots;/* Draw dots between line segments of stroke fonts? */
+ GLboolean AllowNegativeWindowPosition; /* GLUT, by default, doesn't allow negative window positions. Enable it? */
int MajorVersion; /* Major OpenGL context version */
int MinorVersion; /* Minor OpenGL context version */
FGWarning WarningFunc; /* User defined warning handler */
};
-/* The structure used by display initialization in freeglut_init.c */
+/* The structure used by display initialization in fg_init.c */
typedef struct tagSFG_Display SFG_Display;
struct tagSFG_Display
{
{
SFG_Node Node;
int ID; /* The timer ID integer */
- FGCBTimer Callback; /* The timer callback */
+ FGCBTimerUC Callback; /* The timer callback */
+ FGCBUserData CallbackData; /* The timer callback user data */
fg_time_t TriggerTime; /* The timer trigger time */
};
/*
* A window and its OpenGL context. The contents of this structure
- * are highly dependant on the target operating system we aim at...
+ * are highly dependent on the target operating system we aim at...
*/
typedef struct tagSFG_Context SFG_Context;
struct tagSFG_Context
#define GLUT_DISPLAY_WORK (1<<6)
/*
- * An enumeration containing the state of the GLUT execution:
- * initializing, running, or stopping
+ * An enumeration containing the desired mapping state of a window
*/
typedef enum
{
/* Presently ignored */
WCB_Select,
WCB_OverlayDisplay,
- WCB_SpaceMotion, /* presently implemented only on UNIX/X11 */
- WCB_SpaceRotation, /* presently implemented only on UNIX/X11 */
- WCB_SpaceButton, /* presently implemented only on UNIX/X11 */
+ WCB_SpaceMotion, /* presently implemented only on UNIX/X11 and Windows */
+ WCB_SpaceRotation, /* presently implemented only on UNIX/X11 and Windows */
+ WCB_SpaceButton, /* presently implemented only on UNIX/X11 and Windows */
WCB_Dials,
WCB_ButtonBox,
WCB_TabletMotion,
void *UserData; /* User data passed back at callback */
int ID; /* The global menu ID */
SFG_List Entries; /* The menu entries list */
- FGCBMenu Callback; /* The menu callback */
+ FGCBMenuUC Callback; /* The menu callback */
+ FGCBUserData CallbackData; /* The menu callback user data */
FGCBDestroy Destroy; /* Destruction callback */
GLboolean IsActive; /* Is the menu selected? */
void* Font; /* Font to be used for displaying this menu */
/* -- JOYSTICK-SPECIFIC STRUCTURES AND TYPES ------------------------------- */
/*
- * Initial defines from "js.h" starting around line 33 with the existing "freeglut_joystick.c"
+ * Initial defines from "js.h" starting around line 33 with the existing "fg_joystick.c"
* interspersed
*/
}
/*
- * Following definitions are somewhat similiar to GLib's,
+ * Following definitions are somewhat similar to GLib's,
* but do not generate any log messages:
*/
#define freeglut_return_if_fail( expr ) \
/*
* Window creation, opening, closing and destruction.
* Also CallBack clearing/initialization.
- * Defined in freeglut_structure.c, freeglut_window.c.
+ * Defined in fg_structure.c, fg_window.c.
*/
SFG_Window* fgCreateWindow( SFG_Window* parent, const char* title,
GLboolean positionUse, int x, int y,
void fgCloseWindows ();
void fgDestroyWindow( SFG_Window* window );
-/* Menu creation and destruction. Defined in freeglut_structure.c */
-SFG_Menu* fgCreateMenu( FGCBMenu menuCallback );
+/* Menu creation and destruction. Defined in fg_structure.c */
+SFG_Menu* fgCreateMenu( FGCBMenuUC menuCallback, FGCBUserData userData );
void fgDestroyMenu( SFG_Menu* menu );
-/* Joystick device management functions, defined in freeglut_joystick.c */
+/* Joystick device management functions, defined in fg_joystick.c */
int fgJoystickDetect( void );
void fgInitialiseJoysticks( void );
void fgJoystickClose( void );
void fgInitialiseInputDevices( void );
void fgInputDeviceClose( void );
-/* spaceball device functions, defined in freeglut_spaceball.c */
+/* spaceball device functions, defined in fg_spaceball.c */
void fgInitialiseSpaceball( void );
void fgSpaceballClose( void );
void fgSpaceballSetWindow( SFG_Window *window );
*
* where window is the enumerated (sub)window pointer (SFG_Window *),
* and userData is the a custom user-supplied pointer. Functions
- * are defined and exported from freeglut_structure.c file.
+ * are defined and exported from fg_structure.c file.
*/
void fgEnumWindows( FGCBWindowEnumerator enumCallback, SFG_Enumerator* enumerator );
void fgEnumSubWindows( SFG_Window* window, FGCBWindowEnumerator enumCallback,
/*
* fgWindowByHandle returns a (SFG_Window *) value pointing to the
* first window in the queue matching the specified window handle.
- * The function is defined in freeglut_structure.c file.
+ * The function is defined in fg_structure.c file.
*/
SFG_Window* fgWindowByHandle( SFG_WindowHandleType hWindow );
/*
- * This function is similiar to the previous one, except it is
+ * This function is similar to the previous one, except it is
* looking for a specified (sub)window identifier. The function
- * is defined in freeglut_structure.c file.
+ * is defined in fg_structure.c file.
*/
SFG_Window* fgWindowByID( int windowID );
/*
* This function gets called just before the buffers swap, so that
* freeglut can display the pull-down menus via OpenGL. The function
- * is defined in freeglut_menu.c file.
+ * is defined in fg_menu.c file.
*/
void fgDisplayMenu( void );