Fix camera drift issues (#4576)

* remove some unused code in RenderViewportWidget and make viewing devicePixelRatioF easier

Signed-off-by: hultonha <hultonha@amazon.co.uk>

* updates to how cursor positions are calculate to handle the viewport widget moving

Signed-off-by: hultonha <hultonha@amazon.co.uk>

* remove optional for previous position

Signed-off-by: hultonha <hultonha@amazon.co.uk>

* add test to capture error with moving the widget

Signed-off-by: hultonha <hultonha@amazon.co.uk>

* minor comment updates before publishing PR

Signed-off-by: hultonha <hultonha@amazon.co.uk>
This commit is contained in:
hultonha
2021-10-11 16:23:24 +01:00
committed by GitHub
parent 3b89f7e1cd
commit 5c859cb134
5 changed files with 71 additions and 29 deletions
@@ -90,7 +90,7 @@ namespace AtomToolsFramework
//! Input processing is enabled by default.
void SetInputProcessingEnabled(bool enabled);
// AzToolsFramework::ViewportInteraction::ViewportInteractionRequestBus::Handler ...
// AzToolsFramework::ViewportInteraction::ViewportInteractionRequestBus::Handler overrides ...
AzFramework::CameraState GetCameraState() override;
AzFramework::ScreenPoint ViewportWorldToScreen(const AZ::Vector3& worldPosition) override;
AZStd::optional<AZ::Vector3> ViewportScreenToWorld(const AzFramework::ScreenPoint& screenPosition, float depth) override;
@@ -98,12 +98,12 @@ namespace AtomToolsFramework
const AzFramework::ScreenPoint& screenPosition) override;
float DeviceScalingFactor() override;
// AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Handler ...
// AzToolsFramework::ViewportInteraction::ViewportMouseCursorRequestBus::Handler overrides ...
void BeginCursorCapture() override;
void EndCursorCapture() override;
bool IsMouseOver() const override;
// AzFramework::WindowRequestBus::Handler ...
// AzFramework::WindowRequestBus::Handler overrides ...
void SetWindowTitle(const AZStd::string& title) override;
AzFramework::WindowSize GetClientAreaSize() const override;
void ResizeClientArea(AzFramework::WindowSize clientAreaSize) override;
@@ -116,18 +116,17 @@ namespace AtomToolsFramework
uint32_t GetDisplayRefreshRate() const override;
protected:
// AzFramework::InputChannelEventListener ...
// AzFramework::InputChannelEventListener overrides ...
bool OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) override;
// AZ::TickBus::Handler ...
// AZ::TickBus::Handler overrides ...
void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
// QWidget ...
// QWidget overrides ...
void resizeEvent(QResizeEvent *event) override;
bool event(QEvent* event) override;
void enterEvent(QEvent* event) override;
void leaveEvent(QEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
private:
void SendWindowResizeEvent();
@@ -143,8 +142,6 @@ namespace AtomToolsFramework
AZ::RPI::AuxGeomDrawPtr m_auxGeom;
// Tracks whether the cursor is currently over our viewport, used for mouse input event book-keeping.
bool m_mouseOver = false;
// The last recorded mouse position, in local viewport screen coordinates.
QPointF m_mousePosition;
// Captures the time between our render events to give controllers a time delta.
QElapsedTimer m_renderTimer;
// The time of the last recorded tick event from the system tick bus.