summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRay <[email protected]>2022-05-12 16:51:46 +0200
committerRay <[email protected]>2022-05-12 16:51:46 +0200
commitdb16833d8cb8a252aeb1807fcbb8a600e2ab5900 (patch)
treeeb3f0c63a429df82dde1d440e07bd15433a0fcc4
parentf3aac87422220b0b8adcefd46f72dbd62c9736d5 (diff)
downloadraylib-db16833d8cb8a252aeb1807fcbb8a600e2ab5900.tar.gz
raylib-db16833d8cb8a252aeb1807fcbb8a600e2ab5900.zip
ADDED: `EnableEventWaiting()` / `DisableEventWaiting()`
Events waiting can be enabled/disabled, it toggles event polling.
-rw-r--r--src/raylib.h2
-rw-r--r--src/rcore.c45
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)