From a66dc50dafa0b88b18d934a8ab50f4be50440599 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Tue, 17 Feb 2026 11:34:25 -0700 Subject: [PATCH] refactor: Move camera mouse event handling to Camera class Co-authored-by: aider (gemini/gemini-2.5-pro) --- src/Camera.cpp | 15 +++++++++++---- src/Camera.h | 6 ++++-- src/ViewportWidget.cpp | 11 ++++------- src/ViewportWidget.h | 2 -- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Camera.cpp b/src/Camera.cpp index a807501..da25aff 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -7,6 +7,7 @@ Camera::Camera(QObject *parent) : QObject(parent) { + m_lastPos = QPoint(); // Set initial view to an isometric angle on the XY plane m_xRot = 30 * 16; m_yRot = -45 * 16; @@ -15,10 +16,15 @@ Camera::Camera(QObject *parent) : QObject(parent) m_panY = 0.0f; } -void Camera::processMouseMovement(QMouseEvent* event, const QPoint& lastPos) +void Camera::mousePressEvent(QMouseEvent* event) { - int dx = event->pos().x() - lastPos.x(); - int dy = event->pos().y() - lastPos.y(); + m_lastPos = event->pos(); +} + +void Camera::mouseMoveEvent(QMouseEvent* event) +{ + int dx = event->pos().x() - m_lastPos.x(); + int dy = event->pos().y() - m_lastPos.y(); if (event->buttons() & Qt::MiddleButton) { if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { @@ -31,9 +37,10 @@ void Camera::processMouseMovement(QMouseEvent* event, const QPoint& lastPos) setYRotation(m_yRot + 8 * dx); } } + m_lastPos = event->pos(); } -void Camera::processWheel(QWheelEvent* event) +void Camera::wheelEvent(QWheelEvent* event) { QPoint numDegrees = event->angleDelta() / 8; if (!numDegrees.isNull()) { diff --git a/src/Camera.h b/src/Camera.h index 77ab087..1b35c59 100644 --- a/src/Camera.h +++ b/src/Camera.h @@ -19,8 +19,9 @@ class Camera : public QObject public: explicit Camera(QObject *parent = nullptr); - void processMouseMovement(QMouseEvent* event, const QPoint& lastPos); - void processWheel(QWheelEvent* event); + void mousePressEvent(QMouseEvent* event); + void mouseMoveEvent(QMouseEvent* event); + void wheelEvent(QWheelEvent* event); QMatrix4x4 modelViewMatrix() const; @@ -52,6 +53,7 @@ signals: void restoreStateAnimationFinished(); private: + QPoint m_lastPos; float m_xRot; float m_yRot; float m_zoom; diff --git a/src/ViewportWidget.cpp b/src/ViewportWidget.cpp index eb7a39a..7eb3f90 100644 --- a/src/ViewportWidget.cpp +++ b/src/ViewportWidget.cpp @@ -191,6 +191,8 @@ void ViewportWidget::resizeGL(int w, int h) void ViewportWidget::mousePressEvent(QMouseEvent *event) { + m_camera->mousePressEvent(event); + if (event->button() == Qt::LeftButton) { if (m_isSelectingPlane) { if (m_highlightedPlane != SketchPlane::NONE) { @@ -208,8 +210,6 @@ void ViewportWidget::mousePressEvent(QMouseEvent *event) return; } - } else { - lastPos = event->pos(); } } @@ -233,16 +233,13 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event) m_activeSketchTool->mouseMoveEvent(event); } - if (event->buttons() & Qt::MiddleButton) { - m_camera->processMouseMovement(event, lastPos); - } - lastPos = event->pos(); + m_camera->mouseMoveEvent(event); update(); } void ViewportWidget::wheelEvent(QWheelEvent *event) { - m_camera->processWheel(event); + m_camera->wheelEvent(event); } void ViewportWidget::keyPressEvent(QKeyEvent *event) diff --git a/src/ViewportWidget.h b/src/ViewportWidget.h index a74fe8a..c0fd68b 100644 --- a/src/ViewportWidget.h +++ b/src/ViewportWidget.h @@ -123,8 +123,6 @@ private: QMap m_toolIcons; QSvgRenderer* m_cursorRenderer = nullptr; - - QPoint lastPos; }; #endif // VIEWPORTWIDGET_H