File indexing completed on 2024-05-19 04:26:29
0001 /* 0002 * SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net> 0003 * SPDX-FileCopyrightText: 2010 Marc Pegon <pe.marc@free.fr> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #ifndef KIS_PERSPECTIVETRANSFORM_WORKER_H 0009 #define KIS_PERSPECTIVETRANSFORM_WORKER_H 0010 0011 #include "kis_types.h" 0012 #include "kritaimage_export.h" 0013 0014 #include <QRect> 0015 #include <KisRegion.h> 0016 #include <QTransform> 0017 #include <KoUpdater.h> 0018 0019 0020 class KRITAIMAGE_EXPORT KisPerspectiveTransformWorker 0021 { 0022 public: 0023 KisPerspectiveTransformWorker(KisPaintDeviceSP dev, QPointF center, double aX, double aY, double distance, bool cropDst, KoUpdaterPtr progress); 0024 KisPerspectiveTransformWorker(KisPaintDeviceSP dev, const QTransform &transform, bool cropDst, KoUpdaterPtr progress); 0025 0026 ~KisPerspectiveTransformWorker(); 0027 0028 enum SampleType { 0029 NearestNeighbour = 0, 0030 Bilinear 0031 }; 0032 0033 void run(SampleType sampleType = Bilinear); 0034 void runPartialDst(KisPaintDeviceSP srcDev, 0035 KisPaintDeviceSP dstDev, 0036 const QRect &dstRect); 0037 0038 void setForwardTransform(const QTransform &transform); 0039 0040 QTransform forwardTransform() const; 0041 QTransform backwardTransform() const; 0042 0043 bool forceSubPixelTranslation() const; 0044 void setForceSubPixelTranslation(bool value); 0045 0046 private: 0047 void init(const QTransform &transform); 0048 0049 void fillParams(const QRectF &srcRect, 0050 const QRect &dstBaseClipRect, 0051 KisRegion *dstRegion, 0052 QPolygonF *dstClipPolygon); 0053 0054 template <class SrcAccessorPolicy> 0055 void runImpl(); 0056 0057 private: 0058 KisPaintDeviceSP m_dev; 0059 KoUpdaterPtr m_progressUpdater; 0060 KisRegion m_dstRegion; 0061 QRectF m_srcRect; 0062 QTransform m_backwardTransform; 0063 QTransform m_forwardTransform; 0064 bool m_isIdentity; 0065 bool m_isTranslating; 0066 bool m_cropDst; 0067 bool m_forceSubPixelTranslation {false}; 0068 }; 0069 0070 #endif