summaryrefslogtreecommitdiff
path: root/src/player-input.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-20 07:55:34 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-10-20 07:55:34 -0400
commit216b73ff6906954d6addf5b715fe0d7f8efa3f01 (patch)
treed80a78ee7f9a4f1f03137ac28224cfb847387fcb /src/player-input.cpp
parent80e6cef119cdac72fe80b78daa7b4dd53f64c2b4 (diff)
passthrough glfw events to previous callback if exists
Diffstat (limited to 'src/player-input.cpp')
-rw-r--r--src/player-input.cpp43
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); }
}