File indexing completed on 2024-04-21 04:33:59

0001 /*
0002     SPDX-FileCopyrightText: 2022 Friedrich W. H. Kossebau <kossebau@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "svgview.h"
0008 
0009 // Qt
0010 #include <QScrollBar>
0011 #include <QTransform>
0012 #include <QWheelEvent>
0013 
0014 constexpr qreal zoomFactor = 1.2;
0015 
0016 SvgView::SvgView(QGraphicsScene *scene, QWidget *parent)
0017     : QGraphicsView(scene, parent)
0018 {
0019     setFrameStyle(QFrame::NoFrame);
0020     setDragMode(QGraphicsView::ScrollHandDrag);
0021 }
0022 
0023 void SvgView::zoomIn()
0024 {
0025     setZoom(zoom() * zoomFactor);
0026 }
0027 
0028 void SvgView::zoomOut()
0029 {
0030     setZoom(zoom() / zoomFactor);
0031 }
0032 
0033 void SvgView::zoomActualSize()
0034 {
0035     setZoom(1.0);
0036 }
0037 
0038 void SvgView::setZoom(qreal value)
0039 {
0040     QTransform matrix;
0041     matrix.scale(value, value);
0042     setTransform(matrix);
0043 }
0044 
0045 void SvgView::setHorizontalScrollPosition(int horizontalScrollPosition)
0046 {
0047     horizontalScrollBar()->setValue(horizontalScrollPosition);
0048 }
0049 
0050 void SvgView::setVerticalScrollPosition(int verticalScrollPosition)
0051 {
0052     verticalScrollBar()->setValue(verticalScrollPosition);
0053 }
0054 
0055 int SvgView::horizontalScrollPosition() const
0056 {
0057     return horizontalScrollBar()->value();
0058 }
0059 
0060 int SvgView::verticalScrollPosition() const
0061 {
0062     return verticalScrollBar()->value();
0063 }
0064 
0065 qreal SvgView::zoom() const
0066 {
0067     return transform().m11();
0068 }
0069 
0070 void SvgView::wheelEvent(QWheelEvent *wheelEvent)
0071 {
0072     if (wheelEvent->modifiers() & Qt::ControlModifier) {
0073         const int delta = wheelEvent->angleDelta().y();
0074         if (delta > 0) {
0075             zoomIn();
0076         } else if (delta < 0) {
0077             zoomOut();
0078         }
0079 
0080         wheelEvent->accept();
0081         return;
0082     }
0083 
0084     QGraphicsView::wheelEvent(wheelEvent);
0085 }
0086 
0087 #include "moc_svgview.cpp"