File indexing completed on 2024-05-12 15:58:36
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 private: 0044 void init(const QTransform &transform); 0045 0046 void fillParams(const QRectF &srcRect, 0047 const QRect &dstBaseClipRect, 0048 KisRegion *dstRegion, 0049 QPolygonF *dstClipPolygon); 0050 0051 template <class SrcAccessorPolicy> 0052 void runImpl(); 0053 0054 private: 0055 KisPaintDeviceSP m_dev; 0056 KoUpdaterPtr m_progressUpdater; 0057 KisRegion m_dstRegion; 0058 QRectF m_srcRect; 0059 QTransform m_backwardTransform; 0060 QTransform m_forwardTransform; 0061 bool m_isIdentity; 0062 bool m_isTranslating; 0063 bool m_cropDst; 0064 }; 0065 0066 #endif