diff options
Diffstat (limited to 'include/pugl')
-rw-r--r-- | include/pugl/cairo.h | 4 | ||||
-rw-r--r-- | include/pugl/gl.h | 45 | ||||
-rw-r--r-- | include/pugl/pugl.h | 762 | ||||
-rw-r--r-- | include/pugl/stub.h | 3 | ||||
-rw-r--r-- | include/pugl/vulkan.h | 25 |
5 files changed, 463 insertions, 376 deletions
diff --git a/include/pugl/cairo.h b/include/pugl/cairo.h index d72580d..9909682 100644 --- a/include/pugl/cairo.h +++ b/include/pugl/cairo.h @@ -33,7 +33,9 @@ PUGL_BEGIN_DECLS Pass the returned value to puglSetBackend() to draw to a view with Cairo. */ -PUGL_API PUGL_CONST_FUNC const PuglBackend* +PUGL_API +PUGL_CONST_FUNC +const PuglBackend* puglCairoBackend(void); /** diff --git a/include/pugl/gl.h b/include/pugl/gl.h index eb86c3d..a311416 100644 --- a/include/pugl/gl.h +++ b/include/pugl/gl.h @@ -25,25 +25,25 @@ enable pure portable programs. */ #ifndef PUGL_NO_INCLUDE_GL_H -# ifdef __APPLE__ -# include "OpenGL/gl.h" -# else -# ifdef _WIN32 -# include <windows.h> -# endif -# include "GL/gl.h" -# endif +# ifdef __APPLE__ +# include "OpenGL/gl.h" +# else +# ifdef _WIN32 +# include <windows.h> +# endif +# include "GL/gl.h" +# endif #endif #ifndef PUGL_NO_INCLUDE_GLU_H -# ifdef __APPLE__ -# include "OpenGL/glu.h" -# else -# ifdef _WIN32 -# include <windows.h> -# endif -# include "GL/glu.h" -# endif +# ifdef __APPLE__ +# include "OpenGL/glu.h" +# else +# ifdef _WIN32 +# include <windows.h> +# endif +# include "GL/glu.h" +# endif #endif // IWYU pragma: end_exports @@ -65,7 +65,8 @@ typedef void (*PuglGlFunc)(void); /** Return the address of an OpenGL extension function. */ -PUGL_API PuglGlFunc +PUGL_API +PuglGlFunc puglGetProcAddress(const char* name); /** @@ -75,7 +76,8 @@ puglGetProcAddress(const char* name); doing things like loading textures. Note that this must not be used for drawing, which may only be done while processing an expose event. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglEnterContext(PuglView* view); /** @@ -83,7 +85,8 @@ puglEnterContext(PuglView* view); This must only be called after puglEnterContext(). */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglLeaveContext(PuglView* view); /** @@ -91,7 +94,9 @@ puglLeaveContext(PuglView* view); Pass the returned value to puglSetBackend() to draw to a view with OpenGL. */ -PUGL_API PUGL_CONST_FUNC const PuglBackend* +PUGL_API +PUGL_CONST_FUNC +const PuglBackend* puglGlBackend(void); PUGL_END_DECLS diff --git a/include/pugl/pugl.h b/include/pugl/pugl.h index 9ddc1ec..bb21a29 100644 --- a/include/pugl/pugl.h +++ b/include/pugl/pugl.h @@ -22,44 +22,44 @@ #include <stdint.h> #ifdef PUGL_SHARED -# ifdef _WIN32 -# define PUGL_LIB_IMPORT __declspec(dllimport) -# define PUGL_LIB_EXPORT __declspec(dllexport) -# else -# define PUGL_LIB_IMPORT __attribute__((visibility("default"))) -# define PUGL_LIB_EXPORT __attribute__((visibility("default"))) -# endif -# ifdef PUGL_INTERNAL -# define PUGL_API PUGL_LIB_EXPORT -# else -# define PUGL_API PUGL_LIB_IMPORT -# endif +# ifdef _WIN32 +# define PUGL_LIB_IMPORT __declspec(dllimport) +# define PUGL_LIB_EXPORT __declspec(dllexport) +# else +# define PUGL_LIB_IMPORT __attribute__((visibility("default"))) +# define PUGL_LIB_EXPORT __attribute__((visibility("default"))) +# endif +# ifdef PUGL_INTERNAL +# define PUGL_API PUGL_LIB_EXPORT +# else +# define PUGL_API PUGL_LIB_IMPORT +# endif #else -# define PUGL_API +# define PUGL_API #endif #ifndef PUGL_DISABLE_DEPRECATED -# if defined(__clang__) -# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("", rep))) -# elif defined(__GNUC__) -# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("Use " rep))) -# else -# define PUGL_DEPRECATED_BY(rep) -# endif +# if defined(__clang__) +# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("", rep))) +# elif defined(__GNUC__) +# define PUGL_DEPRECATED_BY(rep) __attribute__((deprecated("Use " rep))) +# else +# define PUGL_DEPRECATED_BY(rep) +# endif #endif #if defined(__GNUC__) -# define PUGL_CONST_FUNC __attribute__((const)) +# define PUGL_CONST_FUNC __attribute__((const)) #else -# define PUGL_CONST_FUNC +# define PUGL_CONST_FUNC #endif #ifdef __cplusplus -# define PUGL_BEGIN_DECLS extern "C" { -# define PUGL_END_DECLS } +# define PUGL_BEGIN_DECLS extern "C" { +# define PUGL_END_DECLS } #else -# define PUGL_BEGIN_DECLS -# define PUGL_END_DECLS +# define PUGL_BEGIN_DECLS +# define PUGL_END_DECLS #endif PUGL_BEGIN_DECLS @@ -77,10 +77,10 @@ PUGL_BEGIN_DECLS uses coordinates where the top left corner is 0,0. */ typedef struct { - double x; - double y; - double width; - double height; + double x; + double y; + double width; + double height; } PuglRect; /** @@ -96,10 +96,10 @@ typedef struct { /// Keyboard modifier flags typedef enum { - PUGL_MOD_SHIFT = 1u << 0u, ///< Shift key - PUGL_MOD_CTRL = 1u << 1u, ///< Control key - PUGL_MOD_ALT = 1u << 2u, ///< Alt/Option key - PUGL_MOD_SUPER = 1u << 3u ///< Mod4/Command/Windows key + PUGL_MOD_SHIFT = 1u << 0u, ///< Shift key + PUGL_MOD_CTRL = 1u << 1u, ///< Control key + PUGL_MOD_ALT = 1u << 2u, ///< Alt/Option key + PUGL_MOD_SUPER = 1u << 3u ///< Mod4/Command/Windows key } PuglMod; /// Bitwise OR of #PuglMod values @@ -120,92 +120,92 @@ typedef uint32_t PuglMods; mapping used here is arbitrary and specific to Pugl. */ typedef enum { - // ASCII control codes - PUGL_KEY_BACKSPACE = 0x08, - PUGL_KEY_ESCAPE = 0x1B, - PUGL_KEY_DELETE = 0x7F, - - // Unicode Private Use Area - PUGL_KEY_F1 = 0xE000, - PUGL_KEY_F2, - PUGL_KEY_F3, - PUGL_KEY_F4, - PUGL_KEY_F5, - PUGL_KEY_F6, - PUGL_KEY_F7, - PUGL_KEY_F8, - PUGL_KEY_F9, - PUGL_KEY_F10, - PUGL_KEY_F11, - PUGL_KEY_F12, - PUGL_KEY_LEFT, - PUGL_KEY_UP, - PUGL_KEY_RIGHT, - PUGL_KEY_DOWN, - PUGL_KEY_PAGE_UP, - PUGL_KEY_PAGE_DOWN, - PUGL_KEY_HOME, - PUGL_KEY_END, - PUGL_KEY_INSERT, - PUGL_KEY_SHIFT, - PUGL_KEY_SHIFT_L = PUGL_KEY_SHIFT, - PUGL_KEY_SHIFT_R, - PUGL_KEY_CTRL, - PUGL_KEY_CTRL_L = PUGL_KEY_CTRL, - PUGL_KEY_CTRL_R, - PUGL_KEY_ALT, - PUGL_KEY_ALT_L = PUGL_KEY_ALT, - PUGL_KEY_ALT_R, - PUGL_KEY_SUPER, - PUGL_KEY_SUPER_L = PUGL_KEY_SUPER, - PUGL_KEY_SUPER_R, - PUGL_KEY_MENU, - PUGL_KEY_CAPS_LOCK, - PUGL_KEY_SCROLL_LOCK, - PUGL_KEY_NUM_LOCK, - PUGL_KEY_PRINT_SCREEN, - PUGL_KEY_PAUSE + // ASCII control codes + PUGL_KEY_BACKSPACE = 0x08, + PUGL_KEY_ESCAPE = 0x1B, + PUGL_KEY_DELETE = 0x7F, + + // Unicode Private Use Area + PUGL_KEY_F1 = 0xE000, + PUGL_KEY_F2, + PUGL_KEY_F3, + PUGL_KEY_F4, + PUGL_KEY_F5, + PUGL_KEY_F6, + PUGL_KEY_F7, + PUGL_KEY_F8, + PUGL_KEY_F9, + PUGL_KEY_F10, + PUGL_KEY_F11, + PUGL_KEY_F12, + PUGL_KEY_LEFT, + PUGL_KEY_UP, + PUGL_KEY_RIGHT, + PUGL_KEY_DOWN, + PUGL_KEY_PAGE_UP, + PUGL_KEY_PAGE_DOWN, + PUGL_KEY_HOME, + PUGL_KEY_END, + PUGL_KEY_INSERT, + PUGL_KEY_SHIFT, + PUGL_KEY_SHIFT_L = PUGL_KEY_SHIFT, + PUGL_KEY_SHIFT_R, + PUGL_KEY_CTRL, + PUGL_KEY_CTRL_L = PUGL_KEY_CTRL, + PUGL_KEY_CTRL_R, + PUGL_KEY_ALT, + PUGL_KEY_ALT_L = PUGL_KEY_ALT, + PUGL_KEY_ALT_R, + PUGL_KEY_SUPER, + PUGL_KEY_SUPER_L = PUGL_KEY_SUPER, + PUGL_KEY_SUPER_R, + PUGL_KEY_MENU, + PUGL_KEY_CAPS_LOCK, + PUGL_KEY_SCROLL_LOCK, + PUGL_KEY_NUM_LOCK, + PUGL_KEY_PRINT_SCREEN, + PUGL_KEY_PAUSE } PuglKey; /// The type of a PuglEvent typedef enum { - PUGL_NOTHING, ///< No event - PUGL_CREATE, ///< View created, a #PuglEventCreate - PUGL_DESTROY, ///< View destroyed, a #PuglEventDestroy - PUGL_CONFIGURE, ///< View moved/resized, a #PuglEventConfigure - PUGL_MAP, ///< View made visible, a #PuglEventMap - PUGL_UNMAP, ///< View made invisible, a #PuglEventUnmap - PUGL_UPDATE, ///< View ready to draw, a #PuglEventUpdate - PUGL_EXPOSE, ///< View must be drawn, a #PuglEventExpose - PUGL_CLOSE, ///< View will be closed, a #PuglEventClose - PUGL_FOCUS_IN, ///< Keyboard focus entered view, a #PuglEventFocus - PUGL_FOCUS_OUT, ///< Keyboard focus left view, a #PuglEventFocus - PUGL_KEY_PRESS, ///< Key pressed, a #PuglEventKey - PUGL_KEY_RELEASE, ///< Key released, a #PuglEventKey - PUGL_TEXT, ///< Character entered, a #PuglEventText - PUGL_POINTER_IN, ///< Pointer entered view, a #PuglEventCrossing - PUGL_POINTER_OUT, ///< Pointer left view, a #PuglEventCrossing - PUGL_BUTTON_PRESS, ///< Mouse button pressed, a #PuglEventButton - PUGL_BUTTON_RELEASE, ///< Mouse button released, a #PuglEventButton - PUGL_MOTION, ///< Pointer moved, a #PuglEventMotion - PUGL_SCROLL, ///< Scrolled, a #PuglEventScroll - PUGL_CLIENT, ///< Custom client message, a #PuglEventClient - PUGL_TIMER, ///< Timer triggered, a #PuglEventTimer - PUGL_LOOP_ENTER, ///< Recursive loop entered, a #PuglEventLoopEnter - PUGL_LOOP_LEAVE, ///< Recursive loop left, a #PuglEventLoopLeave + PUGL_NOTHING, ///< No event + PUGL_CREATE, ///< View created, a #PuglEventCreate + PUGL_DESTROY, ///< View destroyed, a #PuglEventDestroy + PUGL_CONFIGURE, ///< View moved/resized, a #PuglEventConfigure + PUGL_MAP, ///< View made visible, a #PuglEventMap + PUGL_UNMAP, ///< View made invisible, a #PuglEventUnmap + PUGL_UPDATE, ///< View ready to draw, a #PuglEventUpdate + PUGL_EXPOSE, ///< View must be drawn, a #PuglEventExpose + PUGL_CLOSE, ///< View will be closed, a #PuglEventClose + PUGL_FOCUS_IN, ///< Keyboard focus entered view, a #PuglEventFocus + PUGL_FOCUS_OUT, ///< Keyboard focus left view, a #PuglEventFocus + PUGL_KEY_PRESS, ///< Key pressed, a #PuglEventKey + PUGL_KEY_RELEASE, ///< Key released, a #PuglEventKey + PUGL_TEXT, ///< Character entered, a #PuglEventText + PUGL_POINTER_IN, ///< Pointer entered view, a #PuglEventCrossing + PUGL_POINTER_OUT, ///< Pointer left view, a #PuglEventCrossing + PUGL_BUTTON_PRESS, ///< Mouse button pressed, a #PuglEventButton + PUGL_BUTTON_RELEASE, ///< Mouse button released, a #PuglEventButton + PUGL_MOTION, ///< Pointer moved, a #PuglEventMotion + PUGL_SCROLL, ///< Scrolled, a #PuglEventScroll + PUGL_CLIENT, ///< Custom client message, a #PuglEventClient + PUGL_TIMER, ///< Timer triggered, a #PuglEventTimer + PUGL_LOOP_ENTER, ///< Recursive loop entered, a #PuglEventLoopEnter + PUGL_LOOP_LEAVE, ///< Recursive loop left, a #PuglEventLoopLeave #ifndef PUGL_DISABLE_DEPRECATED - PUGL_ENTER_NOTIFY PUGL_DEPRECATED_BY("PUGL_POINTER_IN") = PUGL_POINTER_IN, - PUGL_LEAVE_NOTIFY PUGL_DEPRECATED_BY("PUGL_POINTER_OUT") = PUGL_POINTER_OUT, - PUGL_MOTION_NOTIFY PUGL_DEPRECATED_BY("PUGL_MOTION") = PUGL_MOTION, + PUGL_ENTER_NOTIFY PUGL_DEPRECATED_BY("PUGL_POINTER_IN") = PUGL_POINTER_IN, + PUGL_LEAVE_NOTIFY PUGL_DEPRECATED_BY("PUGL_POINTER_OUT") = PUGL_POINTER_OUT, + PUGL_MOTION_NOTIFY PUGL_DEPRECATED_BY("PUGL_MOTION") = PUGL_MOTION, #endif } PuglEventType; /// Common flags for all event types typedef enum { - PUGL_IS_SEND_EVENT = 1, ///< Event is synthetic - PUGL_IS_HINT = 2 ///< Event is a hint (not direct user input) + PUGL_IS_SEND_EVENT = 1, ///< Event is synthetic + PUGL_IS_HINT = 2 ///< Event is a hint (not direct user input) } PuglEventFlag; /// Bitwise OR of #PuglEventFlag values @@ -213,9 +213,9 @@ typedef uint32_t PuglEventFlags; /// Reason for a PuglEventCrossing typedef enum { - PUGL_CROSSING_NORMAL, ///< Crossing due to pointer motion - PUGL_CROSSING_GRAB, ///< Crossing due to a grab - PUGL_CROSSING_UNGRAB ///< Crossing due to a grab release + PUGL_CROSSING_NORMAL, ///< Crossing due to pointer motion + PUGL_CROSSING_GRAB, ///< Crossing due to a grab + PUGL_CROSSING_UNGRAB ///< Crossing due to a grab release } PuglCrossingMode; /** @@ -227,17 +227,17 @@ typedef enum { arbitrary scroll direction freedom, like some touchpads. */ typedef enum { - PUGL_SCROLL_UP, ///< Scroll up - PUGL_SCROLL_DOWN, ///< Scroll down - PUGL_SCROLL_LEFT, ///< Scroll left - PUGL_SCROLL_RIGHT, ///< Scroll right - PUGL_SCROLL_SMOOTH ///< Smooth scroll in any direction + PUGL_SCROLL_UP, ///< Scroll up + PUGL_SCROLL_DOWN, ///< Scroll down + PUGL_SCROLL_LEFT, ///< Scroll left + PUGL_SCROLL_RIGHT, ///< Scroll right + PUGL_SCROLL_SMOOTH ///< Smooth scroll in any direction } PuglScrollDirection; /// Common header for all event structs typedef struct { - PuglEventType type; ///< Event type - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + PuglEventType type; ///< Event type + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values } PuglEventAny; /** @@ -275,12 +275,12 @@ typedef PuglEventAny PuglEventDestroy; otherwise configure the context, but not to draw anything. */ typedef struct { - PuglEventType type; ///< #PUGL_CONFIGURE - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double x; ///< New parent-relative X coordinate - double y; ///< New parent-relative Y coordinate - double width; ///< New width - double height; ///< New height + PuglEventType type; ///< #PUGL_CONFIGURE + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double x; ///< New parent-relative X coordinate + double y; ///< New parent-relative Y coordinate + double width; ///< New width + double height; ///< New height } PuglEventConfigure; /** @@ -321,12 +321,12 @@ typedef PuglEventAny PuglEventUpdate; undefined, there is no preservation of anything drawn previously. */ typedef struct { - PuglEventType type; ///< #PUGL_EXPOSE - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double width; ///< Width of exposed region - double height; ///< Height of exposed region + PuglEventType type; ///< #PUGL_EXPOSE + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double width; ///< Width of exposed region + double height; ///< Height of exposed region } PuglEventExpose; /** @@ -346,9 +346,9 @@ typedef PuglEventAny PuglEventClose; view with the keyboard focus will receive any key press or release events. */ typedef struct { - PuglEventType type; ///< #PUGL_FOCUS_IN or #PUGL_FOCUS_OUT - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - PuglCrossingMode mode; ///< Reason for focus change + PuglEventType type; ///< #PUGL_FOCUS_IN or #PUGL_FOCUS_OUT + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + PuglCrossingMode mode; ///< Reason for focus change } PuglEventFocus; /** @@ -369,16 +369,16 @@ typedef struct { and hardware. */ typedef struct { - PuglEventType type; ///< #PUGL_KEY_PRESS or #PUGL_KEY_RELEASE - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags - uint32_t keycode; ///< Raw key code - uint32_t key; ///< Unshifted Unicode character code, or 0 + PuglEventType type; ///< #PUGL_KEY_PRESS or #PUGL_KEY_RELEASE + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags + uint32_t keycode; ///< Raw key code + uint32_t key; ///< Unshifted Unicode character code, or 0 } PuglEventKey; /** @@ -393,17 +393,17 @@ typedef struct { presses will generate a single character. */ typedef struct { - PuglEventType type; ///< #PUGL_TEXT - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags - uint32_t keycode; ///< Raw key code - uint32_t character; ///< Unicode character code - char string[8]; ///< UTF-8 string + PuglEventType type; ///< #PUGL_TEXT + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags + uint32_t keycode; ///< Raw key code + uint32_t character; ///< Unicode character code + char string[8]; ///< UTF-8 string } PuglEventText; /** @@ -414,44 +414,44 @@ typedef struct { window edge), as described by the `mode` field. */ typedef struct { - PuglEventType type; ///< #PUGL_POINTER_IN or #PUGL_POINTER_OUT - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags - PuglCrossingMode mode; ///< Reason for crossing + PuglEventType type; ///< #PUGL_POINTER_IN or #PUGL_POINTER_OUT + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags + PuglCrossingMode mode; ///< Reason for crossing } PuglEventCrossing; /** Button press or release event. */ typedef struct { - PuglEventType type; ///< #PUGL_BUTTON_PRESS or #PUGL_BUTTON_RELEASE - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags - uint32_t button; ///< Button number starting from 1 + PuglEventType type; ///< #PUGL_BUTTON_PRESS or #PUGL_BUTTON_RELEASE + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags + uint32_t button; ///< Button number starting from 1 } PuglEventButton; /** Pointer motion event. */ typedef struct { - PuglEventType type; ///< #PUGL_MOTION - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags + PuglEventType type; ///< #PUGL_MOTION + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags } PuglEventMotion; /** @@ -464,17 +464,17 @@ typedef struct { gracefully. */ typedef struct { - PuglEventType type; ///< #PUGL_SCROLL - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - double time; ///< Time in seconds - double x; ///< View-relative X coordinate - double y; ///< View-relative Y coordinate - double xRoot; ///< Root-relative X coordinate - double yRoot; ///< Root-relative Y coordinate - PuglMods state; ///< Bitwise OR of #PuglMod flags - PuglScrollDirection direction; ///< Scroll direction - double dx; ///< Scroll X distance in lines - double dy; ///< Scroll Y distance in lines + PuglEventType type; ///< #PUGL_SCROLL + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + double time; ///< Time in seconds + double x; ///< View-relative X coordinate + double y; ///< View-relative Y coordinate + double xRoot; ///< Root-relative X coordinate + double yRoot; ///< Root-relative Y coordinate + PuglMods state; ///< Bitwise OR of #PuglMod flags + PuglScrollDirection direction; ///< Scroll direction + double dx; ///< Scroll X distance in lines + double dy; ///< Scroll Y distance in lines } PuglEventScroll; /** @@ -485,10 +485,10 @@ typedef struct { things, this makes it possible to wake up the event loop for any reason. */ typedef struct { - PuglEventType type; ///< #PUGL_CLIENT - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - uintptr_t data1; ///< Client-specific data - uintptr_t data2; ///< Client-specific data + PuglEventType type; ///< #PUGL_CLIENT + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + uintptr_t data1; ///< Client-specific data + uintptr_t data2; ///< Client-specific data } PuglEventClient; /** @@ -502,9 +502,9 @@ typedef struct { event handler, even in applications that register only one timer. */ typedef struct { - PuglEventType type; ///< #PUGL_TIMER - PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values - uintptr_t id; ///< Timer ID + PuglEventType type; ///< #PUGL_TIMER + PuglEventFlags flags; ///< Bitwise OR of #PuglEventFlag values + uintptr_t id; ///< Timer ID } PuglEventTimer; /** @@ -551,19 +551,19 @@ typedef PuglEventAny PuglEventLoopLeave; and #PUGL_EXPOSE, but only enabled for drawing for #PUGL_EXPOSE. */ typedef union { - PuglEventAny any; ///< Valid for all event types - PuglEventType type; ///< Event type - PuglEventButton button; ///< #PUGL_BUTTON_PRESS, #PUGL_BUTTON_RELEASE - PuglEventConfigure configure; ///< #PUGL_CONFIGURE - PuglEventExpose expose; ///< #PUGL_EXPOSE - PuglEventKey key; ///< #PUGL_KEY_PRESS, #PUGL_KEY_RELEASE - PuglEventText text; ///< #PUGL_TEXT - PuglEventCrossing crossing; ///< #PUGL_POINTER_IN, #PUGL_POINTER_OUT - PuglEventMotion motion; ///< #PUGL_MOTION - PuglEventScroll scroll; ///< #PUGL_SCROLL - PuglEventFocus focus; ///< #PUGL_FOCUS_IN, #PUGL_FOCUS_OUT - PuglEventClient client; ///< #PUGL_CLIENT - PuglEventTimer timer; ///< #PUGL_TIMER + PuglEventAny any; ///< Valid for all event types + PuglEventType type; ///< Event type + PuglEventButton button; ///< #PUGL_BUTTON_PRESS, #PUGL_BUTTON_RELEASE + PuglEventConfigure configure; ///< #PUGL_CONFIGURE + PuglEventExpose expose; ///< #PUGL_EXPOSE + PuglEventKey key; ///< #PUGL_KEY_PRESS, #PUGL_KEY_RELEASE + PuglEventText text; ///< #PUGL_TEXT + PuglEventCrossing crossing; ///< #PUGL_POINTER_IN, #PUGL_POINTER_OUT + PuglEventMotion motion; ///< #PUGL_MOTION + PuglEventScroll scroll; ///< #PUGL_SCROLL + PuglEventFocus focus; ///< #PUGL_FOCUS_IN, #PUGL_FOCUS_OUT + PuglEventClient client; ///< #PUGL_CLIENT + PuglEventTimer timer; ///< #PUGL_TIMER } PuglEvent; /** @@ -577,22 +577,23 @@ typedef union { /// Return status code typedef enum { - PUGL_SUCCESS, ///< Success - PUGL_FAILURE, ///< Non-fatal failure - PUGL_UNKNOWN_ERROR, ///< Unknown system error - PUGL_BAD_BACKEND, ///< Invalid or missing backend - PUGL_BAD_CONFIGURATION, ///< Invalid view configuration - PUGL_BAD_PARAMETER, ///< Invalid parameter - PUGL_BACKEND_FAILED, ///< Backend initialization failed - PUGL_REGISTRATION_FAILED, ///< Class registration failed - PUGL_REALIZE_FAILED, ///< System view realization failed - PUGL_SET_FORMAT_FAILED, ///< Failed to set pixel format - PUGL_CREATE_CONTEXT_FAILED, ///< Failed to create drawing context - PUGL_UNSUPPORTED_TYPE, ///< Unsupported data type + PUGL_SUCCESS, ///< Success + PUGL_FAILURE, ///< Non-fatal failure + PUGL_UNKNOWN_ERROR, ///< Unknown system error + PUGL_BAD_BACKEND, ///< Invalid or missing backend + PUGL_BAD_CONFIGURATION, ///< Invalid view configuration + PUGL_BAD_PARAMETER, ///< Invalid parameter + PUGL_BACKEND_FAILED, ///< Backend initialization failed + PUGL_REGISTRATION_FAILED, ///< Class registration failed + PUGL_REALIZE_FAILED, ///< System view realization failed + PUGL_SET_FORMAT_FAILED, ///< Failed to set pixel format + PUGL_CREATE_CONTEXT_FAILED, ///< Failed to create drawing context + PUGL_UNSUPPORTED_TYPE, ///< Unsupported data type } PuglStatus; /// Return a string describing a status code -PUGL_API PUGL_CONST_FUNC +PUGL_API +PUGL_CONST_FUNC const char* puglStrerror(PuglStatus status); @@ -625,18 +626,18 @@ typedef void* PuglWorldHandle; /// The type of a World typedef enum { - PUGL_PROGRAM, ///< Top-level application - PUGL_MODULE ///< Plugin or module within a larger application + PUGL_PROGRAM, ///< Top-level application + PUGL_MODULE ///< Plugin or module within a larger application } PuglWorldType; /// World flags typedef enum { - /** - Set up support for threads if necessary. + /** + Set up support for threads if necessary. - - X11: Calls XInitThreads() which is required for some drivers. - */ - PUGL_WORLD_THREADS = 1u << 0u + - X11: Calls XInitThreads() which is required for some drivers. + */ + PUGL_WORLD_THREADS = 1u << 0u } PuglWorldFlag; /// Bitwise OR of #PuglWorldFlag values @@ -649,11 +650,13 @@ typedef uint32_t PuglWorldFlags; @param flags Flags to control world features. @return A new world, which must be later freed with puglFreeWorld(). */ -PUGL_API PuglWorld* +PUGL_API +PuglWorld* puglNewWorld(PuglWorldType type, PuglWorldFlags flags); /// Free a world allocated with puglNewWorld() -PUGL_API void +PUGL_API +void puglFreeWorld(PuglWorld* world); /** @@ -664,11 +667,13 @@ puglFreeWorld(PuglWorld* world); The handle is opaque to Pugl and is not interpreted in any way. */ -PUGL_API void +PUGL_API +void puglSetWorldHandle(PuglWorld* world, PuglWorldHandle handle); /// Get the user data for the world -PUGL_API PuglWorldHandle +PUGL_API +PuglWorldHandle puglGetWorldHandle(PuglWorld* world); /** @@ -680,7 +685,8 @@ puglGetWorldHandle(PuglWorld* world); Windows: Returns the `HMODULE` of the calling process. */ -PUGL_API void* +PUGL_API +void* puglGetNativeWorld(PuglWorld* world); /** @@ -692,7 +698,8 @@ puglGetNativeWorld(PuglWorld* world); for every instance of the application, but different from other applications. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetClassName(PuglWorld* world, const char* name); /** @@ -702,7 +709,8 @@ puglSetClassName(PuglWorld* world, const char* name); time is only useful to compare against other times returned by this function, its absolute value has no meaning. */ -PUGL_API double +PUGL_API +double puglGetTime(const PuglWorld* world); /** @@ -726,7 +734,8 @@ puglGetTime(const PuglWorld* world); @return #PUGL_SUCCESS if events are read, #PUGL_FAILURE if not, or an error. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglUpdate(PuglWorld* world, double timeout); /** @@ -775,31 +784,31 @@ typedef void* PuglHandle; /// A hint for configuring a view typedef enum { - PUGL_USE_COMPAT_PROFILE, ///< Use compatible (not core) OpenGL profile - PUGL_USE_DEBUG_CONTEXT, ///< True to use a debug OpenGL context - PUGL_CONTEXT_VERSION_MAJOR, ///< OpenGL context major version - PUGL_CONTEXT_VERSION_MINOR, ///< OpenGL context minor version - PUGL_RED_BITS, ///< Number of bits for red channel - PUGL_GREEN_BITS, ///< Number of bits for green channel - PUGL_BLUE_BITS, ///< Number of bits for blue channel - PUGL_ALPHA_BITS, ///< Number of bits for alpha channel - PUGL_DEPTH_BITS, ///< Number of bits for depth buffer - PUGL_STENCIL_BITS, ///< Number of bits for stencil buffer - PUGL_SAMPLES, ///< Number of samples per pixel (AA) - PUGL_DOUBLE_BUFFER, ///< True if double buffering should be used - PUGL_SWAP_INTERVAL, ///< Number of frames between buffer swaps - PUGL_RESIZABLE, ///< True if view should be resizable - PUGL_IGNORE_KEY_REPEAT, ///< True if key repeat events are ignored - PUGL_REFRESH_RATE, ///< Refresh rate in Hz - - PUGL_NUM_VIEW_HINTS + PUGL_USE_COMPAT_PROFILE, ///< Use compatible (not core) OpenGL profile + PUGL_USE_DEBUG_CONTEXT, ///< True to use a debug OpenGL context + PUGL_CONTEXT_VERSION_MAJOR, ///< OpenGL context major version + PUGL_CONTEXT_VERSION_MINOR, ///< OpenGL context minor version + PUGL_RED_BITS, ///< Number of bits for red channel + PUGL_GREEN_BITS, ///< Number of bits for green channel + PUGL_BLUE_BITS, ///< Number of bits for blue channel + PUGL_ALPHA_BITS, ///< Number of bits for alpha channel + PUGL_DEPTH_BITS, ///< Number of bits for depth buffer + PUGL_STENCIL_BITS, ///< Number of bits for stencil buffer + PUGL_SAMPLES, ///< Number of samples per pixel (AA) + PUGL_DOUBLE_BUFFER, ///< True if double buffering should be used + PUGL_SWAP_INTERVAL, ///< Number of frames between buffer swaps + PUGL_RESIZABLE, ///< True if view should be resizable + PUGL_IGNORE_KEY_REPEAT, ///< True if key repeat events are ignored + PUGL_REFRESH_RATE, ///< Refresh rate in Hz + + PUGL_NUM_VIEW_HINTS } PuglViewHint; /// A special view hint value typedef enum { - PUGL_DONT_CARE = -1, ///< Use best available value - PUGL_FALSE = 0, ///< Explicitly false - PUGL_TRUE = 1 ///< Explicitly true + PUGL_DONT_CARE = -1, ///< Use best available value + PUGL_FALSE = 0, ///< Explicitly false + PUGL_TRUE = 1 ///< Explicitly true } PuglViewHintValue; /// A function called when an event occurs @@ -818,15 +827,18 @@ typedef PuglStatus (*PuglEventFunc)(PuglView* view, const PuglEvent* event); It must first be configured, then the system view can be created with puglRealize(). */ -PUGL_API PuglView* +PUGL_API +PuglView* puglNewView(PuglWorld* world); /// Free a view created with puglNewView() -PUGL_API void +PUGL_API +void puglFreeView(PuglView* view); /// Return the world that `view` is a part of -PUGL_API PuglWorld* +PUGL_API +PuglWorld* puglGetWorld(PuglView* view); /** @@ -838,11 +850,13 @@ puglGetWorld(PuglView* view); The handle is opaque to Pugl and is not interpreted in any way. */ -PUGL_API void +PUGL_API +void puglSetHandle(PuglView* view, PuglHandle handle); /// Get the user data for a view -PUGL_API PuglHandle +PUGL_API +PuglHandle puglGetHandle(PuglView* view); /** @@ -862,11 +876,13 @@ puglGetHandle(PuglView* view); applications must link against the appropriate backend library, or be sure to compile in the appropriate code if using a local copy of Pugl. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetBackend(PuglView* view, const PuglBackend* backend); /// Set the function to call when an event occurs -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetEventFunc(PuglView* view, PuglEventFunc eventFunc); /** @@ -874,7 +890,8 @@ puglSetEventFunc(PuglView* view, PuglEventFunc eventFunc); This only has an effect when called before puglRealize(). */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetViewHint(PuglView* view, PuglViewHint hint, int value); /** @@ -884,7 +901,8 @@ puglSetViewHint(PuglView* view, PuglViewHint hint, int value); hint which was initially set to PUGL_DONT_CARE, or has been adjusted from the suggested value. */ -PUGL_API int +PUGL_API +int puglGetViewHint(const PuglView* view, PuglViewHint hint); /** @@ -899,7 +917,8 @@ puglGetViewHint(const PuglView* view, PuglViewHint hint); The position is in screen coordinates with an upper left origin. */ -PUGL_API PuglRect +PUGL_API +PuglRect puglGetFrame(const PuglView* view); /** @@ -910,7 +929,8 @@ puglGetFrame(const PuglView* view); @return #PUGL_UNKNOWN_ERROR on failure, in which case the view frame is unchanged. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetFrame(PuglView* view, PuglRect frame); /** @@ -923,7 +943,8 @@ puglSetFrame(PuglView* view, PuglRect frame); @return #PUGL_UNKNOWN_ERROR on failure, but always succeeds if the view is not yet realized. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetDefaultSize(PuglView* view, int width, int height); /** @@ -935,7 +956,8 @@ puglSetDefaultSize(PuglView* view, int width, int height); @return #PUGL_UNKNOWN_ERROR on failure, but always succeeds if the view is not yet realized. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetMinSize(PuglView* view, int width, int height); /** @@ -947,7 +969,8 @@ puglSetMinSize(PuglView* view, int width, int height); @return #PUGL_UNKNOWN_ERROR on failure, but always succeeds if the view is not yet realized. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetMaxSize(PuglView* view, int width, int height); /** @@ -966,7 +989,8 @@ puglSetMaxSize(PuglView* view, int width, int height); @return #PUGL_UNKNOWN_ERROR on failure, but always succeeds if the view is not yet realized. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetAspectRatio(PuglView* view, int minX, int minY, int maxX, int maxY); /** @@ -983,7 +1007,8 @@ puglSetAspectRatio(PuglView* view, int minX, int minY, int maxX, int maxY); top-level window, and sets the title, typically displayed in the title bar or in window switchers. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetWindowTitle(PuglView* view, const char* title); /** @@ -991,7 +1016,8 @@ puglSetWindowTitle(PuglView* view, const char* title); This must be called before puglRealize(), reparenting is not supported. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetParentWindow(PuglView* view, PuglNativeView parent); /** @@ -1004,7 +1030,8 @@ puglSetParentWindow(PuglView* view, PuglNativeView parent); A view can either have a parent (for embedding) or a transient parent (for top-level windows like dialogs), but not both. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetTransientFor(PuglView* view, PuglNativeView parent); /** @@ -1018,7 +1045,8 @@ puglSetTransientFor(PuglView* view, PuglNativeView parent); The view should be fully configured using the above functions before this is called. This function may only be called once per view. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglRealize(PuglView* view); /** @@ -1030,19 +1058,23 @@ puglRealize(PuglView* view); If the view is currently hidden, it will be shown and possibly raised to the top depending on the platform. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglShow(PuglView* view); /// Hide the current window -PUGL_API PuglStatus +PUGL_API +PuglStatus puglHide(PuglView* view); /// Return true iff the view is currently visible -PUGL_API bool +PUGL_API +bool puglGetVisible(const PuglView* view); /// Return the native window handle -PUGL_API PuglNativeView +PUGL_API +PuglNativeView puglGetNativeWindow(PuglView* view); /** @@ -1063,7 +1095,8 @@ puglGetNativeWindow(PuglView* view); All other backends: returns null. */ -PUGL_API void* +PUGL_API +void* puglGetContext(PuglView* view); /** @@ -1075,7 +1108,8 @@ puglGetContext(PuglView* view); platforms. If called elsewhere, an expose will be enqueued to be processed in the next event loop iteration. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglPostRedisplay(PuglView* view); /** @@ -1084,7 +1118,8 @@ puglPostRedisplay(PuglView* view); This has the same semantics as puglPostRedisplay(), but allows giving a precise region for redrawing only a portion of the view. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglPostRedisplayRect(PuglView* view, PuglRect rect); /** @@ -1101,21 +1136,23 @@ puglPostRedisplayRect(PuglView* view, PuglRect rect); Windows. */ typedef enum { - PUGL_CURSOR_ARROW, ///< Default pointing arrow - PUGL_CURSOR_CARET, ///< Caret (I-Beam) for text entry - PUGL_CURSOR_CROSSHAIR, ///< Cross-hair - PUGL_CURSOR_HAND, ///< Hand with a pointing finger - PUGL_CURSOR_NO, ///< Operation not allowed - PUGL_CURSOR_LEFT_RIGHT, ///< Left/right arrow for horizontal resize - PUGL_CURSOR_UP_DOWN, ///< Up/down arrow for vertical resize + PUGL_CURSOR_ARROW, ///< Default pointing arrow + PUGL_CURSOR_CARET, ///< Caret (I-Beam) for text entry + PUGL_CURSOR_CROSSHAIR, ///< Cross-hair + PUGL_CURSOR_HAND, ///< Hand with a pointing finger + PUGL_CURSOR_NO, ///< Operation not allowed + PUGL_CURSOR_LEFT_RIGHT, ///< Left/right arrow for horizontal resize + PUGL_CURSOR_UP_DOWN, ///< Up/down arrow for vertical resize } PuglCursor; /// Grab the keyboard input focus -PUGL_API PuglStatus +PUGL_API +PuglStatus puglGrabFocus(PuglView* view); /// Return whether `view` has the keyboard input focus -PUGL_API bool +PUGL_API +bool puglHasFocus(const PuglView* view); /** @@ -1129,7 +1166,8 @@ puglHasFocus(const PuglView* view); @param data The data to copy to the clipboard. @param len The length of data in bytes (including terminator if necessary). */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetClipboard(PuglView* view, const char* type, const void* data, @@ -1146,7 +1184,8 @@ puglSetClipboard(PuglView* view, @param[out] len Set to the length of the data in bytes. @return The clipboard contents, or `NULL`. */ -PUGL_API const void* +PUGL_API +const void* puglGetClipboard(PuglView* view, const char** type, size_t* len); /** @@ -1160,7 +1199,8 @@ puglGetClipboard(PuglView* view, const char** type, size_t* len); - #PUGL_BAD_PARAMETER if the given cursor is invalid. - #PUGL_FAILURE if the cursor isknown but loading it from the system fails. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSetCursor(PuglView* view, PuglCursor cursor); /** @@ -1170,7 +1210,8 @@ puglSetCursor(PuglView* view, PuglCursor cursor); from the user. The exact effect depends on the platform, but is usually something like a flashing task bar entry or bouncing application icon. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglRequestAttention(PuglView* view); /** @@ -1200,7 +1241,8 @@ puglRequestAttention(PuglView* view); - #PUGL_FAILURE if timers are not supported by this system or build. - #PUGL_UNKNOWN_ERROR if setting the timer failed. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglStartTimer(PuglView* view, uintptr_t id, double timeout); /** @@ -1213,7 +1255,8 @@ puglStartTimer(PuglView* view, uintptr_t id, double timeout); - #PUGL_FAILURE if timers are not supported by this system or build. - #PUGL_UNKNOWN_ERROR if stopping the timer failed. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglStopTimer(PuglView* view, uintptr_t id); /** @@ -1233,7 +1276,8 @@ puglStopTimer(PuglView* view, uintptr_t id); - #PUGL_UNSUPPORTED_TYPE if sending events of this type is not supported. - #PUGL_UNKNOWN_ERROR if sending the event failed. */ -PUGL_API PuglStatus +PUGL_API +PuglStatus puglSendEvent(PuglView* view, const PuglEvent* event); /** @@ -1271,13 +1315,14 @@ typedef uintptr_t PuglNativeWindow; @param argv Arguments (currently unused). @return A newly created view. */ -static inline PUGL_DEPRECATED_BY("puglNewView") PuglView* +static inline PUGL_DEPRECATED_BY("puglNewView") +PuglView* puglInit(const int* pargc, char** argv) { - (void)pargc; - (void)argv; + (void)pargc; + (void)argv; - return puglNewView(puglNewWorld(PUGL_MODULE, 0)); + return puglNewView(puglNewWorld(PUGL_MODULE, 0)); } /** @@ -1285,22 +1330,24 @@ puglInit(const int* pargc, char** argv) @deprecated Use puglFreeApp() and puglFreeView(). */ -static inline PUGL_DEPRECATED_BY("puglFreeView") void +static inline PUGL_DEPRECATED_BY("puglFreeView") +void puglDestroy(PuglView* view) { - PuglWorld* const world = puglGetWorld(view); + PuglWorld* const world = puglGetWorld(view); - puglFreeView(view); - puglFreeWorld(world); + puglFreeView(view); + puglFreeWorld(world); } /** Set the window class name before creating a window. */ -static inline PUGL_DEPRECATED_BY("puglSetClassName") void +static inline PUGL_DEPRECATED_BY("puglSetClassName") +void puglInitWindowClass(PuglView* view, const char* name) { - puglSetClassName(puglGetWorld(view), name); + puglSetClassName(puglGetWorld(view), name); } /** @@ -1308,24 +1355,26 @@ puglInitWindowClass(PuglView* view, const char* name) @deprecated Use puglSetFrame(). */ -static inline PUGL_DEPRECATED_BY("puglSetFrame") void +static inline PUGL_DEPRECATED_BY("puglSetFrame") +void puglInitWindowSize(PuglView* view, int width, int height) { - PuglRect frame = puglGetFrame(view); + PuglRect frame = puglGetFrame(view); - frame.width = width; - frame.height = height; + frame.width = width; + frame.height = height; - puglSetFrame(view, frame); + puglSetFrame(view, frame); } /** Set the minimum window size before creating a window. */ -static inline PUGL_DEPRECATED_BY("puglSetMinSize") void +static inline PUGL_DEPRECATED_BY("puglSetMinSize") +void puglInitWindowMinSize(PuglView* view, int width, int height) { - puglSetMinSize(view, width, height); + puglSetMinSize(view, width, height); } /** @@ -1338,14 +1387,15 @@ puglInitWindowMinSize(PuglView* view, int width, int height) currenty work on MacOS (the minimum is used), so only setting a fixed aspect ratio works properly across all platforms. */ -static inline PUGL_DEPRECATED_BY("puglSetAspectRatio") void +static inline PUGL_DEPRECATED_BY("puglSetAspectRatio") +void puglInitWindowAspectRatio(PuglView* view, int minX, int minY, int maxX, int maxY) { - puglSetAspectRatio(view, minX, minY, maxX, maxY); + puglSetAspectRatio(view, minX, minY, maxX, maxY); } /** @@ -1354,10 +1404,11 @@ puglInitWindowAspectRatio(PuglView* view, On X11, parent must be a Window. On OSX, parent must be an NSView*. */ -static inline PUGL_DEPRECATED_BY("puglSetTransientFor") void +static inline PUGL_DEPRECATED_BY("puglSetTransientFor") +void puglInitTransientFor(PuglView* view, uintptr_t parent) { - puglSetTransientFor(view, (PuglNativeWindow)parent); + puglSetTransientFor(view, (PuglNativeWindow)parent); } /** @@ -1365,10 +1416,11 @@ puglInitTransientFor(PuglView* view, uintptr_t parent) @deprecated Use puglSetViewHint() with #PUGL_RESIZABLE. */ -static inline PUGL_DEPRECATED_BY("puglSetViewHint") void +static inline PUGL_DEPRECATED_BY("puglSetViewHint") +void puglInitResizable(PuglView* view, bool resizable) { - puglSetViewHint(view, PUGL_RESIZABLE, resizable); + puglSetViewHint(view, PUGL_RESIZABLE, resizable); } /** @@ -1377,13 +1429,14 @@ puglInitResizable(PuglView* view, bool resizable) @deprecated Use puglGetFrame(). */ -static inline PUGL_DEPRECATED_BY("puglGetFrame") void +static inline PUGL_DEPRECATED_BY("puglGetFrame") +void puglGetSize(PuglView* view, int* width, int* height) { - const PuglRect frame = puglGetFrame(view); + const PuglRect frame = puglGetFrame(view); - *width = (int)frame.width; - *height = (int)frame.height; + *width = (int)frame.width; + *height = (int)frame.height; } /** @@ -1391,10 +1444,11 @@ puglGetSize(PuglView* view, int* width, int* height) @deprecated Use puglSetViewHint() with #PUGL_IGNORE_KEY_REPEAT. */ -static inline PUGL_DEPRECATED_BY("puglSetViewHint") void +static inline PUGL_DEPRECATED_BY("puglSetViewHint") +void puglIgnoreKeyRepeat(PuglView* view, bool ignore) { - puglSetViewHint(view, PUGL_IGNORE_KEY_REPEAT, ignore); + puglSetViewHint(view, PUGL_IGNORE_KEY_REPEAT, ignore); } /** @@ -1402,10 +1456,11 @@ puglIgnoreKeyRepeat(PuglView* view, bool ignore) @deprecated Use puglSetWindowHint(). */ -static inline PUGL_DEPRECATED_BY("puglSetViewHint") void +static inline PUGL_DEPRECATED_BY("puglSetViewHint") +void puglInitWindowHint(PuglView* view, PuglViewHint hint, int value) { - puglSetViewHint(view, hint, value); + puglSetViewHint(view, hint, value); } /** @@ -1413,10 +1468,11 @@ puglInitWindowHint(PuglView* view, PuglViewHint hint, int value) @deprecated Use puglSetWindowParent(). */ -static inline PUGL_DEPRECATED_BY("puglSetParentWindow") void +static inline PUGL_DEPRECATED_BY("puglSetParentWindow") +void puglInitWindowParent(PuglView* view, PuglNativeWindow parent) { - puglSetParentWindow(view, parent); + puglSetParentWindow(view, parent); } /** @@ -1424,10 +1480,11 @@ puglInitWindowParent(PuglView* view, PuglNativeWindow parent) @deprecated Use puglSetBackend(). */ -static inline PUGL_DEPRECATED_BY("puglSetBackend") int +static inline PUGL_DEPRECATED_BY("puglSetBackend") +int puglInitBackend(PuglView* view, const PuglBackend* backend) { - return (int)puglSetBackend(view, backend); + return (int)puglSetBackend(view, backend); } /** @@ -1438,11 +1495,12 @@ puglInitBackend(PuglView* view, const PuglBackend* backend) @deprecated Use puglRealize(), or just show the view. */ -static inline PUGL_DEPRECATED_BY("puglRealize") PuglStatus +static inline PUGL_DEPRECATED_BY("puglRealize") +PuglStatus puglCreateWindow(PuglView* view, const char* title) { - puglSetWindowTitle(view, title); - return puglRealize(view); + puglSetWindowTitle(view, title); + return puglRealize(view); } /** @@ -1455,7 +1513,9 @@ puglCreateWindow(PuglView* view, const char* title) @deprecated Use puglPollEvents(). */ -PUGL_API PUGL_DEPRECATED_BY("puglPollEvents") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglPollEvents") +PuglStatus puglWaitForEvent(PuglView* view); /** @@ -1467,7 +1527,9 @@ puglWaitForEvent(PuglView* view); @deprecated Use puglDispatchEvents(). */ -PUGL_API PUGL_DEPRECATED_BY("puglDispatchEvents") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglDispatchEvents") +PuglStatus puglProcessEvents(PuglView* view); /** @@ -1485,7 +1547,9 @@ puglProcessEvents(PuglView* view); @deprecated Use puglUpdate(). */ -PUGL_API PUGL_DEPRECATED_BY("puglUpdate") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglUpdate") +PuglStatus puglPollEvents(PuglWorld* world, double timeout); /** @@ -1498,13 +1562,19 @@ puglPollEvents(PuglWorld* world, double timeout); @deprecated Use puglUpdate(). */ -PUGL_API PUGL_DEPRECATED_BY("puglUpdate") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglUpdate") +PuglStatus puglDispatchEvents(PuglWorld* world); -PUGL_API PUGL_DEPRECATED_BY("puglShow") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglShow") +PuglStatus puglShowWindow(PuglView* view); -PUGL_API PUGL_DEPRECATED_BY("puglHide") PuglStatus +PUGL_API +PUGL_DEPRECATED_BY("puglHide") +PuglStatus puglHideWindow(PuglView* view); #endif // PUGL_DISABLE_DEPRECATED diff --git a/include/pugl/stub.h b/include/pugl/stub.h index d2d1236..46e0e96 100644 --- a/include/pugl/stub.h +++ b/include/pugl/stub.h @@ -34,7 +34,8 @@ PUGL_BEGIN_DECLS This backend just creates a simple native window without setting up any portable graphics API. */ -PUGL_API PUGL_CONST_FUNC +PUGL_API +PUGL_CONST_FUNC const PuglBackend* puglStubBackend(void); diff --git a/include/pugl/vulkan.h b/include/pugl/vulkan.h index bd4ad8e..15f834c 100644 --- a/include/pugl/vulkan.h +++ b/include/pugl/vulkan.h @@ -66,11 +66,13 @@ typedef struct PuglVulkanLoaderImpl PuglVulkanLoader; /** Create a new dynamic loader for Vulkan functions. - This dynamically loads the Vulkan library and gets the load functions from it. + This dynamically loads the Vulkan library and gets the load functions from + it. @return A new Vulkan loader, or null on failure. */ -PUGL_API PuglVulkanLoader* +PUGL_API +PuglVulkanLoader* puglNewVulkanLoader(PuglWorld* world); /** @@ -79,7 +81,8 @@ puglNewVulkanLoader(PuglWorld* world); Note that this closes the Vulkan library, so no Vulkan objects or API may be used after this is called. */ -PUGL_API void +PUGL_API +void puglFreeVulkanLoader(PuglVulkanLoader* loader); /** @@ -88,7 +91,8 @@ puglFreeVulkanLoader(PuglVulkanLoader* loader); @return Null if the Vulkan library does not contain this function (which is unlikely and indicates a broken system). */ -PUGL_API PFN_vkGetInstanceProcAddr +PUGL_API +PFN_vkGetInstanceProcAddr puglGetInstanceProcAddrFunc(const PuglVulkanLoader* loader); /** @@ -97,7 +101,8 @@ puglGetInstanceProcAddrFunc(const PuglVulkanLoader* loader); @return Null if the Vulkan library does not contain this function (which is unlikely and indicates a broken system). */ -PUGL_API PFN_vkGetDeviceProcAddr +PUGL_API +PFN_vkGetDeviceProcAddr puglGetDeviceProcAddrFunc(const PuglVulkanLoader* loader); /** @@ -109,7 +114,8 @@ puglGetDeviceProcAddrFunc(const PuglVulkanLoader* loader); @param[out] count The number of extensions in the returned array. @return An array of extension name strings. */ -PUGL_API const char* const* +PUGL_API +const char* const* puglGetInstanceExtensions(uint32_t* count); /** @@ -122,7 +128,8 @@ puglGetInstanceExtensions(uint32_t* count); @param[out] surface Pointed to a newly created Vulkan surface. @return `VK_SUCCESS` on success, or a Vulkan error code. */ -PUGL_API VkResult +PUGL_API +VkResult puglCreateSurface(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, PuglView* view, VkInstance instance, @@ -134,7 +141,9 @@ puglCreateSurface(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr, Pass the returned value to puglSetBackend() to draw to a view with Vulkan. */ -PUGL_API PUGL_CONST_FUNC const PuglBackend* +PUGL_API +PUGL_CONST_FUNC +const PuglBackend* puglVulkanBackend(void); /** |