summaryrefslogtreecommitdiffstats
path: root/src/common/key_map.h
diff options
context:
space:
mode:
authorwwylele <wwylele@gmail.com>2016-05-12 12:09:36 +0200
committerwwylele <wwylele@gmail.com>2016-05-15 12:24:22 +0200
commit03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9 (patch)
tree95edc62b3b8520a533e534bf4991159875fef3e5 /src/common/key_map.h
parentAudioCore: Implement time stretcher (#1737) (diff)
downloadyuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar.gz
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar.bz2
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar.lz
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar.xz
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.tar.zst
yuzu-03631f9b8fe75cf1c3a70a3094aeddcebffa4cf9.zip
Diffstat (limited to 'src/common/key_map.h')
-rw-r--r--src/common/key_map.h51
1 files changed, 47 insertions, 4 deletions
diff --git a/src/common/key_map.h b/src/common/key_map.h
index 68f7e2f99..0438a14e0 100644
--- a/src/common/key_map.h
+++ b/src/common/key_map.h
@@ -4,11 +4,42 @@
#pragma once
+#include <array>
#include <tuple>
#include "core/hle/service/hid/hid.h"
+class EmuWindow;
+
namespace KeyMap {
+enum class IndirectTarget {
+ CIRCLE_PAD_UP, CIRCLE_PAD_DOWN, CIRCLE_PAD_LEFT, CIRCLE_PAD_RIGHT,
+};
+
+/**
+ * Represents a key mapping target. It can be a PadState that represents 3DS real 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.
*/
@@ -27,19 +58,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 actions 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 actions and call the corresponding function in EmuWindow
*/
-Service::HID::PadState GetPadKey(HostDeviceKey key);
+void ReleaseKey(EmuWindow& emu_window, HostDeviceKey key);
}