File indexing completed on 2024-05-19 04:28:58

0001 /*
0002  *  SPDX-FileCopyrightText: 2007 Thomas Zander <zander@kde.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_image_view_converter.h"
0008 #include "kis_image.h"
0009 #include "kis_pointer_utils.h"
0010 
0011 KisImageViewConverter::KisImageViewConverter()
0012     : KisImageViewConverter(KisImageSP())
0013 {
0014 }
0015 
0016 KisImageViewConverter::KisImageViewConverter(const KisImageWSP image)
0017     : KisImageViewConverter(toQShared(new KisImageResolutionProxy(image)))
0018 {
0019 }
0020 
0021 KisImageViewConverter::KisImageViewConverter(KisImageResolutionProxySP proxy)
0022     : m_proxy(proxy)
0023 {
0024     setZoom(0.1); // set the superclass to not hit the optimization of zoom=100%
0025 }
0026 
0027 KisImageViewConverter::KisImageViewConverter(const KisImageViewConverter &rhs)
0028     : KisClonableViewConverter(rhs)
0029     , m_proxy(rhs.m_proxy)
0030 {
0031 }
0032 
0033 KisImageViewConverter::~KisImageViewConverter()
0034 {
0035 }
0036 
0037 KisClonableViewConverter *KisImageViewConverter::clone() const
0038 {
0039     return new KisImageViewConverter(*this);
0040 }
0041 
0042 void KisImageViewConverter::setImage(KisImageWSP image)
0043 {
0044     m_proxy = m_proxy->createOrCloneDetached(image);
0045 }
0046 
0047 // remember here; document is postscript points;  view is krita pixels.
0048 
0049 void KisImageViewConverter::zoom(qreal *zoomX, qreal *zoomY) const
0050 {
0051     Q_ASSERT(zoomX);
0052     Q_ASSERT(zoomY);
0053     *zoomX = effectiveXRes();
0054     *zoomY = effectiveYRes();
0055 }
0056 
0057 /// convert from flake to krita units
0058 qreal KisImageViewConverter::documentToViewX(qreal documentX) const {
0059     return documentX * effectiveXRes();
0060 }
0061 
0062 /// convert from flake to krita units
0063 qreal KisImageViewConverter::documentToViewY(qreal documentY) const {
0064     return documentY * effectiveYRes();
0065 }
0066 
0067 /// convert from krita to flake units
0068 qreal KisImageViewConverter::viewToDocumentX(qreal viewX) const {
0069     return viewX / effectiveXRes();
0070 }
0071 
0072 /// convert from krita to flake units
0073 qreal KisImageViewConverter::viewToDocumentY(qreal viewY) const {
0074     return viewY / effectiveYRes();
0075 }
0076 
0077 qreal KisImageViewConverter::zoom() const
0078 {
0079     Q_ASSERT_X(0, "KisImageViewConverter::zoom()",
0080                "Not possible to return a single zoom. "
0081                "Don't use it. Sorry.");
0082 
0083     return effectiveXRes();
0084 }
0085 
0086 qreal KisImageViewConverter::effectiveXRes() const
0087 {
0088     return m_proxy->xRes();
0089 }
0090 
0091 qreal KisImageViewConverter::effectiveYRes() const
0092 {
0093     return m_proxy->yRes();
0094 }