diff options
Diffstat (limited to 'src/common/key_map.h')
-rw-r--r-- | src/common/key_map.h | 59 |
1 files changed, 55 insertions, 4 deletions
diff --git a/src/common/key_map.h b/src/common/key_map.h index 68f7e2f99a..b62f017c69 100644 --- a/src/common/key_map.h +++ b/src/common/key_map.h @@ -4,12 +4,51 @@ #pragma once +#include <array> #include <tuple> #include "core/hle/service/hid/hid.h" +class EmuWindow; + namespace KeyMap { /** + * Represents key mapping targets that are not real 3DS buttons. + * They will be handled by KeyMap and translated to 3DS input. + */ +enum class IndirectTarget { + CirclePadUp, + CirclePadDown, + CirclePadLeft, + CirclePadRight, + CirclePadModifier, +}; + +/** + * Represents a key mapping target. It can be a PadState that represents real 3DS buttons, + * or an IndirectTarget. + */ +struct KeyTarget { + bool direct; + union { + u32 direct_target_hex; + IndirectTarget indirect_target; + } target; + + KeyTarget() : direct(true) { + target.direct_target_hex = 0; + } + + KeyTarget(Service::HID::PadState pad) : direct(true) { + target.direct_target_hex = pad.hex; + } + + KeyTarget(IndirectTarget i) : direct(false) { + target.indirect_target = i; + } +}; + +/** * Represents a key for a specific host device. */ struct HostDeviceKey { @@ -27,19 +66,31 @@ struct HostDeviceKey { } }; +extern const std::array<KeyTarget, Settings::NativeInput::NUM_INPUTS> mapping_targets; + /** * Generates a new device id, which uniquely identifies a host device within KeyMap. */ int NewDeviceId(); /** - * Maps a device-specific key to a PadState. + * Maps a device-specific key to a target (a PadState or an IndirectTarget). + */ +void SetKeyMapping(HostDeviceKey key, KeyTarget target); + +/** + * Clears all key mappings belonging to one device. + */ +void ClearKeyMapping(int device_id); + +/** + * Maps a key press action and call the corresponding function in EmuWindow */ -void SetKeyMapping(HostDeviceKey key, Service::HID::PadState padState); +void PressKey(EmuWindow& emu_window, HostDeviceKey key); /** - * Gets the PadState that's mapped to the provided device-specific key. + * Maps a key release action and call the corresponding function in EmuWindow */ -Service::HID::PadState GetPadKey(HostDeviceKey key); +void ReleaseKey(EmuWindow& emu_window, HostDeviceKey key); } |