|
|
@ -13,15 +13,26 @@ constexpr PadIdentifier key_identifier = { |
|
|
.port = 0, |
|
|
.port = 0, |
|
|
.pad = 0, |
|
|
.pad = 0, |
|
|
}; |
|
|
}; |
|
|
constexpr PadIdentifier modifier_identifier = { |
|
|
|
|
|
|
|
|
constexpr PadIdentifier keyboard_key_identifier = { |
|
|
.guid = Common::UUID{Common::INVALID_UUID}, |
|
|
.guid = Common::UUID{Common::INVALID_UUID}, |
|
|
.port = 0, |
|
|
|
|
|
|
|
|
.port = 1, |
|
|
|
|
|
.pad = 0, |
|
|
|
|
|
}; |
|
|
|
|
|
constexpr PadIdentifier keyboard_modifier_identifier = { |
|
|
|
|
|
.guid = Common::UUID{Common::INVALID_UUID}, |
|
|
|
|
|
.port = 1, |
|
|
.pad = 1, |
|
|
.pad = 1, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
Keyboard::Keyboard(const std::string& input_engine_) : InputEngine(input_engine_) { |
|
|
Keyboard::Keyboard(const std::string& input_engine_) : InputEngine(input_engine_) { |
|
|
|
|
|
// Keyboard is broken into 3 diferent sets:
|
|
|
|
|
|
// key: Unfiltered intended for controllers.
|
|
|
|
|
|
// keyboard_key: Allows only Settings::NativeKeyboard::Keys intended for keyboard emulation.
|
|
|
|
|
|
// keyboard_modifier: Allows only Settings::NativeKeyboard::Modifiers intended for keyboard
|
|
|
|
|
|
// emulation.
|
|
|
PreSetController(key_identifier); |
|
|
PreSetController(key_identifier); |
|
|
PreSetController(modifier_identifier); |
|
|
|
|
|
|
|
|
PreSetController(keyboard_key_identifier); |
|
|
|
|
|
PreSetController(keyboard_modifier_identifier); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Keyboard::PressKey(int key_code) { |
|
|
void Keyboard::PressKey(int key_code) { |
|
|
@ -32,35 +43,50 @@ void Keyboard::ReleaseKey(int key_code) { |
|
|
SetButton(key_identifier, key_code, false); |
|
|
SetButton(key_identifier, key_code, false); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Keyboard::SetModifiers(int key_modifiers) { |
|
|
|
|
|
|
|
|
void Keyboard::PressKeyboardKey(int key_index) { |
|
|
|
|
|
if (key_index == Settings::NativeKeyboard::None) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
SetButton(keyboard_key_identifier, key_index, true); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Keyboard::ReleaseKeyboardKey(int key_index) { |
|
|
|
|
|
if (key_index == Settings::NativeKeyboard::None) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
SetButton(keyboard_key_identifier, key_index, false); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void Keyboard::SetKeyboardModifiers(int key_modifiers) { |
|
|
for (int i = 0; i < 32; ++i) { |
|
|
for (int i = 0; i < 32; ++i) { |
|
|
bool key_value = ((key_modifiers >> i) & 0x1) != 0; |
|
|
bool key_value = ((key_modifiers >> i) & 0x1) != 0; |
|
|
SetButton(modifier_identifier, i, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_modifier_identifier, i, key_value); |
|
|
// Use the modifier to press the key button equivalent
|
|
|
// Use the modifier to press the key button equivalent
|
|
|
switch (i) { |
|
|
switch (i) { |
|
|
case Settings::NativeKeyboard::LeftControl: |
|
|
case Settings::NativeKeyboard::LeftControl: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::LeftControlKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::LeftControlKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::LeftShift: |
|
|
case Settings::NativeKeyboard::LeftShift: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::LeftShiftKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::LeftShiftKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::LeftAlt: |
|
|
case Settings::NativeKeyboard::LeftAlt: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::LeftAltKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::LeftAltKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::LeftMeta: |
|
|
case Settings::NativeKeyboard::LeftMeta: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::LeftMetaKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::LeftMetaKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::RightControl: |
|
|
case Settings::NativeKeyboard::RightControl: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::RightControlKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::RightControlKey, |
|
|
|
|
|
key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::RightShift: |
|
|
case Settings::NativeKeyboard::RightShift: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::RightShiftKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::RightShiftKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::RightAlt: |
|
|
case Settings::NativeKeyboard::RightAlt: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::RightAltKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::RightAltKey, key_value); |
|
|
break; |
|
|
break; |
|
|
case Settings::NativeKeyboard::RightMeta: |
|
|
case Settings::NativeKeyboard::RightMeta: |
|
|
SetButton(key_identifier, Settings::NativeKeyboard::RightMetaKey, key_value); |
|
|
|
|
|
|
|
|
SetButton(keyboard_key_identifier, Settings::NativeKeyboard::RightMetaKey, key_value); |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
// Other modifier keys should be pressed with PressKey since they stay enabled until
|
|
|
// Other modifier keys should be pressed with PressKey since they stay enabled until
|
|
|
|