diff --git a/engine/includes/editor/editorplatform.h b/engine/includes/editor/editorplatform.h index abb0d5c95..383f9bec5 100644 --- a/engine/includes/editor/editorplatform.h +++ b/engine/includes/editor/editorplatform.h @@ -14,6 +14,7 @@ class Engine; class Camera; +class QKeyEvent; class ENGINE_EXPORT EditorPlatform : public PlatformAdaptor { public: @@ -29,7 +30,7 @@ class ENGINE_EXPORT EditorPlatform : public PlatformAdaptor { void setMouseScrollDelta(float delta); void setMouseButtons(int button, int state); - void setKeys(int key, const QString &text, bool release, bool repeat); + void setKeys(QKeyEvent *ev, bool release); void update() override; diff --git a/engine/src/editor/editorplatform.cpp b/engine/src/editor/editorplatform.cpp index 6c75f70b7..0ebeafded 100644 --- a/engine/src/editor/editorplatform.cpp +++ b/engine/src/editor/editorplatform.cpp @@ -268,10 +268,15 @@ void EditorPlatform::setMouseButtons(int button, int state) { m_mouseButtons[btn] = state; } -void EditorPlatform::setKeys(int key, const QString &text, bool release, bool repeat) { - Input::KeyCode code = mapToInput(key); - m_keys[code] = release ? RELEASE : (repeat ? REPEAT : PRESS); - m_inputString += text.toStdString(); +void EditorPlatform::setKeys(QKeyEvent *ev, bool release) { + Input::KeyCode code = mapToInput(ev->key()); + if(code == Input::KEY_UNKNOWN) { + code = mapToInput(ev->nativeVirtualKey()); + } + m_keys[code] = release ? RELEASE : (ev->isAutoRepeat() ? REPEAT : PRESS); + if(!release) { + m_inputString += ev->text().toStdString(); + } } bool EditorPlatform::isMouseLocked() const { diff --git a/engine/src/editor/viewport/viewport.cpp b/engine/src/editor/viewport/viewport.cpp index 0f954450e..ad4c84828 100644 --- a/engine/src/editor/viewport/viewport.cpp +++ b/engine/src/editor/viewport/viewport.cpp @@ -450,13 +450,11 @@ bool Viewport::processEvent(QEvent *event) { return true; } case QEvent::KeyPress: { - QKeyEvent *ev = static_cast(event); - EditorPlatform::instance().setKeys(ev->nativeVirtualKey(), ev->text(), false, ev->isAutoRepeat()); + EditorPlatform::instance().setKeys(static_cast(event), false); return true; } case QEvent::KeyRelease: { - QKeyEvent *ev = static_cast(event); - EditorPlatform::instance().setKeys(ev->nativeVirtualKey(), "", true, ev->isAutoRepeat()); + EditorPlatform::instance().setKeys(static_cast(event), true); return true; } case QEvent::Wheel: {