2021-09-20 22:18:40 +00:00
|
|
|
// Copyright 2021 yuzu Emulator Project
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included
|
|
|
|
|
|
|
|
#include "common/param_package.h"
|
2021-11-14 05:25:45 +00:00
|
|
|
#include "common/settings_input.h"
|
2021-09-20 22:18:40 +00:00
|
|
|
#include "input_common/drivers/keyboard.h"
|
|
|
|
|
|
|
|
namespace InputCommon {
|
|
|
|
|
2021-11-14 05:25:45 +00:00
|
|
|
constexpr PadIdentifier key_identifier = {
|
2021-11-01 20:17:53 +00:00
|
|
|
.guid = Common::UUID{Common::INVALID_UUID},
|
|
|
|
.port = 0,
|
|
|
|
.pad = 0,
|
|
|
|
};
|
2021-11-14 05:25:45 +00:00
|
|
|
constexpr PadIdentifier modifier_identifier = {
|
|
|
|
.guid = Common::UUID{Common::INVALID_UUID},
|
|
|
|
.port = 0,
|
|
|
|
.pad = 1,
|
|
|
|
};
|
2021-11-01 20:17:53 +00:00
|
|
|
|
2021-09-20 22:18:40 +00:00
|
|
|
Keyboard::Keyboard(const std::string& input_engine_) : InputEngine(input_engine_) {
|
2021-11-14 05:25:45 +00:00
|
|
|
PreSetController(key_identifier);
|
|
|
|
PreSetController(modifier_identifier);
|
2021-09-20 22:18:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Keyboard::PressKey(int key_code) {
|
2021-11-14 05:25:45 +00:00
|
|
|
SetButton(key_identifier, key_code, true);
|
2021-09-20 22:18:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Keyboard::ReleaseKey(int key_code) {
|
2021-11-14 05:25:45 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2021-09-20 22:18:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void Keyboard::ReleaseAllKeys() {
|
|
|
|
ResetButtonState();
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<Common::ParamPackage> Keyboard::GetInputDevices() const {
|
|
|
|
std::vector<Common::ParamPackage> devices;
|
|
|
|
devices.emplace_back(Common::ParamPackage{
|
2021-10-19 05:12:24 +00:00
|
|
|
{"engine", GetEngineName()},
|
2021-09-20 22:18:40 +00:00
|
|
|
{"display", "Keyboard Only"},
|
|
|
|
});
|
|
|
|
return devices;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace InputCommon
|