summaryrefslogtreecommitdiff
path: root/examples/svg/svgviewer/svgview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/svg/svgviewer/svgview.cpp')
-rw-r--r--examples/svg/svgviewer/svgview.cpp34
1 files changed, 32 insertions, 2 deletions
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