improve imgui modifier key handling:
This commit is contained in:
parent
2b0f757fcb
commit
1943b5be64
|
@ -4,5 +4,5 @@
|
|||
|
||||
namespace qk {
|
||||
ImGuiMouseButton TranslateMouseButton(int button);
|
||||
int TranslateKey(int key);
|
||||
ImGuiKey TranslateKey(int key);
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace qk {
|
|||
return button;
|
||||
}
|
||||
|
||||
int TranslateKey(int key) {
|
||||
ImGuiKey TranslateKey(int key) {
|
||||
switch (key) {
|
||||
case GLFW_KEY_TAB: return ImGuiKey_Tab;
|
||||
case GLFW_KEY_LEFT: return ImGuiKey_LeftArrow;
|
||||
|
@ -29,14 +29,14 @@ namespace qk {
|
|||
case GLFW_KEY_SPACE: return ImGuiKey_Space;
|
||||
case GLFW_KEY_ENTER: return ImGuiKey_Enter;
|
||||
case GLFW_KEY_ESCAPE: return ImGuiKey_Escape;
|
||||
case GLFW_KEY_LEFT_CONTROL: return (ImGuiKey)(ImGuiKey_LeftCtrl | ImGuiMod_Ctrl);
|
||||
case GLFW_KEY_LEFT_SHIFT: return (ImGuiKey)(ImGuiKey_LeftShift | ImGuiMod_Shift);
|
||||
case GLFW_KEY_LEFT_ALT: return (ImGuiKey)(ImGuiKey_LeftAlt | ImGuiMod_Alt);
|
||||
case GLFW_KEY_LEFT_SUPER: return (ImGuiKey)(ImGuiKey_LeftSuper | ImGuiMod_Super);
|
||||
case GLFW_KEY_RIGHT_CONTROL: return (ImGuiKey)(ImGuiKey_RightCtrl | ImGuiMod_Ctrl);
|
||||
case GLFW_KEY_RIGHT_SHIFT: return (ImGuiKey)(ImGuiKey_RightShift | ImGuiMod_Shift);
|
||||
case GLFW_KEY_RIGHT_ALT: return (ImGuiKey)(ImGuiKey_RightAlt | ImGuiMod_Alt);
|
||||
case GLFW_KEY_RIGHT_SUPER: return (ImGuiKey)(ImGuiKey_RightSuper | ImGuiMod_Super);
|
||||
case GLFW_KEY_LEFT_CONTROL: return ImGuiKey_LeftCtrl;
|
||||
case GLFW_KEY_LEFT_SHIFT: return ImGuiKey_LeftShift;
|
||||
case GLFW_KEY_LEFT_ALT: return ImGuiKey_LeftAlt;
|
||||
case GLFW_KEY_LEFT_SUPER: return ImGuiKey_LeftSuper;
|
||||
case GLFW_KEY_RIGHT_CONTROL: return ImGuiKey_RightCtrl;
|
||||
case GLFW_KEY_RIGHT_SHIFT: return ImGuiKey_RightShift;
|
||||
case GLFW_KEY_RIGHT_ALT: return ImGuiKey_RightAlt;
|
||||
case GLFW_KEY_RIGHT_SUPER: return ImGuiKey_RightSuper;
|
||||
case GLFW_KEY_MENU: return ImGuiKey_Menu;
|
||||
case GLFW_KEY_0: return ImGuiKey_0;
|
||||
case GLFW_KEY_1: return ImGuiKey_1;
|
||||
|
|
|
@ -107,52 +107,50 @@ namespace qk {
|
|||
|
||||
bool ImGuiLayer::OnKeyPressedEvent(KeyPressedEvent& e) {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
int key = TranslateKey(e.GetKeyCode());
|
||||
int mod = ImGuiMod_Mask_ & key;
|
||||
ImGuiKey key = TranslateKey(e.GetKeyCode());
|
||||
|
||||
if ((mod & ImGuiMod_Ctrl) != 0) {
|
||||
if (key == ImGuiKey_LeftCtrl || key == ImGuiKey_RightCtrl) {
|
||||
io.AddKeyEvent(ImGuiMod_Ctrl, true);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Shift) != 0) {
|
||||
if (key == ImGuiKey_LeftShift || key == ImGuiKey_RightShift) {
|
||||
io.AddKeyEvent(ImGuiMod_Shift, true);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Alt) != 0) {
|
||||
if (key == ImGuiKey_LeftAlt || key == ImGuiKey_RightAlt) {
|
||||
io.AddKeyEvent(ImGuiMod_Alt, true);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Super) != 0) {
|
||||
if (key == ImGuiKey_LeftSuper || key == ImGuiKey_RightSuper) {
|
||||
io.AddKeyEvent(ImGuiMod_Super, true);
|
||||
}
|
||||
|
||||
io.AddKeyEvent((ImGuiKey)(key & ~ImGuiMod_Mask_), true);
|
||||
io.AddKeyEvent(key, true);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ImGuiLayer::OnKeyReleasedEvent(KeyReleasedEvent& e) {
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
int key = TranslateKey(e.GetKeyCode());
|
||||
int mod = ImGuiMod_Mask_ & key;
|
||||
ImGuiKey key = TranslateKey(e.GetKeyCode());
|
||||
|
||||
if ((mod & ImGuiMod_Ctrl) != 0) {
|
||||
if (key == ImGuiKey_LeftCtrl || key == ImGuiKey_RightCtrl) {
|
||||
io.AddKeyEvent(ImGuiMod_Ctrl, false);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Shift) != 0) {
|
||||
if (key == ImGuiKey_LeftShift || key == ImGuiKey_RightShift) {
|
||||
io.AddKeyEvent(ImGuiMod_Shift, false);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Alt) != 0) {
|
||||
if (key == ImGuiKey_LeftAlt || key == ImGuiKey_RightAlt) {
|
||||
io.AddKeyEvent(ImGuiMod_Alt, false);
|
||||
}
|
||||
|
||||
if ((mod & ImGuiMod_Super) != 0) {
|
||||
if (key == ImGuiKey_LeftSuper || key == ImGuiKey_RightSuper) {
|
||||
io.AddKeyEvent(ImGuiMod_Super, false);
|
||||
}
|
||||
|
||||
io.AddKeyEvent((ImGuiKey)(key & ~ImGuiMod_Mask_), false);
|
||||
io.AddKeyEvent(key, false);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue