From ce728f92fa58b5e3c369b4514c5b4c79be211bb6 Mon Sep 17 00:00:00 2001 From: codereader Date: Sat, 26 Sep 2020 05:01:22 +0200 Subject: [PATCH] #5338: Move UI keypress handling towards CamWnd. --- radiant/camera/CamWnd.cpp | 84 ++++++++++++++++ radiant/camera/CamWnd.h | 9 ++ radiant/camera/Camera.cpp | 114 ---------------------- radiant/camera/Camera.h | 7 -- radiant/camera/GlobalCameraWndManager.cpp | 12 +-- 5 files changed, 99 insertions(+), 127 deletions(-) diff --git a/radiant/camera/CamWnd.cpp b/radiant/camera/CamWnd.cpp index cc9c91caf6..0771c2822d 100644 --- a/radiant/camera/CamWnd.cpp +++ b/radiant/camera/CamWnd.cpp @@ -1117,6 +1117,90 @@ void CamWnd::drawTime() GlobalOpenGL().drawString(fmt::format("Time: {0:.3f} sec.", (time * 0.001f))); } +void CamWnd::handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movementFlags) +{ + if (eventType == KeyEventType::KeyPressed) + { + _camera.setMovementFlags(movementFlags); + } + else + { + _camera.clearMovementFlags(movementFlags); + } +} + +void CamWnd::onForwardKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_FORWARD); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.moveForwardDiscrete(SPEED_MOVE); + } +} + +void CamWnd::onBackwardKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_BACK); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.moveBackDiscrete(SPEED_MOVE); + } +} + +void CamWnd::onLeftKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_STRAFELEFT); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.rotateLeftDiscrete(); + } +} + +void CamWnd::onRightKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_STRAFERIGHT); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.rotateRightDiscrete(); + } +} + +void CamWnd::onUpKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_UP); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.moveUpDiscrete(SPEED_MOVE); + } +} + +void CamWnd::onDownKey(KeyEventType eventType) +{ + if (freeMoveEnabled()) + { + handleFreeMoveKeyEvent(eventType, MOVE_DOWN); + } + else if (eventType == KeyEventType::KeyPressed) + { + _camera.moveDownDiscrete(SPEED_MOVE); + } +} + // ------------------------------------------------------------------------------- ShaderPtr CamWnd::_faceHighlightShader; diff --git a/radiant/camera/CamWnd.h b/radiant/camera/CamWnd.h index 730037ed2d..03371f263b 100644 --- a/radiant/camera/CamWnd.h +++ b/radiant/camera/CamWnd.h @@ -141,7 +141,16 @@ class CamWnd : void startRenderTime(); void stopRenderTime(); + void onForwardKey(KeyEventType eventType); + void onBackwardKey(KeyEventType eventType); + void onLeftKey(KeyEventType eventType); + void onRightKey(KeyEventType eventType); + void onUpKey(KeyEventType eventType); + void onDownKey(KeyEventType eventType); + protected: + void handleFreeMoveKeyEvent(KeyEventType eventType, unsigned int movementFlags); + // Required overrides being a MouseToolHandler virtual MouseTool::Result processMouseDownEvent(const MouseToolPtr& tool, const Vector2& point) override; virtual MouseTool::Result processMouseUpEvent(const MouseToolPtr& tool, const Vector2& point) override; diff --git a/radiant/camera/Camera.cpp b/radiant/camera/Camera.cpp index 58134d3bf3..54277bb6a7 100644 --- a/radiant/camera/Camera.cpp +++ b/radiant/camera/Camera.cpp @@ -452,118 +452,4 @@ void Camera::rotateRightDiscrete() setCameraAngles(angles); } -void Camera::onForwardKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_FORWARD); - } - else - { - moveForwardDiscrete(SPEED_MOVE); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_FORWARD); - } -} - -void Camera::onBackwardKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_BACK); - } - else - { - moveBackDiscrete(SPEED_MOVE); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_BACK); - } -} - -void Camera::onLeftKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_STRAFELEFT); - } - else - { - rotateLeftDiscrete(); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_STRAFELEFT); - } -} - -void Camera::onRightKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_STRAFERIGHT); - } - else - { - rotateRightDiscrete(); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_STRAFERIGHT); - } -} - -void Camera::onUpKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_UP); - } - else - { - moveUpDiscrete(SPEED_MOVE); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_UP); - } -} - -void Camera::onDownKey(KeyEventType eventType) -{ - if (eventType == KeyEventType::KeyPressed) - { - if (freeMoveEnabled) - { - setMovementFlags(MOVE_DOWN); - } - else - { - moveDownDiscrete(SPEED_MOVE); - } - } - else if (freeMoveEnabled) - { - clearMovementFlags(MOVE_DOWN); - } -} - } // namespace diff --git a/radiant/camera/Camera.h b/radiant/camera/Camera.h index 60da783736..d64dbde0d3 100644 --- a/radiant/camera/Camera.h +++ b/radiant/camera/Camera.h @@ -132,13 +132,6 @@ class Camera : void moveBackDiscrete(double units); void moveForwardDiscrete(double units); - void onForwardKey(KeyEventType eventType); - void onBackwardKey(KeyEventType eventType); - void onLeftKey(KeyEventType eventType); - void onRightKey(KeyEventType eventType); - void onUpKey(KeyEventType eventType); - void onDownKey(KeyEventType eventType); - }; // class Camera } // namespace ui diff --git a/radiant/camera/GlobalCameraWndManager.cpp b/radiant/camera/GlobalCameraWndManager.cpp index 530fb9aeb1..6c0fced414 100644 --- a/radiant/camera/GlobalCameraWndManager.cpp +++ b/radiant/camera/GlobalCameraWndManager.cpp @@ -385,32 +385,32 @@ void GlobalCameraWndManager::doWithActiveCamWnd(const std::function