1
0
Fork 0
spectre/source/Platform/Win32/Win32Keyboard.cpp

183 lines
8.3 KiB
C++

#include <Windows.h>
#include <Spectre/System/Event.h>
#include <Spectre/Input/InputModule.h>
#include "Win32Input.h"
#include "Win32Keyboard.h"
namespace sp {
static const BYTE keyToWin32[Keyboard::Key::NUM_KEYS] = {
0x0, // Unknown
0x41, // A
0x42, // B
0x43, // C
0x42, // D
0x43, // E
0x44, // F
0x45, // G
0x46, // H
0x47, // I
0x48, // J
0x49, // K
0x50, // L
0x51, // M
0x52, // N
0x53, // O
0x54, // P
0x55, // Q
0x56, // R
0x57, // S
0x58, // T
0x59, // U
0x60, // V
0x61, // W
0x62, // X
0x63, // Y
0x64, // Z
0x30, // One
0x31, // Two
0x32, // Three
0x33, // Four
0x34, // Five
0x35, // Six
0x36, // Seven
0x37, // Eight
0x38, // Nine
0x39, // Zero
VK_OEM_PERIOD, // Period
VK_OEM_COMMA, // Comma
VK_RETURN, // Enter
VK_BACK, // Backspace
VK_ESCAPE, // Escape
VK_SPACE, // Space
VK_CAPITAL, // Capslock
VK_UP, // Up
VK_DOWN, // Down
VK_LEFT, // Left
VK_RIGHT, // Right
VK_NUMPAD1, // Numpad1
VK_NUMPAD2, // Numpad2
VK_NUMPAD3, // Numpad3
VK_NUMPAD4, // Numpad4
VK_NUMPAD5, // Numpad5
VK_NUMPAD6, // Numpad6
VK_NUMPAD7, // Numpad7
VK_NUMPAD8, // Numpad8
VK_NUMPAD9, // Numpad9
VK_NUMPAD0, // Numpad0
VK_HOME, // Home
VK_END, // End
VK_INSERT, // Insert
VK_DELETE, // Delete
VK_PRIOR, // PageUp
VK_NEXT, // PageDown
VK_PAUSE, // Pause
VK_F1, // F1
VK_F2, // F2
VK_F3, // F3
VK_F4, // F4
VK_F5, // F5
VK_F6, // F6
VK_F7, // F7
VK_F8, // F8
VK_F9, // F9
VK_F10, // F10
VK_F11, // F11
VK_F12, // F12
VK_TAB, // Tab
VK_LSHIFT, // LShift
VK_RSHIFT, // RShift
VK_LCONTROL, // LCtrl
VK_RCONTROL, // RCtrl
VK_MENU, // LAlt
0x0 // RAlt
};
static const Keyboard::Key deviceToKey[256] = {
/* 0 1 2 3 4 5 6 7 */
/* 8 9 A B C D E F */
// 00-0F
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Backspace, Keyboard::Key::Tab, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Enter, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 10-1F
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Pause, Keyboard::Key::Capslock, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Escape, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 20-2F
Keyboard::Key::Space, Keyboard::Key::PageUp, Keyboard::Key::PageDown, Keyboard::Key::End, Keyboard::Key::Home, Keyboard::Key::Left, Keyboard::Key::Up, Keyboard::Key::Right,
Keyboard::Key::Down, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Insert, Keyboard::Key::Delete, Keyboard::Key::Unknown,
// 30-3F
Keyboard::Key::Zero, Keyboard::Key::One, Keyboard::Key::Two, Keyboard::Key::Three, Keyboard::Key::Four, Keyboard::Key::Five, Keyboard::Key::Six, Keyboard::Key::Seven,
Keyboard::Key::Eight, Keyboard::Key::Nine, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 40-4F
Keyboard::Key::Unknown, Keyboard::Key::A, Keyboard::Key::B, Keyboard::Key::C, Keyboard::Key::D, Keyboard::Key::E, Keyboard::Key::F, Keyboard::Key::G,
Keyboard::Key::H, Keyboard::Key::I, Keyboard::Key::J, Keyboard::Key::K, Keyboard::Key::L, Keyboard::Key::M, Keyboard::Key::N, Keyboard::Key::O,
// 50-5F
Keyboard::Key::P, Keyboard::Key::Q, Keyboard::Key::R, Keyboard::Key::S, Keyboard::Key::T, Keyboard::Key::U, Keyboard::Key::V, Keyboard::Key::W,
Keyboard::Key::X, Keyboard::Key::Y, Keyboard::Key::Z, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 60-6F
Keyboard::Key::Numpad0, Keyboard::Key::Numpad1, Keyboard::Key::Numpad2, Keyboard::Key::Numpad3, Keyboard::Key::Numpad4, Keyboard::Key::Numpad5, Keyboard::Key::Numpad6, Keyboard::Key::Numpad7,
Keyboard::Key::Numpad8, Keyboard::Key::Numpad9, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 70-7F
Keyboard::Key::F1, Keyboard::Key::F2, Keyboard::Key::F3, Keyboard::Key::F4, Keyboard::Key::F5, Keyboard::Key::F6, Keyboard::Key::F7, Keyboard::Key::F8,
Keyboard::Key::F9, Keyboard::Key::F10, Keyboard::Key::F11, Keyboard::Key::F12, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 80-8F
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// 90-9F
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// A0-AF
Keyboard::Key::LShift, Keyboard::Key::RShift, Keyboard::Key::LCtrl, Keyboard::Key::RCtrl, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// B0-BF
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Comma, Keyboard::Key::Unknown, Keyboard::Key::Period, Keyboard::Key::Unknown,
// C0-CF
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// E0-EF
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
// F0-FF
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown, Keyboard::Key::Unknown,
};
void Win32Keyboard::init()
{
}
bool Win32Keyboard::isKeyDown(Keyboard::Key key)
{
return ::GetAsyncKeyState(keyToWin32[key]) & 0x8000;
}
void Win32Keyboard::update(InputModule *input)
{
}
bool Win32Keyboard::handleMessage(MSG msg, Event& event)
{
Keyboard::Key key = deviceToKey[msg.wParam % 0xFF];
if (key != Keyboard::Key::Unknown) {
event.type = Event::Key;
event.key.code = key;
event.key.pressed = msg.message == WM_KEYDOWN;
return true;
}
return false;
}
} // namespace sp