mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-09 21:44:30 +00:00
Qt/Input: Implement GetModifierCode to improve keyevents
This commit is contained in:
parent
2cd551a222
commit
a4de495093
@ -105,6 +105,35 @@ void keyboard_pad_handler::Key(const u32 code, bool pressed, u16 value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int keyboard_pad_handler::GetModifierCode(QKeyEvent* e)
|
||||||
|
{
|
||||||
|
switch (e->key())
|
||||||
|
{
|
||||||
|
case Qt::Key_Control:
|
||||||
|
case Qt::Key_Alt:
|
||||||
|
case Qt::Key_AltGr:
|
||||||
|
case Qt::Key_Shift:
|
||||||
|
case Qt::Key_Meta:
|
||||||
|
case Qt::Key_NumLock:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e->modifiers() == Qt::ControlModifier)
|
||||||
|
return Qt::ControlModifier;
|
||||||
|
else if (e->modifiers() == Qt::AltModifier)
|
||||||
|
return Qt::AltModifier;
|
||||||
|
else if (e->modifiers() == Qt::MetaModifier)
|
||||||
|
return Qt::MetaModifier;
|
||||||
|
else if (e->modifiers() == Qt::ShiftModifier)
|
||||||
|
return Qt::ShiftModifier;
|
||||||
|
else if (e->modifiers() == Qt::KeypadModifier)
|
||||||
|
return Qt::KeypadModifier;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool keyboard_pad_handler::eventFilter(QObject* target, QEvent* ev)
|
bool keyboard_pad_handler::eventFilter(QObject* target, QEvent* ev)
|
||||||
{
|
{
|
||||||
// !m_target is for future proofing when gsrender isn't automatically initialized on load.
|
// !m_target is for future proofing when gsrender isn't automatically initialized on load.
|
||||||
@ -170,7 +199,7 @@ void keyboard_pad_handler::keyPressEvent(QKeyEvent* event)
|
|||||||
if (!(event->modifiers() == Qt::ControlModifier)) { Key(event->key(), 1); }
|
if (!(event->modifiers() == Qt::ControlModifier)) { Key(event->key(), 1); }
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Key(event->key(), 1);
|
Key(event->key() + GetModifierCode(event), 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
event->ignore();
|
event->ignore();
|
||||||
@ -184,7 +213,7 @@ void keyboard_pad_handler::keyReleaseEvent(QKeyEvent* event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Key(event->key(), 0);
|
Key(event->key() + GetModifierCode(event), 0);
|
||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,6 +238,8 @@ std::string keyboard_pad_handler::GetKeyName(const QKeyEvent* keyEvent)
|
|||||||
return "Shift";
|
return "Shift";
|
||||||
case Qt::Key_Control:
|
case Qt::Key_Control:
|
||||||
return "Ctrl";
|
return "Ctrl";
|
||||||
|
case Qt::Key_Meta:
|
||||||
|
return "Meta";
|
||||||
case Qt::Key_NumLock:
|
case Qt::Key_NumLock:
|
||||||
return sstr(QKeySequence(keyEvent->key()).toString(QKeySequence::NativeText));
|
return sstr(QKeySequence(keyEvent->key()).toString(QKeySequence::NativeText));
|
||||||
default:
|
default:
|
||||||
@ -219,7 +250,6 @@ std::string keyboard_pad_handler::GetKeyName(const QKeyEvent* keyEvent)
|
|||||||
|
|
||||||
std::string keyboard_pad_handler::GetKeyName(const u32& keyCode)
|
std::string keyboard_pad_handler::GetKeyName(const u32& keyCode)
|
||||||
{
|
{
|
||||||
//TODO what about numpad?
|
|
||||||
return sstr(QKeySequence(keyCode).toString(QKeySequence::NativeText));
|
return sstr(QKeySequence(keyCode).toString(QKeySequence::NativeText));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,6 +263,8 @@ u32 keyboard_pad_handler::GetKeyCode(const std::string& keyName)
|
|||||||
return Qt::Key_Shift;
|
return Qt::Key_Shift;
|
||||||
else if (keyName == "Ctrl")
|
else if (keyName == "Ctrl")
|
||||||
return Qt::Key_Control;
|
return Qt::Key_Control;
|
||||||
|
else if (keyName == "Meta")
|
||||||
|
return Qt::Key_Meta;
|
||||||
|
|
||||||
QString key = qstr(keyName);
|
QString key = qstr(keyName);
|
||||||
QKeySequence seq(key);
|
QKeySequence seq(key);
|
||||||
@ -244,9 +276,11 @@ u32 keyboard_pad_handler::GetKeyCode(const std::string& keyName)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// TODO: Maybe ditch this code
|
||||||
// Should be here only if a modifier key (e.g. Ctrl, Alt) is pressed.
|
// Should be here only if a modifier key (e.g. Ctrl, Alt) is pressed.
|
||||||
if (seq.count() != 0)
|
if (seq.count() != 0)
|
||||||
{
|
{
|
||||||
|
LOG_ERROR(GENERAL, "GetKeyCode(%s): seq.count() != 0 . seq.count() = %d", keyName, seq.count());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// Add a non-modifier key "A" to the picture because QKeySequence
|
// Add a non-modifier key "A" to the picture because QKeySequence
|
||||||
@ -255,6 +289,7 @@ u32 keyboard_pad_handler::GetKeyCode(const std::string& keyName)
|
|||||||
seq = QKeySequence(key + "+A");
|
seq = QKeySequence(key + "+A");
|
||||||
if (seq.count() != 0 || seq[0] <= 65)
|
if (seq.count() != 0 || seq[0] <= 65)
|
||||||
{
|
{
|
||||||
|
LOG_ERROR(GENERAL, "GetKeyCode(%s): seq.count() != 0 || seq[0] <= 65 . seq[0] = %d . seq.count() = %d", keyName, seq[0], seq.count());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
keyCode = seq[0] - 65;
|
keyCode = seq[0] - 65;
|
||||||
|
@ -31,6 +31,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Key(const u32 code, bool pressed, u16 value = 255);
|
void Key(const u32 code, bool pressed, u16 value = 255);
|
||||||
|
int GetModifierCode(QKeyEvent* e);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWindow* m_target = nullptr;
|
QWindow* m_target = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user