diff options
| author | Ray <[email protected]> | 2022-05-12 16:51:46 +0200 |
|---|---|---|
| committer | Ray <[email protected]> | 2022-05-12 16:51:46 +0200 |
| commit | db16833d8cb8a252aeb1807fcbb8a600e2ab5900 (patch) | |
| tree | eb3f0c63a429df82dde1d440e07bd15433a0fcc4 | |
| parent | f3aac87422220b0b8adcefd46f72dbd62c9736d5 (diff) | |
| download | raylib-db16833d8cb8a252aeb1807fcbb8a600e2ab5900.tar.gz raylib-db16833d8cb8a252aeb1807fcbb8a600e2ab5900.zip | |
ADDED: `EnableEventWaiting()` / `DisableEventWaiting()`
Events waiting can be enabled/disabled, it toggles event polling.
| -rw-r--r-- | src/raylib.h | 2 | ||||
| -rw-r--r-- | src/rcore.c | 45 |
2 files changed, 32 insertions, 15 deletions
diff --git a/src/raylib.h b/src/raylib.h index 392fe7e8..548b05fc 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -949,6 +949,8 @@ RLAPI Vector2 GetWindowScaleDPI(void); // Get window RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor RLAPI void SetClipboardText(const char *text); // Set clipboard text content RLAPI const char *GetClipboardText(void); // Get clipboard text content +RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling +RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling // Custom frame control functions // NOTE: Those functions are intended for advance users that want full control over the frame processing diff --git a/src/rcore.c b/src/rcore.c index b2fbabbf..31a0febb 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -394,6 +394,7 @@ typedef struct CoreData { bool fullscreen; // Check if fullscreen mode is enabled bool shouldClose; // Check if window set for closing bool resizedLastFrame; // Check if window has been resized last frame + bool eventWaiting; // Wait for events before ending frame Point position; // Window position on screen (required on fullscreen toggle) Size display; // Display width and height (monitor, device-screen, LCD, ...) @@ -761,6 +762,9 @@ void InitWindow(int width, int height, const char *title) CORE.Input.Mouse.scale = (Vector2){ 1.0f, 1.0f }; CORE.Input.Mouse.cursor = MOUSE_CURSOR_ARROW; CORE.Input.Gamepad.lastButtonPressed = -1; +#if defined(SUPPORT_EVENTS_WAITING) + CORE.Window.eventWaiting = true; +#endif #if defined(PLATFORM_ANDROID) CORE.Window.screen.width = width; @@ -1899,30 +1903,44 @@ const char *GetMonitorName(int monitor) return ""; } -// Get clipboard text content -// NOTE: returned string is allocated and freed by GLFW -const char *GetClipboardText(void) +// Set clipboard text content +void SetClipboardText(const char *text) { #if defined(PLATFORM_DESKTOP) - return glfwGetClipboardString(CORE.Window.handle); + glfwSetClipboardString(CORE.Window.handle, text); #endif #if defined(PLATFORM_WEB) - return emscripten_run_script_string("navigator.clipboard.readText()"); + emscripten_run_script(TextFormat("navigator.clipboard.writeText('%s')", text)); #endif - return NULL; } -// Set clipboard text content -void SetClipboardText(const char *text) +// Enable waiting for events on EndDrawing(), no automatic event polling +void EnableEventWaiting(void) +{ + CORE.Window.eventWaiting = true; +} + +// Disable waiting for events on EndDrawing(), automatic events polling +RLAPI void DisableEventWaiting(void) +{ + CORE.Window.eventWaiting = false; +} + +// Get clipboard text content +// NOTE: returned string is allocated and freed by GLFW +const char *GetClipboardText(void) { #if defined(PLATFORM_DESKTOP) - glfwSetClipboardString(CORE.Window.handle, text); + return glfwGetClipboardString(CORE.Window.handle); #endif #if defined(PLATFORM_WEB) - emscripten_run_script(TextFormat("navigator.clipboard.writeText('%s')", text)); + return emscripten_run_script_string("navigator.clipboard.readText()"); #endif + return NULL; } + + // Show mouse cursor void ShowCursor(void) { @@ -5038,11 +5056,8 @@ void PollInputEvents(void) CORE.Window.resizedLastFrame = false; -#if defined(SUPPORT_EVENTS_WAITING) - glfwWaitEvents(); -#else - glfwPollEvents(); // Register keyboard/mouse events (callbacks)... and window events! -#endif + if (CORE.Window.eventWaiting) glfwWaitEvents(); // Wait for in input events before continue (drawing is paused) + else glfwPollEvents(); // Poll input events: keyboard/mouse/window events (callbacks) #endif // PLATFORM_DESKTOP #if defined(PLATFORM_WEB) |
