summaryrefslogtreecommitdiffstats
path: root/src/input_common
diff options
context:
space:
mode:
authorgerman77 <juangerman-13@hotmail.com>2021-11-14 06:25:45 +0100
committerNarr the Reg <juangerman-13@hotmail.com>2021-11-25 03:30:28 +0100
commitb673857d7dfc72f38d9242b315cd590b859795ff (patch)
tree8dbb0823ddfdb827eec99f9f05c678a9d15d6631 /src/input_common
parentcore/hid: Fix keyboard alignment (diff)
downloadyuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar.gz
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar.bz2
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar.lz
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar.xz
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.tar.zst
yuzu-b673857d7dfc72f38d9242b315cd590b859795ff.zip
Diffstat (limited to '')
-rw-r--r--src/input_common/drivers/keyboard.cpp53
-rw-r--r--src/input_common/drivers/keyboard.h7
-rw-r--r--src/input_common/main.cpp9
-rw-r--r--src/input_common/main.h3
4 files changed, 68 insertions, 4 deletions
diff --git a/src/input_common/drivers/keyboard.cpp b/src/input_common/drivers/keyboard.cpp
index 549704e89..328fe1ac1 100644
--- a/src/input_common/drivers/keyboard.cpp
+++ b/src/input_common/drivers/keyboard.cpp
@@ -3,26 +3,71 @@
// Refer to the license.txt file included
#include "common/param_package.h"
+#include "common/settings_input.h"
#include "input_common/drivers/keyboard.h"
namespace InputCommon {
-constexpr PadIdentifier identifier = {
+constexpr PadIdentifier key_identifier = {
.guid = Common::UUID{Common::INVALID_UUID},
.port = 0,
.pad = 0,
};
+constexpr PadIdentifier modifier_identifier = {
+ .guid = Common::UUID{Common::INVALID_UUID},
+ .port = 0,
+ .pad = 1,
+};
Keyboard::Keyboard(const std::string& input_engine_) : InputEngine(input_engine_) {
- PreSetController(identifier);
+ PreSetController(key_identifier);
+ PreSetController(modifier_identifier);
}
void Keyboard::PressKey(int key_code) {
- SetButton(identifier, key_code, true);
+ SetButton(key_identifier, key_code, true);
}
void Keyboard::ReleaseKey(int key_code) {
- SetButton(identifier, key_code, false);
+ SetButton(key_identifier, key_code, false);
+}
+
+void Keyboard::SetModifiers(int key_modifiers) {
+ for (int i = 0; i < 32; ++i) {
+ bool key_value = ((key_modifiers >> i) & 0x1) != 0;
+ SetButton(modifier_identifier, i, key_value);
+ // Use the modifier to press the key button equivalent
+ switch (i) {
+ case Settings::NativeKeyboard::LeftControl:
+ SetButton(key_identifier, Settings::NativeKeyboard::LeftControlKey, key_value);
+ break;
+ case Settings::NativeKeyboard::LeftShift:
+ SetButton(key_identifier, Settings::NativeKeyboard::LeftShiftKey, key_value);
+ break;
+ case Settings::NativeKeyboard::LeftAlt:
+ SetButton(key_identifier, Settings::NativeKeyboard::LeftAltKey, key_value);
+ break;
+ case Settings::NativeKeyboard::LeftMeta:
+ SetButton(key_identifier, Settings::NativeKeyboard::LeftMetaKey, key_value);
+ break;
+ case Settings::NativeKeyboard::RightControl:
+ SetButton(key_identifier, Settings::NativeKeyboard::RightControlKey, key_value);
+ break;
+ case Settings::NativeKeyboard::RightShift:
+ SetButton(key_identifier, Settings::NativeKeyboard::RightShiftKey, key_value);
+ break;
+ case Settings::NativeKeyboard::RightAlt:
+ SetButton(key_identifier, Settings::NativeKeyboard::RightAltKey, key_value);
+ break;
+ case Settings::NativeKeyboard::RightMeta:
+ SetButton(key_identifier, Settings::NativeKeyboard::RightMetaKey, key_value);
+ break;
+ default:
+ // Other modifier keys should be pressed with PressKey since they stay enabled until
+ // next press
+ break;
+ }
+ }
}
void Keyboard::ReleaseAllKeys() {
diff --git a/src/input_common/drivers/keyboard.h b/src/input_common/drivers/keyboard.h
index 46fe78576..2ab92fd6c 100644
--- a/src/input_common/drivers/keyboard.h
+++ b/src/input_common/drivers/keyboard.h
@@ -28,6 +28,13 @@ public:
*/
void ReleaseKey(int key_code);
+ /**
+ * Sets the status of all keyboard modifier keys
+ * @param key_modifiers the code of the key to release
+ */
+ void SetModifiers(int key_modifiers);
+
+ /// Sets all keys to the non pressed state
void ReleaseAllKeys();
/// Used for automapping features
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp
index df36a337c..ae2518f53 100644
--- a/src/input_common/main.cpp
+++ b/src/input_common/main.cpp
@@ -402,6 +402,15 @@ std::string GenerateKeyboardParam(int key_code) {
return param.Serialize();
}
+std::string GenerateModdifierKeyboardParam(int key_code) {
+ Common::ParamPackage param;
+ param.Set("engine", "keyboard");
+ param.Set("code", key_code);
+ param.Set("toggle", false);
+ param.Set("pad", 1);
+ return param.Serialize();
+}
+
std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right,
int key_modifier, float modifier_scale) {
Common::ParamPackage circle_pad_param{
diff --git a/src/input_common/main.h b/src/input_common/main.h
index a4a24d076..9ea395465 100644
--- a/src/input_common/main.h
+++ b/src/input_common/main.h
@@ -134,6 +134,9 @@ private:
/// Generates a serialized param package for creating a keyboard button device.
std::string GenerateKeyboardParam(int key_code);
+/// Generates a serialized param package for creating a moddifier keyboard button device.
+std::string GenerateModdifierKeyboardParam(int key_code);
+
/// Generates a serialized param package for creating an analog device taking input from keyboard.
std::string GenerateAnalogParamFromKeys(int key_up, int key_down, int key_left, int key_right,
int key_modifier, float modifier_scale);