Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
graphite/engine/platform/glfw/inputpump.cpp
2024-01-03 16:05:02 -05:00

110 lines
No EOL
3.1 KiB
C++

#include "inputpump.hpp"
#include <GLFW/glfw3.h>
#include <platform.hpp>
#include <map>
#include <input.hpp>
#include <log.hpp>
const std::map<int, Key> translatekey = {
{ GLFW_KEY_A, Key::A },
{ GLFW_KEY_B, Key::B },
{ GLFW_KEY_C, Key::C },
{ GLFW_KEY_D, Key::D },
{ GLFW_KEY_E, Key::E },
{ GLFW_KEY_F, Key::F },
{ GLFW_KEY_G, Key::G },
{ GLFW_KEY_H, Key::H },
{ GLFW_KEY_I, Key::I },
{ GLFW_KEY_J, Key::J },
{ GLFW_KEY_K, Key::K },
{ GLFW_KEY_L, Key::L },
{ GLFW_KEY_M, Key::M },
{ GLFW_KEY_N, Key::N },
{ GLFW_KEY_O, Key::O },
{ GLFW_KEY_P, Key::P },
{ GLFW_KEY_Q, Key::Q },
{ GLFW_KEY_R, Key::R },
{ GLFW_KEY_S, Key::S },
{ GLFW_KEY_T, Key::T },
{ GLFW_KEY_U, Key::U },
{ GLFW_KEY_V, Key::V },
{ GLFW_KEY_W, Key::W },
{ GLFW_KEY_X, Key::X },
{ GLFW_KEY_Y, Key::Y },
{ GLFW_KEY_Z, Key::Z },
{ GLFW_KEY_TAB, Key::Tab },
{ GLFW_KEY_UP, Key::UpArrow },
{ GLFW_KEY_LEFT, Key::LeftArrow },
{ GLFW_KEY_RIGHT, Key::RightArrow },
{ GLFW_KEY_DOWN, Key::DownArrow },
{ GLFW_KEY_BACKSPACE, Key::Backspace },
{ GLFW_KEY_ENTER, Key::Enter },
{ GLFW_KEY_LEFT_CONTROL, Key::LeftControl },
{ GLFW_KEY_RIGHT_CONTROL, Key::RightControl },
{ GLFW_KEY_LEFT_SHIFT, Key::LeftShift },
{ GLFW_KEY_RIGHT_SHIFT, Key::RightShift },
{ GLFW_KEY_LEFT_ALT, Key::LeftAlt },
{ GLFW_KEY_RIGHT_ALT, Key::RightAlt },
{ GLFW_KEY_LEFT_SUPER, Key::LeftSuper },
{ GLFW_KEY_RIGHT_SUPER, Key::RightSuper }
};
static void cursor_pos_callback(GLFWwindow*, double xpos, double ypos)
{
Input::FeedMousePosition(static_cast<float>(xpos), static_cast<float>(ypos));
}
void mouse_button_callback(GLFWwindow*, int button, int action, int)
{
switch(button)
{
case GLFW_MOUSE_BUTTON_LEFT:
Input::FeedMouseState(MouseButton::Left, action);
break;
case GLFW_MOUSE_BUTTON_RIGHT:
Input::FeedMouseState(MouseButton::Right, action);
break;
default:
break;
}
}
void scroll_callback(GLFWwindow*, double, double yoffset)
{
Input::FeedScroll(yoffset);
}
void key_callback(GLFWwindow*, int key, int, int action, int)
{
if(!translatekey.count(key))
return;
Input::FeedKeyState(translatekey.at(key), action);
}
void char_callback(GLFWwindow*, unsigned int c)
{
Input::FeedChar(c);
}
void InputPump::Initialize()
{
Log::Print("Setting up input callbacks...");
GLFWwindow* window = static_cast<GLFWwindow*>(Platform::GetUserData());
glfwSetCursorPosCallback(window, cursor_pos_callback);
glfwSetMouseButtonCallback(window, mouse_button_callback);
glfwSetScrollCallback(window, scroll_callback);
glfwSetKeyCallback(window, key_callback);
glfwSetCharCallback(window, char_callback);
glfwSetInputMode(window, GLFW_STICKY_KEYS, 1);
//glfwSetInputMode(window, GLFW_STICKY_MOUSE_BUTTONS, 1);
}
void InputPump::PollEvents()
{
glfwPollEvents();
}