refactor: Move camera mouse event handling to Camera class

Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
2026-02-17 11:34:25 -07:00
parent 2e2f99f2c2
commit a66dc50daf
4 changed files with 19 additions and 15 deletions

View File

@@ -7,6 +7,7 @@
Camera::Camera(QObject *parent) : QObject(parent) Camera::Camera(QObject *parent) : QObject(parent)
{ {
m_lastPos = QPoint();
// Set initial view to an isometric angle on the XY plane // Set initial view to an isometric angle on the XY plane
m_xRot = 30 * 16; m_xRot = 30 * 16;
m_yRot = -45 * 16; m_yRot = -45 * 16;
@@ -15,10 +16,15 @@ Camera::Camera(QObject *parent) : QObject(parent)
m_panY = 0.0f; m_panY = 0.0f;
} }
void Camera::processMouseMovement(QMouseEvent* event, const QPoint& lastPos) void Camera::mousePressEvent(QMouseEvent* event)
{ {
int dx = event->pos().x() - lastPos.x(); m_lastPos = event->pos();
int dy = event->pos().y() - lastPos.y(); }
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 (event->buttons() & Qt::MiddleButton) {
if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { if (QApplication::keyboardModifiers() & Qt::ShiftModifier) {
@@ -31,9 +37,10 @@ void Camera::processMouseMovement(QMouseEvent* event, const QPoint& lastPos)
setYRotation(m_yRot + 8 * dx); setYRotation(m_yRot + 8 * dx);
} }
} }
m_lastPos = event->pos();
} }
void Camera::processWheel(QWheelEvent* event) void Camera::wheelEvent(QWheelEvent* event)
{ {
QPoint numDegrees = event->angleDelta() / 8; QPoint numDegrees = event->angleDelta() / 8;
if (!numDegrees.isNull()) { if (!numDegrees.isNull()) {

View File

@@ -19,8 +19,9 @@ class Camera : public QObject
public: public:
explicit Camera(QObject *parent = nullptr); explicit Camera(QObject *parent = nullptr);
void processMouseMovement(QMouseEvent* event, const QPoint& lastPos); void mousePressEvent(QMouseEvent* event);
void processWheel(QWheelEvent* event); void mouseMoveEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event);
QMatrix4x4 modelViewMatrix() const; QMatrix4x4 modelViewMatrix() const;
@@ -52,6 +53,7 @@ signals:
void restoreStateAnimationFinished(); void restoreStateAnimationFinished();
private: private:
QPoint m_lastPos;
float m_xRot; float m_xRot;
float m_yRot; float m_yRot;
float m_zoom; float m_zoom;

View File

@@ -191,6 +191,8 @@ void ViewportWidget::resizeGL(int w, int h)
void ViewportWidget::mousePressEvent(QMouseEvent *event) void ViewportWidget::mousePressEvent(QMouseEvent *event)
{ {
m_camera->mousePressEvent(event);
if (event->button() == Qt::LeftButton) { if (event->button() == Qt::LeftButton) {
if (m_isSelectingPlane) { if (m_isSelectingPlane) {
if (m_highlightedPlane != SketchPlane::NONE) { if (m_highlightedPlane != SketchPlane::NONE) {
@@ -208,8 +210,6 @@ void ViewportWidget::mousePressEvent(QMouseEvent *event)
return; return;
} }
} else {
lastPos = event->pos();
} }
} }
@@ -233,16 +233,13 @@ void ViewportWidget::mouseMoveEvent(QMouseEvent *event)
m_activeSketchTool->mouseMoveEvent(event); m_activeSketchTool->mouseMoveEvent(event);
} }
if (event->buttons() & Qt::MiddleButton) { m_camera->mouseMoveEvent(event);
m_camera->processMouseMovement(event, lastPos);
}
lastPos = event->pos();
update(); update();
} }
void ViewportWidget::wheelEvent(QWheelEvent *event) void ViewportWidget::wheelEvent(QWheelEvent *event)
{ {
m_camera->processWheel(event); m_camera->wheelEvent(event);
} }
void ViewportWidget::keyPressEvent(QKeyEvent *event) void ViewportWidget::keyPressEvent(QKeyEvent *event)

View File

@@ -123,8 +123,6 @@ private:
QMap<int, QSvgRenderer*> m_toolIcons; QMap<int, QSvgRenderer*> m_toolIcons;
QSvgRenderer* m_cursorRenderer = nullptr; QSvgRenderer* m_cursorRenderer = nullptr;
QPoint lastPos;
}; };
#endif // VIEWPORTWIDGET_H #endif // VIEWPORTWIDGET_H