From ba523111aff3eaf28d384f33ee68f00ae9691cf7 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 14 Mar 2016 23:42:45 +0100 Subject: [PATCH] ui: Tuned graph zooming --- src/lib_gui/qt/graphics/QtGraphicsView.cpp | 36 ++++++++++++++++------ src/lib_gui/qt/graphics/QtGraphicsView.h | 2 +- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/lib_gui/qt/graphics/QtGraphicsView.cpp b/src/lib_gui/qt/graphics/QtGraphicsView.cpp index 9f7457f4..e3eff618 100644 --- a/src/lib_gui/qt/graphics/QtGraphicsView.cpp +++ b/src/lib_gui/qt/graphics/QtGraphicsView.cpp @@ -30,7 +30,7 @@ qreal QtGraphicsView::zoom() const void QtGraphicsView::setZoom(qreal zoom) { - m_zoomFactor = zoom; + m_zoomFactor = qBound(0.1, zoom, 100.0); updateTransform(); } @@ -65,7 +65,7 @@ void QtGraphicsView::keyPressEvent(QKeyEvent* event) { if (event->modifiers() == Qt::ShiftModifier) { - updateZoom(true); + updateZoom(200.0f, true); return; } @@ -79,7 +79,7 @@ void QtGraphicsView::keyPressEvent(QKeyEvent* event) { if (event->modifiers() == Qt::ShiftModifier) { - updateZoom(false); + updateZoom(-200.0f, true); return; } @@ -116,7 +116,7 @@ void QtGraphicsView::wheelEvent(QWheelEvent* event) { if (event->modifiers() == Qt::ShiftModifier && event->delta() != 0.0f) { - updateZoom(event->delta() > 0.0f); + updateZoom(event->delta(), false); return; } @@ -129,11 +129,27 @@ void QtGraphicsView::updateTransform() setTransform(QTransform(zoomFactor, 0, 0, zoomFactor, 0, 0)); } -void QtGraphicsView::updateZoom(bool in) +void QtGraphicsView::updateZoom(float delta, bool animate) { - QPropertyAnimation* anim = new QPropertyAnimation(this, "zoom"); - anim->setDuration(100); - anim->setStartValue(m_zoomFactor); - anim->setEndValue(m_zoomFactor * (1.0f + 0.3 * (in ? 1 : -1))); - anim->start(); + float factor = 1.0f + 0.001 * delta; + + if (factor <= 0.0f) + { + factor = 0.000001; + } + + float newZoom = m_zoomFactor * factor; + + if (animate) + { + QPropertyAnimation* anim = new QPropertyAnimation(this, "zoom"); + anim->setDuration(100); + anim->setStartValue(m_zoomFactor); + anim->setEndValue(newZoom); + anim->start(); + } + else + { + setZoom(newZoom); + } } diff --git a/src/lib_gui/qt/graphics/QtGraphicsView.h b/src/lib_gui/qt/graphics/QtGraphicsView.h index b99a378f..6ca25866 100644 --- a/src/lib_gui/qt/graphics/QtGraphicsView.h +++ b/src/lib_gui/qt/graphics/QtGraphicsView.h @@ -29,7 +29,7 @@ signals: private: void updateTransform(); - void updateZoom(bool in); + void updateZoom(float delta, bool animate); QPoint m_last;