From cae906072e2048ab0866ea1fe253c7c0b0795d63 Mon Sep 17 00:00:00 2001 From: Andrew Cox Date: Wed, 20 Jul 2016 17:21:56 -0700 Subject: [PATCH] modified GLFW engine to handle key modifers (e.g., Shift, Ctrl, Cmd) in a single key press; greatly improves typing speed --- src/EngineGLFW.cpp | 19 ++++++++++++++++--- src/EngineGLFW.h | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/EngineGLFW.cpp b/src/EngineGLFW.cpp index 083d34a..52ea501 100755 --- a/src/EngineGLFW.cpp +++ b/src/EngineGLFW.cpp @@ -48,9 +48,9 @@ void EngineGLFW::setup() // Override listeners ofAddListener(ofEvents().mousePressed, this, &EngineGLFW::onMousePressed); ofAddListener(ofEvents().keyReleased, this, &EngineGLFW::onKeyReleased); - + ofAddListener(ofEvents().keyPressed, this, &EngineGLFW::onKeyPressed); + // BaseEngine listeners - ofAddListener(ofEvents().keyPressed, (BaseEngine*)this, &BaseEngine::onKeyPressed); ofAddListener(ofEvents().mouseDragged, (BaseEngine*)this, &BaseEngine::onMouseDragged); ofAddListener(ofEvents().mouseReleased, (BaseEngine*)this, &BaseEngine::onMouseReleased); ofAddListener(ofEvents().mouseScrolled, (BaseEngine*)this, &BaseEngine::onMouseScrolled); @@ -66,9 +66,9 @@ void EngineGLFW::exit() // Override listeners ofRemoveListener(ofEvents().mousePressed, this, &EngineGLFW::onMousePressed); ofRemoveListener(ofEvents().keyReleased, this, &EngineGLFW::onKeyReleased); + ofRemoveListener(ofEvents().keyPressed, this, &EngineGLFW::onKeyPressed); // Base class listeners - ofRemoveListener(ofEvents().keyPressed, (BaseEngine*)this, &BaseEngine::onKeyPressed); ofRemoveListener(ofEvents().mouseDragged, (BaseEngine*)this, &BaseEngine::onMouseDragged); ofRemoveListener(ofEvents().mouseReleased, (BaseEngine*)this, &BaseEngine::onMouseReleased); ofRemoveListener(ofEvents().mouseScrolled, (BaseEngine*)this, &BaseEngine::onMouseScrolled); @@ -290,6 +290,19 @@ void EngineGLFW::onKeyReleased(ofKeyEventArgs& event) io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; + io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; +} + +void EngineGLFW::onKeyPressed(ofKeyEventArgs& event){ + int key = event.keycode; + ImGuiIO& io = ImGui::GetIO(); + io.KeysDown[key] = true; + + io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; + io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; + io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; + io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; + if(key < GLFW_KEY_ESCAPE) { io.AddInputCharacter((unsigned short)event.codepoint); diff --git a/src/EngineGLFW.h b/src/EngineGLFW.h index 3395fc0..96f5583 100755 --- a/src/EngineGLFW.h +++ b/src/EngineGLFW.h @@ -19,6 +19,7 @@ class EngineGLFW : public BaseEngine bool createFontsTexture(); void onKeyReleased(ofKeyEventArgs& event) override; + void onKeyPressed(ofKeyEventArgs& event) override; void onMousePressed(ofMouseEventArgs& event) override; // Custom