From 1787f95f5727a20a4f0871736ad987fcfdf0f3c6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 28 Feb 2018 15:47:23 +0100 Subject: SVG viewer example: Improve zoom facility Add a label displaying the current zoom with a tooltip. Add menu actions for ZoomIn/ZoomOut and Reset. Task-number: QTBUG-60653 Change-Id: I7569427345737024b7a3191677e54c83673bb40e Reviewed-by: Eirik Aavitsland --- examples/svg/svgviewer/svgview.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'examples/svg/svgviewer/svgview.cpp') diff --git a/examples/svg/svgviewer/svgview.cpp b/examples/svg/svgviewer/svgview.cpp index bbc853c..ecc8409 100644 --- a/examples/svg/svgviewer/svgview.cpp +++ b/examples/svg/svgviewer/svgview.cpp @@ -178,6 +178,29 @@ void SvgView::setViewOutline(bool enable) m_outlineItem->setVisible(enable); } +qreal SvgView::zoomFactor() const +{ + return transform().m11(); +} + +void SvgView::zoomIn() +{ + zoomBy(2); +} + +void SvgView::zoomOut() +{ + zoomBy(0.5); +} + +void SvgView::resetZoom() +{ + if (!qFuzzyCompare(zoomFactor(), qreal(1))) { + resetTransform(); + emit zoomChanged(); + } +} + void SvgView::paintEvent(QPaintEvent *event) { if (m_renderer == Image) { @@ -199,9 +222,16 @@ void SvgView::paintEvent(QPaintEvent *event) void SvgView::wheelEvent(QWheelEvent *event) { - qreal factor = qPow(1.2, event->delta() / 240.0); + zoomBy(qPow(1.2, event->delta() / 240.0)); +} + +void SvgView::zoomBy(qreal factor) +{ + const qreal currentZoom = zoomFactor(); + if ((factor < 1 && currentZoom < 0.1) || (factor > 1 && currentZoom > 10)) + return; scale(factor, factor); - event->accept(); + emit zoomChanged(); } QSvgRenderer *SvgView::renderer() const -- cgit v1.2.3