AndroidWindow implements the platform window on native_app_glue: it follows the window lifecycle, scales by screen density, delivers touch, pen, mouse, scroll and keyboard input with pressure, tilt and batched history, shows the soft keyboard for text fields, and keeps a local clipboard. runAndroidApplication unpacks bundled assets into the app's data directory and runs an application entry from android_main. The Graphics window library, ImGui and native_app_glue now build for Android.
128 lines
4.5 KiB
C++
128 lines
4.5 KiB
C++
#include "AndroidKeys.hpp"
|
|
|
|
#include <android/keycodes.h>
|
|
|
|
#include <unordered_map>
|
|
|
|
namespace tp::android {
|
|
|
|
namespace {
|
|
const std::unordered_map<int32_t, InputID>& keyCodes() {
|
|
static const std::unordered_map<int32_t, InputID> keys = {
|
|
{ AKEYCODE_SPACE, InputID::SPACE },
|
|
{ AKEYCODE_APOSTROPHE, InputID::APOSTROPHE },
|
|
{ AKEYCODE_COMMA, InputID::COMMA },
|
|
{ AKEYCODE_MINUS, InputID::MINUS },
|
|
{ AKEYCODE_PERIOD, InputID::PERIOD },
|
|
{ AKEYCODE_SLASH, InputID::SLASH },
|
|
{ AKEYCODE_0, InputID::N0 },
|
|
{ AKEYCODE_1, InputID::N1 },
|
|
{ AKEYCODE_2, InputID::N2 },
|
|
{ AKEYCODE_3, InputID::N3 },
|
|
{ AKEYCODE_4, InputID::N4 },
|
|
{ AKEYCODE_5, InputID::N5 },
|
|
{ AKEYCODE_6, InputID::N6 },
|
|
{ AKEYCODE_7, InputID::N7 },
|
|
{ AKEYCODE_8, InputID::N8 },
|
|
{ AKEYCODE_9, InputID::N9 },
|
|
{ AKEYCODE_SEMICOLON, InputID::SEMICOLON },
|
|
{ AKEYCODE_EQUALS, InputID::EQUAL },
|
|
{ AKEYCODE_A, InputID::A },
|
|
{ AKEYCODE_B, InputID::B },
|
|
{ AKEYCODE_C, InputID::C },
|
|
{ AKEYCODE_D, InputID::D },
|
|
{ AKEYCODE_E, InputID::E },
|
|
{ AKEYCODE_F, InputID::F },
|
|
{ AKEYCODE_G, InputID::G },
|
|
{ AKEYCODE_H, InputID::H },
|
|
{ AKEYCODE_I, InputID::I },
|
|
{ AKEYCODE_J, InputID::J },
|
|
{ AKEYCODE_K, InputID::K },
|
|
{ AKEYCODE_L, InputID::L },
|
|
{ AKEYCODE_M, InputID::M },
|
|
{ AKEYCODE_N, InputID::N },
|
|
{ AKEYCODE_O, InputID::O },
|
|
{ AKEYCODE_P, InputID::P },
|
|
{ AKEYCODE_Q, InputID::Q },
|
|
{ AKEYCODE_R, InputID::R },
|
|
{ AKEYCODE_S, InputID::S },
|
|
{ AKEYCODE_T, InputID::T },
|
|
{ AKEYCODE_U, InputID::U },
|
|
{ AKEYCODE_V, InputID::V },
|
|
{ AKEYCODE_W, InputID::W },
|
|
{ AKEYCODE_X, InputID::X },
|
|
{ AKEYCODE_Y, InputID::Y },
|
|
{ AKEYCODE_Z, InputID::Z },
|
|
{ AKEYCODE_LEFT_BRACKET, InputID::LEFT_BRACKET },
|
|
{ AKEYCODE_BACKSLASH, InputID::BACKSLASH },
|
|
{ AKEYCODE_RIGHT_BRACKET, InputID::RIGHT_BRACKET },
|
|
{ AKEYCODE_GRAVE, InputID::GRAVE_ACCENT },
|
|
{ AKEYCODE_ESCAPE, InputID::ESCAPE },
|
|
{ AKEYCODE_ENTER, InputID::ENTER },
|
|
{ AKEYCODE_TAB, InputID::TAB },
|
|
{ AKEYCODE_DEL, InputID::BACKSPACE },
|
|
{ AKEYCODE_INSERT, InputID::INSERT },
|
|
{ AKEYCODE_FORWARD_DEL, InputID::DELETE_KEY },
|
|
{ AKEYCODE_DPAD_RIGHT, InputID::RIGHT },
|
|
{ AKEYCODE_DPAD_LEFT, InputID::LEFT },
|
|
{ AKEYCODE_DPAD_DOWN, InputID::DOWN },
|
|
{ AKEYCODE_DPAD_UP, InputID::UP },
|
|
{ AKEYCODE_PAGE_UP, InputID::PAGE_UP },
|
|
{ AKEYCODE_PAGE_DOWN, InputID::PAGE_DOWN },
|
|
{ AKEYCODE_MOVE_HOME, InputID::HOME },
|
|
{ AKEYCODE_MOVE_END, InputID::END },
|
|
{ AKEYCODE_CAPS_LOCK, InputID::CAPS_LOCK },
|
|
{ AKEYCODE_SCROLL_LOCK, InputID::SCROLL_LOCK },
|
|
{ AKEYCODE_NUM_LOCK, InputID::NUM_LOCK },
|
|
{ AKEYCODE_SYSRQ, InputID::PRINT_SCREEN },
|
|
{ AKEYCODE_BREAK, InputID::PAUSE },
|
|
{ AKEYCODE_F1, InputID::F1 },
|
|
{ AKEYCODE_F2, InputID::F2 },
|
|
{ AKEYCODE_F3, InputID::F3 },
|
|
{ AKEYCODE_F4, InputID::F4 },
|
|
{ AKEYCODE_F5, InputID::F5 },
|
|
{ AKEYCODE_F6, InputID::F6 },
|
|
{ AKEYCODE_F7, InputID::F7 },
|
|
{ AKEYCODE_F8, InputID::F8 },
|
|
{ AKEYCODE_F9, InputID::F9 },
|
|
{ AKEYCODE_F10, InputID::F10 },
|
|
{ AKEYCODE_F11, InputID::F11 },
|
|
{ AKEYCODE_F12, InputID::F12 },
|
|
{ AKEYCODE_NUMPAD_0, InputID::KP_0 },
|
|
{ AKEYCODE_NUMPAD_1, InputID::KP_1 },
|
|
{ AKEYCODE_NUMPAD_2, InputID::KP_2 },
|
|
{ AKEYCODE_NUMPAD_3, InputID::KP_3 },
|
|
{ AKEYCODE_NUMPAD_4, InputID::KP_4 },
|
|
{ AKEYCODE_NUMPAD_5, InputID::KP_5 },
|
|
{ AKEYCODE_NUMPAD_6, InputID::KP_6 },
|
|
{ AKEYCODE_NUMPAD_7, InputID::KP_7 },
|
|
{ AKEYCODE_NUMPAD_8, InputID::KP_8 },
|
|
{ AKEYCODE_NUMPAD_9, InputID::KP_9 },
|
|
{ AKEYCODE_NUMPAD_DOT, InputID::KP_DECIMAL },
|
|
{ AKEYCODE_NUMPAD_DIVIDE, InputID::KP_DIVIDE },
|
|
{ AKEYCODE_NUMPAD_MULTIPLY, InputID::KP_MULTIPLY },
|
|
{ AKEYCODE_NUMPAD_SUBTRACT, InputID::KP_SUBTRACT },
|
|
{ AKEYCODE_NUMPAD_ADD, InputID::KP_ADD },
|
|
{ AKEYCODE_NUMPAD_ENTER, InputID::KP_ENTER },
|
|
{ AKEYCODE_NUMPAD_EQUALS, InputID::KP_EQUAL },
|
|
{ AKEYCODE_SHIFT_LEFT, InputID::LEFT_SHIFT },
|
|
{ AKEYCODE_CTRL_LEFT, InputID::LEFT_CONTROL },
|
|
{ AKEYCODE_ALT_LEFT, InputID::LEFT_ALT },
|
|
{ AKEYCODE_META_LEFT, InputID::LEFT_SUPER },
|
|
{ AKEYCODE_SHIFT_RIGHT, InputID::RIGHT_SHIFT },
|
|
{ AKEYCODE_CTRL_RIGHT, InputID::RIGHT_CONTROL },
|
|
{ AKEYCODE_ALT_RIGHT, InputID::RIGHT_ALT },
|
|
{ AKEYCODE_META_RIGHT, InputID::RIGHT_SUPER },
|
|
{ AKEYCODE_MENU, InputID::MENU },
|
|
};
|
|
return keys;
|
|
}
|
|
}
|
|
|
|
std::optional<InputID> inputFromKeyCode(int32_t keyCode) {
|
|
const auto& keys = keyCodes();
|
|
const auto found = keys.find(keyCode);
|
|
if (found == keys.end()) return std::nullopt;
|
|
return found->second;
|
|
}
|
|
}
|