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:
@@ -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()) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user