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"