InputCommon: add Keyboard
This commit is contained in:
		| @@ -18,7 +18,7 @@ create_directory_groups(${SRCS} ${HEADERS}) | ||||
| include_directories(${SDL2_INCLUDE_DIR}) | ||||
|  | ||||
| add_executable(citra ${SRCS} ${HEADERS}) | ||||
| target_link_libraries(citra core video_core audio_core common) | ||||
| target_link_libraries(citra core video_core audio_core common input_common) | ||||
| target_link_libraries(citra ${SDL2_LIBRARY} ${OPENGL_gl_LIBRARY} inih glad) | ||||
| if (MSVC) | ||||
|     target_link_libraries(citra getopt) | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
| #include "common/logging/log.h" | ||||
| #include "config.h" | ||||
| #include "core/settings.h" | ||||
| #include "input_common/main.h" | ||||
|  | ||||
| Config::Config() { | ||||
|     // TODO: Don't hardcode the path; let the frontend decide where to put the config files. | ||||
| @@ -37,25 +38,21 @@ bool Config::LoadINI(const std::string& default_contents, bool retry) { | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| static const std::array<int, Settings::NativeInput::NUM_INPUTS> defaults = { | ||||
|     // directly mapped keys | ||||
|     SDL_SCANCODE_A, SDL_SCANCODE_S, SDL_SCANCODE_Z, SDL_SCANCODE_X, SDL_SCANCODE_Q, SDL_SCANCODE_W, | ||||
|     SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_M, SDL_SCANCODE_N, SDL_SCANCODE_B, SDL_SCANCODE_T, | ||||
|     SDL_SCANCODE_G, SDL_SCANCODE_F, SDL_SCANCODE_H, SDL_SCANCODE_I, SDL_SCANCODE_K, SDL_SCANCODE_J, | ||||
|     SDL_SCANCODE_L, | ||||
|  | ||||
|     // indirectly mapped keys | ||||
|     SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_D, | ||||
| static const std::array<int, Settings::NativeButton::NumButtons> default_buttons = { | ||||
|     SDL_SCANCODE_A, SDL_SCANCODE_S, SDL_SCANCODE_Z, SDL_SCANCODE_X, SDL_SCANCODE_T, | ||||
|     SDL_SCANCODE_G, SDL_SCANCODE_F, SDL_SCANCODE_H, SDL_SCANCODE_Q, SDL_SCANCODE_W, | ||||
|     SDL_SCANCODE_M, SDL_SCANCODE_N, SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_B, | ||||
| }; | ||||
|  | ||||
| void Config::ReadValues() { | ||||
|     // Controls | ||||
|     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||
|         Settings::values.input_mappings[Settings::NativeInput::All[i]] = | ||||
|             sdl2_config->GetInteger("Controls", Settings::NativeInput::Mapping[i], defaults[i]); | ||||
|     for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | ||||
|         std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); | ||||
|         Settings::values.buttons[i] = | ||||
|             sdl2_config->Get("Controls", Settings::NativeButton::mapping[i], default_param); | ||||
|         if (Settings::values.buttons[i].empty()) | ||||
|             Settings::values.buttons[i] = default_param; | ||||
|     } | ||||
|     Settings::values.pad_circle_modifier_scale = | ||||
|         (float)sdl2_config->GetReal("Controls", "pad_circle_modifier_scale", 0.5); | ||||
|  | ||||
|     // Core | ||||
|     Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); | ||||
|   | ||||
| @@ -12,9 +12,9 @@ | ||||
| #include "common/logging/log.h" | ||||
| #include "common/scm_rev.h" | ||||
| #include "common/string_util.h" | ||||
| #include "core/frontend/key_map.h" | ||||
| #include "core/hle/service/hid/hid.h" | ||||
| #include "core/settings.h" | ||||
| #include "input_common/keyboard.h" | ||||
| #include "input_common/main.h" | ||||
| #include "video_core/video_core.h" | ||||
|  | ||||
| void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { | ||||
| @@ -40,9 +40,9 @@ void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { | ||||
|  | ||||
| void EmuWindow_SDL2::OnKeyEvent(int key, u8 state) { | ||||
|     if (state == SDL_PRESSED) { | ||||
|         KeyMap::PressKey(*this, {key, keyboard_id}); | ||||
|         InputCommon::GetKeyboard()->PressKey(key); | ||||
|     } else if (state == SDL_RELEASED) { | ||||
|         KeyMap::ReleaseKey(*this, {key, keyboard_id}); | ||||
|         InputCommon::GetKeyboard()->ReleaseKey(key); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -57,9 +57,8 @@ void EmuWindow_SDL2::OnResize() { | ||||
| } | ||||
|  | ||||
| EmuWindow_SDL2::EmuWindow_SDL2() { | ||||
|     keyboard_id = KeyMap::NewDeviceId(); | ||||
|     InputCommon::Init(); | ||||
|  | ||||
|     ReloadSetKeymaps(); | ||||
|     motion_emu = std::make_unique<Motion::MotionEmu>(*this); | ||||
|  | ||||
|     SDL_SetMainReady(); | ||||
| @@ -117,6 +116,7 @@ EmuWindow_SDL2::~EmuWindow_SDL2() { | ||||
|     SDL_GL_DeleteContext(gl_context); | ||||
|     SDL_Quit(); | ||||
|     motion_emu = nullptr; | ||||
|     InputCommon::Shutdown(); | ||||
| } | ||||
|  | ||||
| void EmuWindow_SDL2::SwapBuffers() { | ||||
| @@ -169,15 +169,6 @@ void EmuWindow_SDL2::DoneCurrent() { | ||||
|     SDL_GL_MakeCurrent(render_window, nullptr); | ||||
| } | ||||
|  | ||||
| void EmuWindow_SDL2::ReloadSetKeymaps() { | ||||
|     KeyMap::ClearKeyMapping(keyboard_id); | ||||
|     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||
|         KeyMap::SetKeyMapping( | ||||
|             {Settings::values.input_mappings[Settings::NativeInput::All[i]], keyboard_id}, | ||||
|             KeyMap::mapping_targets[i]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void EmuWindow_SDL2::OnMinimalClientAreaChangeRequest( | ||||
|     const std::pair<unsigned, unsigned>& minimal_size) { | ||||
|  | ||||
|   | ||||
| @@ -31,9 +31,6 @@ public: | ||||
|     /// Whether the window is still open, and a close request hasn't yet been sent | ||||
|     bool IsOpen() const; | ||||
|  | ||||
|     /// Load keymap from configuration | ||||
|     void ReloadSetKeymaps() override; | ||||
|  | ||||
| private: | ||||
|     /// Called by PollEvents when a key is pressed or released. | ||||
|     void OnKeyEvent(int key, u8 state); | ||||
| @@ -61,9 +58,6 @@ private: | ||||
|     /// The OpenGL context associated with the window | ||||
|     SDL_GLContext gl_context; | ||||
|  | ||||
|     /// Device id of keyboard for use with KeyMap | ||||
|     int keyboard_id; | ||||
|  | ||||
|     /// Motion sensors emulation | ||||
|     std::unique_ptr<Motion::MotionEmu> motion_emu; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 wwylele
					wwylele