From 66678f1df03dcdc59148a440599aa130df5d082b Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sat, 16 Oct 2021 18:20:16 -0700 Subject: [PATCH] glfw: add glfw.waitEvents, glfw.waitEventsTimeout Signed-off-by: Stephen Gutekanst --- src/main.zig | 157 ++++++++++++++++++++++++++------------------------- 1 file changed, 79 insertions(+), 78 deletions(-) diff --git a/src/main.zig b/src/main.zig index 6ed219a..7f16b99 100644 --- a/src/main.zig +++ b/src/main.zig @@ -157,85 +157,79 @@ pub inline fn pollEvents() Error!void { try getError(); } -// /// Waits until events are queued and processes them. -// /// -// /// This function puts the calling thread to sleep until at least one event is -// /// available in the event queue. Once one or more events are available, -// /// it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue -// /// are processed and the function then returns immediately. Processing events -// /// will cause the window and input callbacks associated with those events to be -// /// called. -// /// -// /// Since not all events are associated with callbacks, this function may return -// /// without a callback having been called even if you are monitoring all -// /// callbacks. -// /// -// /// On some platforms, a window move, resize or menu operation will cause event -// /// processing to block. This is due to how event processing is designed on -// /// those platforms. You can use the -// /// [window refresh callback](@ref window_refresh) to redraw the contents of -// /// your window when necessary during such operations. -// /// -// /// Do not assume that callbacks you set will _only_ be called in response to -// /// event processing functions like this one. While it is necessary to poll for -// /// events, window systems that require GLFW to register callbacks of its own -// /// can pass events to GLFW in response to many window system function calls. -// /// GLFW will pass those events on to the application callbacks before -// /// returning. -// /// -// /// Event processing is not required for joystick input to work. -// /// -// /// Possible errors include glfw.Error.NotInitialized and glfw.Error.PlatformError. -// /// -// /// @reentrancy This function must not be called from a callback. -// /// -// /// @thread_safety This function must only be called from the main thread. -// /// -// /// see also: events, glfw.pollEvents, glfw.waitEventsTimeout -// /// -// GLFWAPI void glfwWaitEvents(void); +/// Waits until events are queued and processes them. +/// +/// This function puts the calling thread to sleep until at least one event is available in the +/// event queue. Once one or more events are available, it behaves exactly like glfw.pollEvents, +/// i.e. the events in the queue are processed and the function then returns immediately. +/// Processing events will cause the window and input callbacks associated with those events to be +/// called. +/// +/// Since not all events are associated with callbacks, this function may return without a callback +/// having been called even if you are monitoring all callbacks. +/// +/// On some platforms, a window move, resize or menu operation will cause event processing to +/// block. This is due to how event processing is designed on those platforms. You can use the +/// window refresh callback (see window_refresh) to redraw the contents of your window when +/// necessary during such operations. +/// +/// Do not assume that callbacks you set will _only_ be called in response to event processing +/// functions like this one. While it is necessary to poll for events, window systems that require +/// GLFW to register callbacks of its own can pass events to GLFW in response to many window system +/// function calls. GLFW will pass those events on to the application callbacks before returning. +/// +/// Event processing is not required for joystick input to work. +/// +/// Possible errors include glfw.Error.NotInitialized and glfw.Error.PlatformError. +/// +/// @reentrancy This function must not be called from a callback. +/// +/// @thread_safety This function must only be called from the main thread. +/// +/// see also: events, glfw.pollEvents, glfw.waitEventsTimeout +pub inline fn waitEvents() Error!void { + c.glfwWaitEvents(); + try getError(); +} -// /// Waits with timeout until events are queued and processes them. -// /// -// /// This function puts the calling thread to sleep until at least one event is -// /// available in the event queue, or until the specified timeout is reached. If -// /// one or more events are available, it behaves exactly like @ref -// /// glfwPollEvents, i.e. the events in the queue are processed and the function -// /// then returns immediately. Processing events will cause the window and input -// /// callbacks associated with those events to be called. -// /// -// /// The timeout value must be a positive finite number. -// /// -// /// Since not all events are associated with callbacks, this function may return -// /// without a callback having been called even if you are monitoring all -// /// callbacks. -// /// -// /// On some platforms, a window move, resize or menu operation will cause event -// /// processing to block. This is due to how event processing is designed on -// /// those platforms. You can use the -// /// [window refresh callback](@ref window_refresh) to redraw the contents of -// /// your window when necessary during such operations. -// /// -// /// Do not assume that callbacks you set will _only_ be called in response to -// /// event processing functions like this one. While it is necessary to poll for -// /// events, window systems that require GLFW to register callbacks of its own -// /// can pass events to GLFW in response to many window system function calls. -// /// GLFW will pass those events on to the application callbacks before -// /// returning. -// /// -// /// Event processing is not required for joystick input to work. -// /// -// /// @param[in] timeout The maximum amount of time, in seconds, to wait. -// /// -// /// Possible errors include glfw.Error.NotInitialized, glfw.Error.InvalidValue and glfw.Error.PlatformError. -// /// -// /// @reentrancy This function must not be called from a callback. -// /// -// /// @thread_safety This function must only be called from the main thread. -// /// -// /// see also: events, glfw.pollEvents, glfw.waitEvents -// /// -// GLFWAPI void glfwWaitEventsTimeout(double timeout); +/// Waits with timeout until events are queued and processes them. +/// +/// This function puts the calling thread to sleep until at least one event is available in the +/// event queue, or until the specified timeout is reached. If one or more events are available, it +/// behaves exactly like glfw.pollEvents, i.e. the events in the queue are processed and the +/// function then returns immediately. Processing events will cause the window and input callbacks +/// associated with those events to be called. +/// +/// The timeout value must be a positive finite number. +/// +/// Since not all events are associated with callbacks, this function may return without a callback +/// having been called even if you are monitoring all callbacks. +/// +/// On some platforms, a window move, resize or menu operation will cause event processing to +/// block. This is due to how event processing is designed on those platforms. You can use the +/// window refresh callback (see window_refresh) to redraw the contents of your window when +/// necessary during such operations. +/// +/// Do not assume that callbacks you set will _only_ be called in response to event processing +/// functions like this one. While it is necessary to poll for events, window systems that require +/// GLFW to register callbacks of its own can pass events to GLFW in response to many window system +/// function calls. GLFW will pass those events on to the application callbacks before returning. +/// +/// Event processing is not required for joystick input to work. +/// +/// @param[in] timeout The maximum amount of time, in seconds, to wait. +/// +/// Possible errors include glfw.Error.NotInitialized, glfw.Error.InvalidValue and glfw.Error.PlatformError. +/// +/// @reentrancy This function must not be called from a callback. +/// +/// @thread_safety This function must only be called from the main thread. +/// +/// see also: events, glfw.pollEvents, glfw.waitEvents +pub inline fn waitEventsTimeout(timeout: f64) Error!void { + c.glfwWaitEventsTimeout(timeout); + try getError(); +} // /// Posts an empty event to the event queue. // /// @@ -287,6 +281,13 @@ test "pollEvents" { try pollEvents(); } +test "waitEventsTimeout" { + try init(); + defer terminate(); + + try waitEventsTimeout(0.25); +} + test "basic" { try basicTest(); }