diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-20 07:55:34 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-10-20 07:55:34 -0400 |
| commit | 216b73ff6906954d6addf5b715fe0d7f8efa3f01 (patch) | |
| tree | d80a78ee7f9a4f1f03137ac28224cfb847387fcb /src/player-input.cpp | |
| parent | 80e6cef119cdac72fe80b78daa7b4dd53f64c2b4 (diff) | |
passthrough glfw events to previous callback if exists
Diffstat (limited to 'src/player-input.cpp')
| -rw-r--r-- | src/player-input.cpp | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/player-input.cpp b/src/player-input.cpp index ead67ca..4b34fdd 100644 --- a/src/player-input.cpp +++ b/src/player-input.cpp @@ -3,6 +3,13 @@ #include "window.hpp" #include "game-settings.hpp" +GLFWcursorenterfun prevCursorEnterCallback; +GLFWcursorposfun prevCursorPosCallback; +GLFWkeyfun prevKeyCallback; +GLFWmousebuttonfun prevMouseButtonCallback; +GLFWscrollfun prevScrollCallback; +GLFWwindowfocusfun prevWindowFocusCallback; + TypeSafeInt_B(InputEventHash); TypeSafeInt_B(InputEventType); TypeSafeInt_B(InputCursorEntered); @@ -27,6 +34,9 @@ void CursorEnterCallback(GLFWwindow *window, int entered) { ev.button = 0; ev.scanCode = 0; ev.mods = 0; + if (prevCursorEnterCallback) { + prevCursorEnterCallback(window, entered); + } } void CursorPosCallback(GLFWwindow *window, double xPos, double yPos) { @@ -42,6 +52,9 @@ void CursorPosCallback(GLFWwindow *window, double xPos, double yPos) { ev.button = 0; ev.scanCode = 0; ev.mods = 0; + if (prevCursorPosCallback) { + prevCursorPosCallback(window, xPos, yPos); + } } void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods) { @@ -57,6 +70,9 @@ void KeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods ev.button = key; ev.scanCode = scancode; ev.mods = mods; + if (prevKeyCallback) { + prevKeyCallback(window, key, scancode, action, mods); + } } void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { @@ -72,6 +88,9 @@ void MouseButtonCallback(GLFWwindow *window, int button, int action, int mods) { ev.button = button; ev.scanCode = 0; ev.mods = mods; + if (prevMouseButtonCallback) { + prevMouseButtonCallback(window, button, action, mods); + } } void ScrollCallback(GLFWwindow *window, double xOffset, double yOffset) { @@ -87,6 +106,9 @@ void ScrollCallback(GLFWwindow *window, double xOffset, double yOffset) { ev.button = 0; ev.scanCode = 0; ev.mods = 0; + if (prevScrollCallback) { + prevScrollCallback(window, xOffset, yOffset); + } } void WindowFocusCallback(GLFWwindow *window, int focused) { @@ -102,18 +124,27 @@ void WindowFocusCallback(GLFWwindow *window, int focused) { ev.button = 0; ev.scanCode = 0; ev.mods = 0; + if (prevWindowFocusCallback) { + prevWindowFocusCallback(window, focused); + } } void PkeInput_Init() { - glfwSetCursorEnterCallback(window, CursorEnterCallback); - glfwSetCursorPosCallback(window, CursorPosCallback); - glfwSetKeyCallback(window, KeyCallback); - glfwSetMouseButtonCallback(window, MouseButtonCallback); - glfwSetScrollCallback(window, ScrollCallback); - glfwSetWindowFocusCallback(window, WindowFocusCallback); + prevCursorEnterCallback = glfwSetCursorEnterCallback(window, CursorEnterCallback); + prevCursorPosCallback = glfwSetCursorPosCallback(window, CursorPosCallback); + prevKeyCallback = glfwSetKeyCallback(window, KeyCallback); + prevMouseButtonCallback = glfwSetMouseButtonCallback(window, MouseButtonCallback); + prevScrollCallback = glfwSetScrollCallback(window, ScrollCallback); + prevWindowFocusCallback = glfwSetWindowFocusCallback(window, WindowFocusCallback); } void PkeInput_Teardown() { UnhandledPkeInputEvents.~DynArray(); + if (prevWindowFocusCallback) { glfwSetWindowFocusCallback(window, prevWindowFocusCallback); } + if (prevScrollCallback) { glfwSetScrollCallback(window, prevScrollCallback); } + if (prevMouseButtonCallback) { glfwSetMouseButtonCallback(window, prevMouseButtonCallback); } + if (prevKeyCallback) { glfwSetKeyCallback(window, prevKeyCallback); } + if (prevCursorPosCallback) { glfwSetCursorPosCallback(window, prevCursorPosCallback); } + if (prevCursorEnterCallback) { glfwSetCursorEnterCallback(window, prevCursorEnterCallback); } } |
