mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-29 09:45:34 +00:00
Merge branch 'refactor_sdlmappings' into 'master'
Move SDL-MyGUI input mappings to components, map both ways See merge request OpenMW/openmw!1444
This commit is contained in:
commit
c5e10dfa85
11 changed files with 293 additions and 245 deletions
|
@ -27,7 +27,7 @@ add_openmw_dir (mwrender
|
||||||
|
|
||||||
add_openmw_dir (mwinput
|
add_openmw_dir (mwinput
|
||||||
actions actionmanager bindingsmanager controllermanager controlswitch
|
actions actionmanager bindingsmanager controllermanager controlswitch
|
||||||
inputmanagerimp mousemanager keyboardmanager sdlmappings sensormanager
|
inputmanagerimp mousemanager keyboardmanager sensormanager
|
||||||
)
|
)
|
||||||
|
|
||||||
add_openmw_dir (mwgui
|
add_openmw_dir (mwgui
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#include <extern/oics/ICSChannelListener.h>
|
#include <extern/oics/ICSChannelListener.h>
|
||||||
#include <extern/oics/ICSInputControlSystem.h>
|
#include <extern/oics/ICSInputControlSystem.h>
|
||||||
|
|
||||||
|
#include <components/sdlutil/sdlmappings.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/inputmanager.hpp"
|
#include "../mwbase/inputmanager.hpp"
|
||||||
#include "../mwbase/windowmanager.hpp"
|
#include "../mwbase/windowmanager.hpp"
|
||||||
|
@ -13,7 +15,6 @@
|
||||||
#include "../mwworld/player.hpp"
|
#include "../mwworld/player.hpp"
|
||||||
|
|
||||||
#include "actions.hpp"
|
#include "actions.hpp"
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
{
|
{
|
||||||
|
@ -546,9 +547,9 @@ namespace MWInput
|
||||||
ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control;
|
ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control;
|
||||||
|
|
||||||
if (mInputBinder->getJoystickAxisBinding(c, sFakeDeviceId, ICS::Control::INCREASE) != ICS::InputControlSystem::UNASSIGNED)
|
if (mInputBinder->getJoystickAxisBinding(c, sFakeDeviceId, ICS::Control::INCREASE) != ICS::InputControlSystem::UNASSIGNED)
|
||||||
return sdlControllerAxisToString(mInputBinder->getJoystickAxisBinding(c, sFakeDeviceId, ICS::Control::INCREASE));
|
return SDLUtil::sdlControllerAxisToString(mInputBinder->getJoystickAxisBinding(c, sFakeDeviceId, ICS::Control::INCREASE));
|
||||||
else if (mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE) != ICS_MAX_DEVICE_BUTTONS)
|
else if (mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE) != ICS_MAX_DEVICE_BUTTONS)
|
||||||
return sdlControllerButtonToString(mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE));
|
return SDLUtil::sdlControllerButtonToString(mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE));
|
||||||
else
|
else
|
||||||
return "#{sNone}";
|
return "#{sNone}";
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <MyGUI_Widget.h>
|
#include <MyGUI_Widget.h>
|
||||||
|
|
||||||
#include <components/debug/debuglog.hpp>
|
#include <components/debug/debuglog.hpp>
|
||||||
|
#include <components/sdlutil/sdlmappings.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/inputmanager.hpp"
|
#include "../mwbase/inputmanager.hpp"
|
||||||
|
@ -19,7 +20,6 @@
|
||||||
#include "actionmanager.hpp"
|
#include "actionmanager.hpp"
|
||||||
#include "bindingsmanager.hpp"
|
#include "bindingsmanager.hpp"
|
||||||
#include "mousemanager.hpp"
|
#include "mousemanager.hpp"
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
{
|
{
|
||||||
|
@ -215,7 +215,7 @@ namespace MWInput
|
||||||
mBindingsManager->setPlayerControlsEnabled(true);
|
mBindingsManager->setPlayerControlsEnabled(true);
|
||||||
|
|
||||||
//esc, to leave initial movie screen
|
//esc, to leave initial movie screen
|
||||||
auto kc = sdlKeyToMyGUI(SDLK_ESCAPE);
|
auto kc = SDLUtil::sdlKeyToMyGUI(SDLK_ESCAPE);
|
||||||
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyPress(kc, 0));
|
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyPress(kc, 0));
|
||||||
|
|
||||||
if (!MWBase::Environment::get().getInputManager()->controlsDisabled())
|
if (!MWBase::Environment::get().getInputManager()->controlsDisabled())
|
||||||
|
@ -259,7 +259,7 @@ namespace MWInput
|
||||||
mBindingsManager->setPlayerControlsEnabled(true);
|
mBindingsManager->setPlayerControlsEnabled(true);
|
||||||
|
|
||||||
//esc, to leave initial movie screen
|
//esc, to leave initial movie screen
|
||||||
auto kc = sdlKeyToMyGUI(SDLK_ESCAPE);
|
auto kc = SDLUtil::sdlKeyToMyGUI(SDLK_ESCAPE);
|
||||||
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyRelease(kc));
|
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyRelease(kc));
|
||||||
|
|
||||||
mBindingsManager->controllerButtonReleased(deviceID, arg);
|
mBindingsManager->controllerButtonReleased(deviceID, arg);
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "controlswitch.hpp"
|
#include "controlswitch.hpp"
|
||||||
#include "keyboardmanager.hpp"
|
#include "keyboardmanager.hpp"
|
||||||
#include "mousemanager.hpp"
|
#include "mousemanager.hpp"
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
#include "sensormanager.hpp"
|
#include "sensormanager.hpp"
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#include <MyGUI_InputManager.h>
|
#include <MyGUI_InputManager.h>
|
||||||
|
|
||||||
|
#include <components/sdlutil/sdlmappings.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/inputmanager.hpp"
|
#include "../mwbase/inputmanager.hpp"
|
||||||
#include "../mwbase/luamanager.hpp"
|
#include "../mwbase/luamanager.hpp"
|
||||||
|
@ -13,7 +15,6 @@
|
||||||
|
|
||||||
#include "actions.hpp"
|
#include "actions.hpp"
|
||||||
#include "bindingsmanager.hpp"
|
#include "bindingsmanager.hpp"
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
{
|
{
|
||||||
|
@ -35,7 +36,7 @@ namespace MWInput
|
||||||
// HACK: to make default keybinding for the console work without printing an extra "^" upon closing
|
// HACK: to make default keybinding for the console work without printing an extra "^" upon closing
|
||||||
// This assumes that SDL_TextInput events always come *after* the key event
|
// This assumes that SDL_TextInput events always come *after* the key event
|
||||||
// (which is somewhat reasonable, and hopefully true for all SDL platforms)
|
// (which is somewhat reasonable, and hopefully true for all SDL platforms)
|
||||||
auto kc = sdlKeyToMyGUI(arg.keysym.sym);
|
auto kc = SDLUtil::sdlKeyToMyGUI(arg.keysym.sym);
|
||||||
if (mBindingsManager->getKeyBinding(A_Console) == arg.keysym.scancode
|
if (mBindingsManager->getKeyBinding(A_Console) == arg.keysym.scancode
|
||||||
&& MWBase::Environment::get().getWindowManager()->isConsoleMode())
|
&& MWBase::Environment::get().getWindowManager()->isConsoleMode())
|
||||||
SDL_StopTextInput();
|
SDL_StopTextInput();
|
||||||
|
@ -71,7 +72,7 @@ namespace MWInput
|
||||||
void KeyboardManager::keyReleased(const SDL_KeyboardEvent &arg)
|
void KeyboardManager::keyReleased(const SDL_KeyboardEvent &arg)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getInputManager()->setJoystickLastUsed(false);
|
MWBase::Environment::get().getInputManager()->setJoystickLastUsed(false);
|
||||||
auto kc = sdlKeyToMyGUI(arg.keysym.sym);
|
auto kc = SDLUtil::sdlKeyToMyGUI(arg.keysym.sym);
|
||||||
|
|
||||||
if (!mBindingsManager->isDetectingBindingState())
|
if (!mBindingsManager->isDetectingBindingState())
|
||||||
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyRelease(kc));
|
mBindingsManager->setPlayerControlsEnabled(!MyGUI::InputManager::getInstance().injectKeyRelease(kc));
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <components/debug/debuglog.hpp>
|
#include <components/debug/debuglog.hpp>
|
||||||
#include <components/sdlutil/sdlinputwrapper.hpp>
|
#include <components/sdlutil/sdlinputwrapper.hpp>
|
||||||
|
#include <components/sdlutil/sdlmappings.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/inputmanager.hpp"
|
#include "../mwbase/inputmanager.hpp"
|
||||||
|
@ -17,7 +18,6 @@
|
||||||
|
|
||||||
#include "actions.hpp"
|
#include "actions.hpp"
|
||||||
#include "bindingsmanager.hpp"
|
#include "bindingsmanager.hpp"
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
{
|
{
|
||||||
|
@ -125,7 +125,11 @@ namespace MWInput
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool guiMode = MWBase::Environment::get().getWindowManager()->isGuiMode();
|
bool guiMode = MWBase::Environment::get().getWindowManager()->isGuiMode();
|
||||||
guiMode = MyGUI::InputManager::getInstance().injectMouseRelease(static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), sdlButtonToMyGUI(id)) && guiMode;
|
guiMode = MyGUI::InputManager::getInstance().injectMouseRelease(
|
||||||
|
static_cast<int>(mGuiCursorX),
|
||||||
|
static_cast<int>(mGuiCursorY),
|
||||||
|
SDLUtil::sdlMouseButtonToMyGui(id)
|
||||||
|
) && guiMode;
|
||||||
|
|
||||||
if (mBindingsManager->isDetectingBindingState())
|
if (mBindingsManager->isDetectingBindingState())
|
||||||
return; // don't allow same mouseup to bind as initiated bind
|
return; // don't allow same mouseup to bind as initiated bind
|
||||||
|
@ -153,7 +157,11 @@ namespace MWInput
|
||||||
if (id == SDL_BUTTON_LEFT || id == SDL_BUTTON_RIGHT) // MyGUI only uses these mouse events
|
if (id == SDL_BUTTON_LEFT || id == SDL_BUTTON_RIGHT) // MyGUI only uses these mouse events
|
||||||
{
|
{
|
||||||
guiMode = MWBase::Environment::get().getWindowManager()->isGuiMode();
|
guiMode = MWBase::Environment::get().getWindowManager()->isGuiMode();
|
||||||
guiMode = MyGUI::InputManager::getInstance().injectMousePress(static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), sdlButtonToMyGUI(id)) && guiMode;
|
guiMode = MyGUI::InputManager::getInstance().injectMousePress(
|
||||||
|
static_cast<int>(mGuiCursorX),
|
||||||
|
static_cast<int>(mGuiCursorY),
|
||||||
|
SDLUtil::sdlMouseButtonToMyGui(id)
|
||||||
|
) && guiMode;
|
||||||
if (MyGUI::InputManager::getInstance().getMouseFocusWidget () != nullptr)
|
if (MyGUI::InputManager::getInstance().getMouseFocusWidget () != nullptr)
|
||||||
{
|
{
|
||||||
MyGUI::Button* b = MyGUI::InputManager::getInstance().getMouseFocusWidget()->castType<MyGUI::Button>(false);
|
MyGUI::Button* b = MyGUI::InputManager::getInstance().getMouseFocusWidget()->castType<MyGUI::Button>(false);
|
||||||
|
@ -229,12 +237,18 @@ namespace MWInput
|
||||||
|
|
||||||
bool MouseManager::injectMouseButtonPress(Uint8 button)
|
bool MouseManager::injectMouseButtonPress(Uint8 button)
|
||||||
{
|
{
|
||||||
return MyGUI::InputManager::getInstance().injectMousePress(static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), sdlButtonToMyGUI(button));
|
return MyGUI::InputManager::getInstance().injectMousePress(
|
||||||
|
static_cast<int>(mGuiCursorX),
|
||||||
|
static_cast<int>(mGuiCursorY),
|
||||||
|
SDLUtil::sdlMouseButtonToMyGui(button));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MouseManager::injectMouseButtonRelease(Uint8 button)
|
bool MouseManager::injectMouseButtonRelease(Uint8 button)
|
||||||
{
|
{
|
||||||
return MyGUI::InputManager::getInstance().injectMouseRelease(static_cast<int>(mGuiCursorX), static_cast<int>(mGuiCursorY), sdlButtonToMyGUI(button));
|
return MyGUI::InputManager::getInstance().injectMouseRelease(
|
||||||
|
static_cast<int>(mGuiCursorX),
|
||||||
|
static_cast<int>(mGuiCursorY),
|
||||||
|
SDLUtil::sdlMouseButtonToMyGui(button));
|
||||||
}
|
}
|
||||||
|
|
||||||
void MouseManager::injectMouseMove(float xMove, float yMove, float mouseWheelMove)
|
void MouseManager::injectMouseMove(float xMove, float yMove, float mouseWheelMove)
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
#include "sdlmappings.hpp"
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
#include <MyGUI_MouseButton.h>
|
|
||||||
|
|
||||||
#include <SDL_gamecontroller.h>
|
|
||||||
#include <SDL_mouse.h>
|
|
||||||
|
|
||||||
namespace MWInput
|
|
||||||
{
|
|
||||||
std::string sdlControllerButtonToString(int button)
|
|
||||||
{
|
|
||||||
switch(button)
|
|
||||||
{
|
|
||||||
case SDL_CONTROLLER_BUTTON_A:
|
|
||||||
return "A Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_B:
|
|
||||||
return "B Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_BACK:
|
|
||||||
return "Back Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_DPAD_DOWN:
|
|
||||||
return "DPad Down";
|
|
||||||
case SDL_CONTROLLER_BUTTON_DPAD_LEFT:
|
|
||||||
return "DPad Left";
|
|
||||||
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT:
|
|
||||||
return "DPad Right";
|
|
||||||
case SDL_CONTROLLER_BUTTON_DPAD_UP:
|
|
||||||
return "DPad Up";
|
|
||||||
case SDL_CONTROLLER_BUTTON_GUIDE:
|
|
||||||
return "Guide Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER:
|
|
||||||
return "Left Shoulder";
|
|
||||||
case SDL_CONTROLLER_BUTTON_LEFTSTICK:
|
|
||||||
return "Left Stick Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
|
|
||||||
return "Right Shoulder";
|
|
||||||
case SDL_CONTROLLER_BUTTON_RIGHTSTICK:
|
|
||||||
return "Right Stick Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_START:
|
|
||||||
return "Start Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_X:
|
|
||||||
return "X Button";
|
|
||||||
case SDL_CONTROLLER_BUTTON_Y:
|
|
||||||
return "Y Button";
|
|
||||||
default:
|
|
||||||
return "Button " + std::to_string(button);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string sdlControllerAxisToString(int axis)
|
|
||||||
{
|
|
||||||
switch(axis)
|
|
||||||
{
|
|
||||||
case SDL_CONTROLLER_AXIS_LEFTX:
|
|
||||||
return "Left Stick X";
|
|
||||||
case SDL_CONTROLLER_AXIS_LEFTY:
|
|
||||||
return "Left Stick Y";
|
|
||||||
case SDL_CONTROLLER_AXIS_RIGHTX:
|
|
||||||
return "Right Stick X";
|
|
||||||
case SDL_CONTROLLER_AXIS_RIGHTY:
|
|
||||||
return "Right Stick Y";
|
|
||||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
|
|
||||||
return "Left Trigger";
|
|
||||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
|
|
||||||
return "Right Trigger";
|
|
||||||
default:
|
|
||||||
return "Axis " + std::to_string(axis);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MyGUI::MouseButton sdlButtonToMyGUI(Uint8 button)
|
|
||||||
{
|
|
||||||
//The right button is the second button, according to MyGUI
|
|
||||||
if(button == SDL_BUTTON_RIGHT)
|
|
||||||
button = SDL_BUTTON_MIDDLE;
|
|
||||||
else if(button == SDL_BUTTON_MIDDLE)
|
|
||||||
button = SDL_BUTTON_RIGHT;
|
|
||||||
|
|
||||||
//MyGUI's buttons are 0 indexed
|
|
||||||
return MyGUI::MouseButton::Enum(button - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void initKeyMap(std::map<SDL_Keycode, MyGUI::KeyCode>& keyMap)
|
|
||||||
{
|
|
||||||
keyMap[SDLK_UNKNOWN] = MyGUI::KeyCode::None;
|
|
||||||
keyMap[SDLK_ESCAPE] = MyGUI::KeyCode::Escape;
|
|
||||||
keyMap[SDLK_1] = MyGUI::KeyCode::One;
|
|
||||||
keyMap[SDLK_2] = MyGUI::KeyCode::Two;
|
|
||||||
keyMap[SDLK_3] = MyGUI::KeyCode::Three;
|
|
||||||
keyMap[SDLK_4] = MyGUI::KeyCode::Four;
|
|
||||||
keyMap[SDLK_5] = MyGUI::KeyCode::Five;
|
|
||||||
keyMap[SDLK_6] = MyGUI::KeyCode::Six;
|
|
||||||
keyMap[SDLK_7] = MyGUI::KeyCode::Seven;
|
|
||||||
keyMap[SDLK_8] = MyGUI::KeyCode::Eight;
|
|
||||||
keyMap[SDLK_9] = MyGUI::KeyCode::Nine;
|
|
||||||
keyMap[SDLK_0] = MyGUI::KeyCode::Zero;
|
|
||||||
keyMap[SDLK_MINUS] = MyGUI::KeyCode::Minus;
|
|
||||||
keyMap[SDLK_EQUALS] = MyGUI::KeyCode::Equals;
|
|
||||||
keyMap[SDLK_BACKSPACE] = MyGUI::KeyCode::Backspace;
|
|
||||||
keyMap[SDLK_TAB] = MyGUI::KeyCode::Tab;
|
|
||||||
keyMap[SDLK_q] = MyGUI::KeyCode::Q;
|
|
||||||
keyMap[SDLK_w] = MyGUI::KeyCode::W;
|
|
||||||
keyMap[SDLK_e] = MyGUI::KeyCode::E;
|
|
||||||
keyMap[SDLK_r] = MyGUI::KeyCode::R;
|
|
||||||
keyMap[SDLK_t] = MyGUI::KeyCode::T;
|
|
||||||
keyMap[SDLK_y] = MyGUI::KeyCode::Y;
|
|
||||||
keyMap[SDLK_u] = MyGUI::KeyCode::U;
|
|
||||||
keyMap[SDLK_i] = MyGUI::KeyCode::I;
|
|
||||||
keyMap[SDLK_o] = MyGUI::KeyCode::O;
|
|
||||||
keyMap[SDLK_p] = MyGUI::KeyCode::P;
|
|
||||||
keyMap[SDLK_RETURN] = MyGUI::KeyCode::Return;
|
|
||||||
keyMap[SDLK_a] = MyGUI::KeyCode::A;
|
|
||||||
keyMap[SDLK_s] = MyGUI::KeyCode::S;
|
|
||||||
keyMap[SDLK_d] = MyGUI::KeyCode::D;
|
|
||||||
keyMap[SDLK_f] = MyGUI::KeyCode::F;
|
|
||||||
keyMap[SDLK_g] = MyGUI::KeyCode::G;
|
|
||||||
keyMap[SDLK_h] = MyGUI::KeyCode::H;
|
|
||||||
keyMap[SDLK_j] = MyGUI::KeyCode::J;
|
|
||||||
keyMap[SDLK_k] = MyGUI::KeyCode::K;
|
|
||||||
keyMap[SDLK_l] = MyGUI::KeyCode::L;
|
|
||||||
keyMap[SDLK_SEMICOLON] = MyGUI::KeyCode::Semicolon;
|
|
||||||
keyMap[SDLK_QUOTE] = MyGUI::KeyCode::Apostrophe;
|
|
||||||
keyMap[SDLK_BACKQUOTE] = MyGUI::KeyCode::Grave;
|
|
||||||
keyMap[SDLK_LSHIFT] = MyGUI::KeyCode::LeftShift;
|
|
||||||
keyMap[SDLK_BACKSLASH] = MyGUI::KeyCode::Backslash;
|
|
||||||
keyMap[SDLK_z] = MyGUI::KeyCode::Z;
|
|
||||||
keyMap[SDLK_x] = MyGUI::KeyCode::X;
|
|
||||||
keyMap[SDLK_c] = MyGUI::KeyCode::C;
|
|
||||||
keyMap[SDLK_v] = MyGUI::KeyCode::V;
|
|
||||||
keyMap[SDLK_b] = MyGUI::KeyCode::B;
|
|
||||||
keyMap[SDLK_n] = MyGUI::KeyCode::N;
|
|
||||||
keyMap[SDLK_m] = MyGUI::KeyCode::M;
|
|
||||||
keyMap[SDLK_COMMA] = MyGUI::KeyCode::Comma;
|
|
||||||
keyMap[SDLK_PERIOD] = MyGUI::KeyCode::Period;
|
|
||||||
keyMap[SDLK_SLASH] = MyGUI::KeyCode::Slash;
|
|
||||||
keyMap[SDLK_RSHIFT] = MyGUI::KeyCode::RightShift;
|
|
||||||
keyMap[SDLK_KP_MULTIPLY] = MyGUI::KeyCode::Multiply;
|
|
||||||
keyMap[SDLK_LALT] = MyGUI::KeyCode::LeftAlt;
|
|
||||||
keyMap[SDLK_SPACE] = MyGUI::KeyCode::Space;
|
|
||||||
keyMap[SDLK_CAPSLOCK] = MyGUI::KeyCode::Capital;
|
|
||||||
keyMap[SDLK_F1] = MyGUI::KeyCode::F1;
|
|
||||||
keyMap[SDLK_F2] = MyGUI::KeyCode::F2;
|
|
||||||
keyMap[SDLK_F3] = MyGUI::KeyCode::F3;
|
|
||||||
keyMap[SDLK_F4] = MyGUI::KeyCode::F4;
|
|
||||||
keyMap[SDLK_F5] = MyGUI::KeyCode::F5;
|
|
||||||
keyMap[SDLK_F6] = MyGUI::KeyCode::F6;
|
|
||||||
keyMap[SDLK_F7] = MyGUI::KeyCode::F7;
|
|
||||||
keyMap[SDLK_F8] = MyGUI::KeyCode::F8;
|
|
||||||
keyMap[SDLK_F9] = MyGUI::KeyCode::F9;
|
|
||||||
keyMap[SDLK_F10] = MyGUI::KeyCode::F10;
|
|
||||||
keyMap[SDLK_NUMLOCKCLEAR] = MyGUI::KeyCode::NumLock;
|
|
||||||
keyMap[SDLK_SCROLLLOCK] = MyGUI::KeyCode::ScrollLock;
|
|
||||||
keyMap[SDLK_KP_7] = MyGUI::KeyCode::Numpad7;
|
|
||||||
keyMap[SDLK_KP_8] = MyGUI::KeyCode::Numpad8;
|
|
||||||
keyMap[SDLK_KP_9] = MyGUI::KeyCode::Numpad9;
|
|
||||||
keyMap[SDLK_KP_MINUS] = MyGUI::KeyCode::Subtract;
|
|
||||||
keyMap[SDLK_KP_4] = MyGUI::KeyCode::Numpad4;
|
|
||||||
keyMap[SDLK_KP_5] = MyGUI::KeyCode::Numpad5;
|
|
||||||
keyMap[SDLK_KP_6] = MyGUI::KeyCode::Numpad6;
|
|
||||||
keyMap[SDLK_KP_PLUS] = MyGUI::KeyCode::Add;
|
|
||||||
keyMap[SDLK_KP_1] = MyGUI::KeyCode::Numpad1;
|
|
||||||
keyMap[SDLK_KP_2] = MyGUI::KeyCode::Numpad2;
|
|
||||||
keyMap[SDLK_KP_3] = MyGUI::KeyCode::Numpad3;
|
|
||||||
keyMap[SDLK_KP_0] = MyGUI::KeyCode::Numpad0;
|
|
||||||
keyMap[SDLK_KP_PERIOD] = MyGUI::KeyCode::Decimal;
|
|
||||||
keyMap[SDLK_F11] = MyGUI::KeyCode::F11;
|
|
||||||
keyMap[SDLK_F12] = MyGUI::KeyCode::F12;
|
|
||||||
keyMap[SDLK_F13] = MyGUI::KeyCode::F13;
|
|
||||||
keyMap[SDLK_F14] = MyGUI::KeyCode::F14;
|
|
||||||
keyMap[SDLK_F15] = MyGUI::KeyCode::F15;
|
|
||||||
keyMap[SDLK_KP_EQUALS] = MyGUI::KeyCode::NumpadEquals;
|
|
||||||
keyMap[SDLK_COLON] = MyGUI::KeyCode::Colon;
|
|
||||||
keyMap[SDLK_KP_ENTER] = MyGUI::KeyCode::NumpadEnter;
|
|
||||||
keyMap[SDLK_KP_DIVIDE] = MyGUI::KeyCode::Divide;
|
|
||||||
keyMap[SDLK_SYSREQ] = MyGUI::KeyCode::SysRq;
|
|
||||||
keyMap[SDLK_RALT] = MyGUI::KeyCode::RightAlt;
|
|
||||||
keyMap[SDLK_HOME] = MyGUI::KeyCode::Home;
|
|
||||||
keyMap[SDLK_UP] = MyGUI::KeyCode::ArrowUp;
|
|
||||||
keyMap[SDLK_PAGEUP] = MyGUI::KeyCode::PageUp;
|
|
||||||
keyMap[SDLK_LEFT] = MyGUI::KeyCode::ArrowLeft;
|
|
||||||
keyMap[SDLK_RIGHT] = MyGUI::KeyCode::ArrowRight;
|
|
||||||
keyMap[SDLK_END] = MyGUI::KeyCode::End;
|
|
||||||
keyMap[SDLK_DOWN] = MyGUI::KeyCode::ArrowDown;
|
|
||||||
keyMap[SDLK_PAGEDOWN] = MyGUI::KeyCode::PageDown;
|
|
||||||
keyMap[SDLK_INSERT] = MyGUI::KeyCode::Insert;
|
|
||||||
keyMap[SDLK_DELETE] = MyGUI::KeyCode::Delete;
|
|
||||||
keyMap[SDLK_APPLICATION] = MyGUI::KeyCode::AppMenu;
|
|
||||||
|
|
||||||
//The function of the Ctrl and Meta keys are switched on macOS compared to other platforms.
|
|
||||||
//For instance] = Cmd+C versus Ctrl+C to copy from the system clipboard
|
|
||||||
#if defined(__APPLE__)
|
|
||||||
keyMap[SDLK_LGUI] = MyGUI::KeyCode::LeftControl;
|
|
||||||
keyMap[SDLK_RGUI] = MyGUI::KeyCode::RightControl;
|
|
||||||
keyMap[SDLK_LCTRL] = MyGUI::KeyCode::LeftWindows;
|
|
||||||
keyMap[SDLK_RCTRL] = MyGUI::KeyCode::RightWindows;
|
|
||||||
#else
|
|
||||||
keyMap[SDLK_LGUI] = MyGUI::KeyCode::LeftWindows;
|
|
||||||
keyMap[SDLK_RGUI] = MyGUI::KeyCode::RightWindows;
|
|
||||||
keyMap[SDLK_LCTRL] = MyGUI::KeyCode::LeftControl;
|
|
||||||
keyMap[SDLK_RCTRL] = MyGUI::KeyCode::RightControl;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
MyGUI::KeyCode sdlKeyToMyGUI(SDL_Keycode code)
|
|
||||||
{
|
|
||||||
static std::map<SDL_Keycode, MyGUI::KeyCode> keyMap;
|
|
||||||
if (keyMap.empty())
|
|
||||||
initKeyMap(keyMap);
|
|
||||||
|
|
||||||
MyGUI::KeyCode kc = MyGUI::KeyCode::None;
|
|
||||||
auto foundKey = keyMap.find(code);
|
|
||||||
if (foundKey != keyMap.end())
|
|
||||||
kc = foundKey->second;
|
|
||||||
|
|
||||||
return kc;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -146,7 +146,7 @@ add_component_dir (fontloader
|
||||||
)
|
)
|
||||||
|
|
||||||
add_component_dir (sdlutil
|
add_component_dir (sdlutil
|
||||||
gl4es_init sdlgraphicswindow imagetosurface sdlinputwrapper sdlvideowrapper events sdlcursormanager
|
gl4es_init sdlgraphicswindow imagetosurface sdlinputwrapper sdlvideowrapper events sdlcursormanager sdlmappings
|
||||||
)
|
)
|
||||||
|
|
||||||
add_component_dir (version
|
add_component_dir (version
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "widget.hpp"
|
#include "widget.hpp"
|
||||||
|
|
||||||
#include <SDL_events.h>
|
#include <SDL_events.h>
|
||||||
|
#include <components/sdlutil/sdlmappings.hpp>
|
||||||
|
|
||||||
#include "text.hpp"
|
#include "text.hpp"
|
||||||
#include "textedit.hpp"
|
#include "textedit.hpp"
|
||||||
|
@ -87,9 +88,7 @@ namespace LuaUi
|
||||||
sol::object WidgetExtension::keyEvent(MyGUI::KeyCode code) const
|
sol::object WidgetExtension::keyEvent(MyGUI::KeyCode code) const
|
||||||
{
|
{
|
||||||
SDL_Keysym keySym;
|
SDL_Keysym keySym;
|
||||||
// MyGUI key codes are not one to one with SDL key codes
|
keySym.sym = SDLUtil::myGuiKeyToSdl(code);
|
||||||
// \todo refactor sdlmappings.cpp to map this back to SDL correctly
|
|
||||||
keySym.sym = static_cast<SDL_Keycode>(code.getValue());
|
|
||||||
keySym.scancode = SDL_GetScancodeFromKey(keySym.sym);
|
keySym.scancode = SDL_GetScancodeFromKey(keySym.sym);
|
||||||
keySym.mod = SDL_GetModState();
|
keySym.mod = SDL_GetModState();
|
||||||
return sol::make_object(mLua, keySym);
|
return sol::make_object(mLua, keySym);
|
||||||
|
@ -103,8 +102,7 @@ namespace LuaUi
|
||||||
sol::table table = makeTable();
|
sol::table table = makeTable();
|
||||||
table["position"] = position;
|
table["position"] = position;
|
||||||
table["offset"] = offset;
|
table["offset"] = offset;
|
||||||
// \todo refactor sdlmappings.cpp to map this back to SDL properly
|
table["button"] = SDLUtil::myGuiMouseButtonToSdl(button);
|
||||||
table["button"] = button.getValue() + 1;
|
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
251
components/sdlutil/sdlmappings.cpp
Normal file
251
components/sdlutil/sdlmappings.cpp
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
#include "sdlmappings.hpp"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include <MyGUI_MouseButton.h>
|
||||||
|
|
||||||
|
#include <SDL_gamecontroller.h>
|
||||||
|
#include <SDL_mouse.h>
|
||||||
|
|
||||||
|
namespace SDLUtil
|
||||||
|
{
|
||||||
|
std::string sdlControllerButtonToString(int button)
|
||||||
|
{
|
||||||
|
switch(button)
|
||||||
|
{
|
||||||
|
case SDL_CONTROLLER_BUTTON_A:
|
||||||
|
return "A Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_B:
|
||||||
|
return "B Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_BACK:
|
||||||
|
return "Back Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_DOWN:
|
||||||
|
return "DPad Down";
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_LEFT:
|
||||||
|
return "DPad Left";
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT:
|
||||||
|
return "DPad Right";
|
||||||
|
case SDL_CONTROLLER_BUTTON_DPAD_UP:
|
||||||
|
return "DPad Up";
|
||||||
|
case SDL_CONTROLLER_BUTTON_GUIDE:
|
||||||
|
return "Guide Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER:
|
||||||
|
return "Left Shoulder";
|
||||||
|
case SDL_CONTROLLER_BUTTON_LEFTSTICK:
|
||||||
|
return "Left Stick Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
|
||||||
|
return "Right Shoulder";
|
||||||
|
case SDL_CONTROLLER_BUTTON_RIGHTSTICK:
|
||||||
|
return "Right Stick Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_START:
|
||||||
|
return "Start Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_X:
|
||||||
|
return "X Button";
|
||||||
|
case SDL_CONTROLLER_BUTTON_Y:
|
||||||
|
return "Y Button";
|
||||||
|
default:
|
||||||
|
return "Button " + std::to_string(button);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string sdlControllerAxisToString(int axis)
|
||||||
|
{
|
||||||
|
switch(axis)
|
||||||
|
{
|
||||||
|
case SDL_CONTROLLER_AXIS_LEFTX:
|
||||||
|
return "Left Stick X";
|
||||||
|
case SDL_CONTROLLER_AXIS_LEFTY:
|
||||||
|
return "Left Stick Y";
|
||||||
|
case SDL_CONTROLLER_AXIS_RIGHTX:
|
||||||
|
return "Right Stick X";
|
||||||
|
case SDL_CONTROLLER_AXIS_RIGHTY:
|
||||||
|
return "Right Stick Y";
|
||||||
|
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
|
||||||
|
return "Left Trigger";
|
||||||
|
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
|
||||||
|
return "Right Trigger";
|
||||||
|
default:
|
||||||
|
return "Axis " + std::to_string(axis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::MouseButton sdlMouseButtonToMyGui(Uint8 button)
|
||||||
|
{
|
||||||
|
//The right button is the second button, according to MyGUI
|
||||||
|
if(button == SDL_BUTTON_RIGHT)
|
||||||
|
button = SDL_BUTTON_MIDDLE;
|
||||||
|
else if(button == SDL_BUTTON_MIDDLE)
|
||||||
|
button = SDL_BUTTON_RIGHT;
|
||||||
|
|
||||||
|
//MyGUI's buttons are 0 indexed
|
||||||
|
return MyGUI::MouseButton::Enum(button - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint8 myGuiMouseButtonToSdl(MyGUI::MouseButton button)
|
||||||
|
{
|
||||||
|
Uint8 value = button.getValue() + 1;
|
||||||
|
if (value == SDL_BUTTON_RIGHT)
|
||||||
|
value = SDL_BUTTON_MIDDLE;
|
||||||
|
else if (value == SDL_BUTTON_MIDDLE)
|
||||||
|
value = SDL_BUTTON_RIGHT;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
std::map<SDL_Keycode, MyGUI::KeyCode> initKeyMap()
|
||||||
|
{
|
||||||
|
std::map<SDL_Keycode, MyGUI::KeyCode> keyMap;
|
||||||
|
keyMap[SDLK_UNKNOWN] = MyGUI::KeyCode::None;
|
||||||
|
keyMap[SDLK_ESCAPE] = MyGUI::KeyCode::Escape;
|
||||||
|
keyMap[SDLK_1] = MyGUI::KeyCode::One;
|
||||||
|
keyMap[SDLK_2] = MyGUI::KeyCode::Two;
|
||||||
|
keyMap[SDLK_3] = MyGUI::KeyCode::Three;
|
||||||
|
keyMap[SDLK_4] = MyGUI::KeyCode::Four;
|
||||||
|
keyMap[SDLK_5] = MyGUI::KeyCode::Five;
|
||||||
|
keyMap[SDLK_6] = MyGUI::KeyCode::Six;
|
||||||
|
keyMap[SDLK_7] = MyGUI::KeyCode::Seven;
|
||||||
|
keyMap[SDLK_8] = MyGUI::KeyCode::Eight;
|
||||||
|
keyMap[SDLK_9] = MyGUI::KeyCode::Nine;
|
||||||
|
keyMap[SDLK_0] = MyGUI::KeyCode::Zero;
|
||||||
|
keyMap[SDLK_MINUS] = MyGUI::KeyCode::Minus;
|
||||||
|
keyMap[SDLK_EQUALS] = MyGUI::KeyCode::Equals;
|
||||||
|
keyMap[SDLK_BACKSPACE] = MyGUI::KeyCode::Backspace;
|
||||||
|
keyMap[SDLK_TAB] = MyGUI::KeyCode::Tab;
|
||||||
|
keyMap[SDLK_q] = MyGUI::KeyCode::Q;
|
||||||
|
keyMap[SDLK_w] = MyGUI::KeyCode::W;
|
||||||
|
keyMap[SDLK_e] = MyGUI::KeyCode::E;
|
||||||
|
keyMap[SDLK_r] = MyGUI::KeyCode::R;
|
||||||
|
keyMap[SDLK_t] = MyGUI::KeyCode::T;
|
||||||
|
keyMap[SDLK_y] = MyGUI::KeyCode::Y;
|
||||||
|
keyMap[SDLK_u] = MyGUI::KeyCode::U;
|
||||||
|
keyMap[SDLK_i] = MyGUI::KeyCode::I;
|
||||||
|
keyMap[SDLK_o] = MyGUI::KeyCode::O;
|
||||||
|
keyMap[SDLK_p] = MyGUI::KeyCode::P;
|
||||||
|
keyMap[SDLK_RETURN] = MyGUI::KeyCode::Return;
|
||||||
|
keyMap[SDLK_a] = MyGUI::KeyCode::A;
|
||||||
|
keyMap[SDLK_s] = MyGUI::KeyCode::S;
|
||||||
|
keyMap[SDLK_d] = MyGUI::KeyCode::D;
|
||||||
|
keyMap[SDLK_f] = MyGUI::KeyCode::F;
|
||||||
|
keyMap[SDLK_g] = MyGUI::KeyCode::G;
|
||||||
|
keyMap[SDLK_h] = MyGUI::KeyCode::H;
|
||||||
|
keyMap[SDLK_j] = MyGUI::KeyCode::J;
|
||||||
|
keyMap[SDLK_k] = MyGUI::KeyCode::K;
|
||||||
|
keyMap[SDLK_l] = MyGUI::KeyCode::L;
|
||||||
|
keyMap[SDLK_SEMICOLON] = MyGUI::KeyCode::Semicolon;
|
||||||
|
keyMap[SDLK_QUOTE] = MyGUI::KeyCode::Apostrophe;
|
||||||
|
keyMap[SDLK_BACKQUOTE] = MyGUI::KeyCode::Grave;
|
||||||
|
keyMap[SDLK_LSHIFT] = MyGUI::KeyCode::LeftShift;
|
||||||
|
keyMap[SDLK_BACKSLASH] = MyGUI::KeyCode::Backslash;
|
||||||
|
keyMap[SDLK_z] = MyGUI::KeyCode::Z;
|
||||||
|
keyMap[SDLK_x] = MyGUI::KeyCode::X;
|
||||||
|
keyMap[SDLK_c] = MyGUI::KeyCode::C;
|
||||||
|
keyMap[SDLK_v] = MyGUI::KeyCode::V;
|
||||||
|
keyMap[SDLK_b] = MyGUI::KeyCode::B;
|
||||||
|
keyMap[SDLK_n] = MyGUI::KeyCode::N;
|
||||||
|
keyMap[SDLK_m] = MyGUI::KeyCode::M;
|
||||||
|
keyMap[SDLK_COMMA] = MyGUI::KeyCode::Comma;
|
||||||
|
keyMap[SDLK_PERIOD] = MyGUI::KeyCode::Period;
|
||||||
|
keyMap[SDLK_SLASH] = MyGUI::KeyCode::Slash;
|
||||||
|
keyMap[SDLK_RSHIFT] = MyGUI::KeyCode::RightShift;
|
||||||
|
keyMap[SDLK_KP_MULTIPLY] = MyGUI::KeyCode::Multiply;
|
||||||
|
keyMap[SDLK_LALT] = MyGUI::KeyCode::LeftAlt;
|
||||||
|
keyMap[SDLK_SPACE] = MyGUI::KeyCode::Space;
|
||||||
|
keyMap[SDLK_CAPSLOCK] = MyGUI::KeyCode::Capital;
|
||||||
|
keyMap[SDLK_F1] = MyGUI::KeyCode::F1;
|
||||||
|
keyMap[SDLK_F2] = MyGUI::KeyCode::F2;
|
||||||
|
keyMap[SDLK_F3] = MyGUI::KeyCode::F3;
|
||||||
|
keyMap[SDLK_F4] = MyGUI::KeyCode::F4;
|
||||||
|
keyMap[SDLK_F5] = MyGUI::KeyCode::F5;
|
||||||
|
keyMap[SDLK_F6] = MyGUI::KeyCode::F6;
|
||||||
|
keyMap[SDLK_F7] = MyGUI::KeyCode::F7;
|
||||||
|
keyMap[SDLK_F8] = MyGUI::KeyCode::F8;
|
||||||
|
keyMap[SDLK_F9] = MyGUI::KeyCode::F9;
|
||||||
|
keyMap[SDLK_F10] = MyGUI::KeyCode::F10;
|
||||||
|
keyMap[SDLK_NUMLOCKCLEAR] = MyGUI::KeyCode::NumLock;
|
||||||
|
keyMap[SDLK_SCROLLLOCK] = MyGUI::KeyCode::ScrollLock;
|
||||||
|
keyMap[SDLK_KP_7] = MyGUI::KeyCode::Numpad7;
|
||||||
|
keyMap[SDLK_KP_8] = MyGUI::KeyCode::Numpad8;
|
||||||
|
keyMap[SDLK_KP_9] = MyGUI::KeyCode::Numpad9;
|
||||||
|
keyMap[SDLK_KP_MINUS] = MyGUI::KeyCode::Subtract;
|
||||||
|
keyMap[SDLK_KP_4] = MyGUI::KeyCode::Numpad4;
|
||||||
|
keyMap[SDLK_KP_5] = MyGUI::KeyCode::Numpad5;
|
||||||
|
keyMap[SDLK_KP_6] = MyGUI::KeyCode::Numpad6;
|
||||||
|
keyMap[SDLK_KP_PLUS] = MyGUI::KeyCode::Add;
|
||||||
|
keyMap[SDLK_KP_1] = MyGUI::KeyCode::Numpad1;
|
||||||
|
keyMap[SDLK_KP_2] = MyGUI::KeyCode::Numpad2;
|
||||||
|
keyMap[SDLK_KP_3] = MyGUI::KeyCode::Numpad3;
|
||||||
|
keyMap[SDLK_KP_0] = MyGUI::KeyCode::Numpad0;
|
||||||
|
keyMap[SDLK_KP_PERIOD] = MyGUI::KeyCode::Decimal;
|
||||||
|
keyMap[SDLK_F11] = MyGUI::KeyCode::F11;
|
||||||
|
keyMap[SDLK_F12] = MyGUI::KeyCode::F12;
|
||||||
|
keyMap[SDLK_F13] = MyGUI::KeyCode::F13;
|
||||||
|
keyMap[SDLK_F14] = MyGUI::KeyCode::F14;
|
||||||
|
keyMap[SDLK_F15] = MyGUI::KeyCode::F15;
|
||||||
|
keyMap[SDLK_KP_EQUALS] = MyGUI::KeyCode::NumpadEquals;
|
||||||
|
keyMap[SDLK_COLON] = MyGUI::KeyCode::Colon;
|
||||||
|
keyMap[SDLK_KP_ENTER] = MyGUI::KeyCode::NumpadEnter;
|
||||||
|
keyMap[SDLK_KP_DIVIDE] = MyGUI::KeyCode::Divide;
|
||||||
|
keyMap[SDLK_SYSREQ] = MyGUI::KeyCode::SysRq;
|
||||||
|
keyMap[SDLK_RALT] = MyGUI::KeyCode::RightAlt;
|
||||||
|
keyMap[SDLK_HOME] = MyGUI::KeyCode::Home;
|
||||||
|
keyMap[SDLK_UP] = MyGUI::KeyCode::ArrowUp;
|
||||||
|
keyMap[SDLK_PAGEUP] = MyGUI::KeyCode::PageUp;
|
||||||
|
keyMap[SDLK_LEFT] = MyGUI::KeyCode::ArrowLeft;
|
||||||
|
keyMap[SDLK_RIGHT] = MyGUI::KeyCode::ArrowRight;
|
||||||
|
keyMap[SDLK_END] = MyGUI::KeyCode::End;
|
||||||
|
keyMap[SDLK_DOWN] = MyGUI::KeyCode::ArrowDown;
|
||||||
|
keyMap[SDLK_PAGEDOWN] = MyGUI::KeyCode::PageDown;
|
||||||
|
keyMap[SDLK_INSERT] = MyGUI::KeyCode::Insert;
|
||||||
|
keyMap[SDLK_DELETE] = MyGUI::KeyCode::Delete;
|
||||||
|
keyMap[SDLK_APPLICATION] = MyGUI::KeyCode::AppMenu;
|
||||||
|
|
||||||
|
//The function of the Ctrl and Meta keys are switched on macOS compared to other platforms.
|
||||||
|
//For instance] = Cmd+C versus Ctrl+C to copy from the system clipboard
|
||||||
|
#if defined(__APPLE__)
|
||||||
|
keyMap[SDLK_LGUI] = MyGUI::KeyCode::LeftControl;
|
||||||
|
keyMap[SDLK_RGUI] = MyGUI::KeyCode::RightControl;
|
||||||
|
keyMap[SDLK_LCTRL] = MyGUI::KeyCode::LeftWindows;
|
||||||
|
keyMap[SDLK_RCTRL] = MyGUI::KeyCode::RightWindows;
|
||||||
|
#else
|
||||||
|
keyMap[SDLK_LGUI] = MyGUI::KeyCode::LeftWindows;
|
||||||
|
keyMap[SDLK_RGUI] = MyGUI::KeyCode::RightWindows;
|
||||||
|
keyMap[SDLK_LCTRL] = MyGUI::KeyCode::LeftControl;
|
||||||
|
keyMap[SDLK_RCTRL] = MyGUI::KeyCode::RightControl;
|
||||||
|
#endif
|
||||||
|
return keyMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<MyGUI::KeyCode, SDL_Keycode> reverseKeyMap(const std::map<SDL_Keycode, MyGUI::KeyCode>& map)
|
||||||
|
{
|
||||||
|
std::map<MyGUI::KeyCode, SDL_Keycode> result;
|
||||||
|
for (auto [sdl, mygui] : map)
|
||||||
|
result[mygui] = sdl;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MyGUI::KeyCode sdlKeyToMyGUI(SDL_Keycode code)
|
||||||
|
{
|
||||||
|
static std::map<SDL_Keycode, MyGUI::KeyCode> keyMap = initKeyMap();
|
||||||
|
|
||||||
|
MyGUI::KeyCode kc = MyGUI::KeyCode::None;
|
||||||
|
auto foundKey = keyMap.find(code);
|
||||||
|
if (foundKey != keyMap.end())
|
||||||
|
kc = foundKey->second;
|
||||||
|
|
||||||
|
return kc;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Keycode myGuiKeyToSdl(MyGUI::KeyCode button)
|
||||||
|
{
|
||||||
|
static auto keyMap = reverseKeyMap(initKeyMap());
|
||||||
|
|
||||||
|
SDL_Keycode kc = 0;
|
||||||
|
auto foundKey = keyMap.find(button);
|
||||||
|
if (foundKey != keyMap.end())
|
||||||
|
kc = foundKey->second;
|
||||||
|
|
||||||
|
return kc;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef MWINPUT_SDLMAPPINGS_H
|
#ifndef SDLUTIL_SDLMAPPINGS
|
||||||
#define MWINPUT_SDLMAPPINGS_H
|
#define SDLUTIL_SDLMAPPINGS
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -12,14 +12,16 @@ namespace MyGUI
|
||||||
struct MouseButton;
|
struct MouseButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWInput
|
namespace SDLUtil
|
||||||
{
|
{
|
||||||
std::string sdlControllerButtonToString(int button);
|
std::string sdlControllerButtonToString(int button);
|
||||||
|
|
||||||
std::string sdlControllerAxisToString(int axis);
|
std::string sdlControllerAxisToString(int axis);
|
||||||
|
|
||||||
MyGUI::MouseButton sdlButtonToMyGUI(Uint8 button);
|
MyGUI::MouseButton sdlMouseButtonToMyGui(Uint8 button);
|
||||||
|
Uint8 myGuiMouseButtonToSdl(MyGUI::MouseButton button);
|
||||||
|
|
||||||
MyGUI::KeyCode sdlKeyToMyGUI(SDL_Keycode code);
|
MyGUI::KeyCode sdlKeyToMyGUI(SDL_Keycode code);
|
||||||
|
SDL_Keycode myGuiKeyToSdl(MyGUI::KeyCode button);
|
||||||
}
|
}
|
||||||
#endif
|
#endif // !SDLUTIL_SDLMAPPINGS
|
Loading…
Reference in a new issue