File indexing completed on 2024-05-12 15:56:54

0001 /*
0002  * SPDX-FileCopyrightText: 2006, 2008-2009 Thomas Zander <zander@kde.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #include "KoViewConverter.h"
0007 
0008 #include <QPointF>
0009 #include <QRectF>
0010 #include <QTransform>
0011 
0012 KoViewConverter::KoViewConverter()
0013     : m_zoomLevel(1.0)
0014 {
0015 }
0016 
0017 QPointF KoViewConverter::documentToView(const QPointF &documentPoint) const
0018 {
0019     if (qFuzzyCompare(m_zoomLevel, 1))
0020         return documentPoint;
0021     return QPointF(documentToViewX(documentPoint.x()), documentToViewY(documentPoint.y()));
0022 }
0023 
0024 QPointF KoViewConverter::viewToDocument(const QPointF &viewPoint) const
0025 {
0026     if (qFuzzyCompare(m_zoomLevel, 1))
0027         return viewPoint;
0028     return QPointF(viewToDocumentX(viewPoint.x()), viewToDocumentY(viewPoint.y()));
0029 }
0030 
0031 QRectF KoViewConverter::documentToView(const QRectF &documentRect) const
0032 {
0033     if (qFuzzyCompare(m_zoomLevel, 1))
0034         return documentRect;
0035     return QRectF(documentToView(documentRect.topLeft()), documentToView(documentRect.size()));
0036 }
0037 
0038 QRectF KoViewConverter::viewToDocument(const QRectF &viewRect) const
0039 {
0040     if (qFuzzyCompare(m_zoomLevel, 1))
0041         return viewRect;
0042     return QRectF(viewToDocument(viewRect.topLeft()), viewToDocument(viewRect.size()));
0043 }
0044 
0045 QSizeF KoViewConverter::documentToView(const QSizeF &documentSize) const
0046 {
0047     if (qFuzzyCompare(m_zoomLevel, 1))
0048         return documentSize;
0049     return QSizeF(documentToViewX(documentSize.width()), documentToViewY(documentSize.height()));
0050 }
0051 
0052 QSizeF KoViewConverter::viewToDocument(const QSizeF &viewSize) const
0053 {
0054     if (qFuzzyCompare(m_zoomLevel, 1))
0055         return viewSize;
0056     return QSizeF(viewToDocumentX(viewSize.width()), viewToDocumentY(viewSize.height()));
0057 }
0058 
0059 void KoViewConverter::zoom(qreal *zoomX, qreal *zoomY) const
0060 {
0061     *zoomX = m_zoomLevel;
0062     *zoomY = m_zoomLevel;
0063 }
0064 
0065 qreal KoViewConverter::documentToViewX(qreal documentX) const
0066 {
0067     return documentX * m_zoomLevel;
0068 }
0069 
0070 qreal KoViewConverter::documentToViewY(qreal documentY) const
0071 {
0072     return documentY * m_zoomLevel;
0073 }
0074 
0075 qreal KoViewConverter::viewToDocumentX(qreal viewX) const
0076 {
0077     return viewX / m_zoomLevel;
0078 }
0079 
0080 qreal KoViewConverter::viewToDocumentY(qreal viewY) const
0081 {
0082     return viewY / m_zoomLevel;
0083 }
0084 
0085 
0086 
0087 void KoViewConverter::setZoom(qreal zoom)
0088 {
0089     if (qFuzzyCompare(zoom, qreal(0.0)) || qFuzzyCompare(zoom, qreal(1.0))) {
0090         zoom = 1;
0091     }
0092     m_zoomLevel = zoom;
0093 }
0094 
0095 qreal KoViewConverter::zoom() const
0096 {
0097     return m_zoomLevel;
0098 }
0099 
0100 QTransform KoViewConverter::documentToView() const
0101 {
0102     qreal zoomX, zoomY;
0103     zoom(&zoomX, &zoomY);
0104     return QTransform::fromScale(zoomX, zoomY);
0105 }
0106 
0107 QTransform KoViewConverter::viewToDocument() const
0108 {
0109     qreal zoomX, zoomY;
0110     zoom(&zoomX, &zoomY);
0111     return QTransform::fromScale(1.0 / zoomX, 1.0 / zoomY);
0112 }
0113 
0114 QTransform KoViewConverter::viewToWidget() const
0115 {
0116     return QTransform();
0117 }
0118 
0119 QTransform KoViewConverter::widgetToView() const
0120 {
0121     return QTransform();
0122 }