Skip to content
Snippets Groups Projects
Commit ebeda697 authored by l.dressen's avatar l.dressen
Browse files

zoom to pixel behind mouse cursor

parent 900a1bb9
No related branches found
No related tags found
1 merge request!419zoom to pixel behind mouse cursor
......@@ -64,15 +64,19 @@ void GraphicsView::wheelEvent(QWheelEvent *event)
}
else
{
// Check if horizontal scroll
if(event->angleDelta().x() != 0) // warum orienttion?
{
mViewWidget->zoomIn(numDegrees.x() / 2);
}
else
{
mViewWidget->zoomOut(numDegrees.y() / 2);
}
QPoint targetPos = event->position().toPoint();
QPointF targetScenePos = mapToScene(targetPos);
qreal factor = event->angleDelta().y() > 0 ? 0.9 : 1.1;
scale(factor, factor);
centerOn(targetScenePos);
QPointF deltaViewPortPos = targetPos - QPointF(viewport()->width() / 2.0, viewport()->height() / 2.0);
QPointF viewPortCenter = mapFromScene(targetScenePos) - deltaViewPortPos;
centerOn(mapToScene(viewPortCenter.toPoint()));
// set zoom slider without sending signals
QTransform matrix = transform();
double scale = Vec2F(matrix.m11(), matrix.m21()).length();
mViewWidget->setZoomLevelBlocked(250. + 50. * log(scale) / log(2.));
}
}
......@@ -394,5 +398,12 @@ void ViewWidget::hideShowControls()
mMainWindow->getHideControlActor()->setChecked(mMainWindow->getControlWidget()->isVisible());
}
void ViewWidget::setZoomLevelBlocked(int l)
{
mZoomSlider->blockSignals(true);
mZoomSlider->setValue(l);
mZoomSlider->blockSignals(false);
}
#include "moc_view.cpp"
......@@ -91,6 +91,7 @@ public:
inline void setZoomLevel(int l) { mZoomSlider->setValue(l); }
inline int getRotateLevel() { return mRotateSlider->value(); }
inline void setRotateLevel(int l) { mRotateSlider->setValue(l); }
void setZoomLevelBlocked(int l);
public slots:
void zoomIn(int i = 1);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment