File indexing completed on 2024-05-12 15:58:26
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_LIQUIFY_TRANSFORM_WORKER_H 0008 #define __KIS_LIQUIFY_TRANSFORM_WORKER_H 0009 0010 #include <QScopedPointer> 0011 #include <boost/operators.hpp> 0012 0013 #include <kritaimage_export.h> 0014 #include <kis_types.h> 0015 0016 class QImage; 0017 class QRect; 0018 class QSize; 0019 class QTransform; 0020 class QDomElement; 0021 0022 0023 class KRITAIMAGE_EXPORT KisLiquifyTransformWorker : boost::equality_comparable<KisLiquifyTransformWorker> 0024 { 0025 public: 0026 KisLiquifyTransformWorker(const QRect &srcBounds, 0027 KoUpdater *progress, 0028 int pixelPrecision = 8); 0029 0030 KisLiquifyTransformWorker(const KisLiquifyTransformWorker &rhs); 0031 0032 ~KisLiquifyTransformWorker(); 0033 0034 bool operator==(const KisLiquifyTransformWorker &other) const; 0035 bool isIdentity() const; 0036 0037 0038 int pointToIndex(const QPoint &cellPt); 0039 QSize gridSize() const; 0040 0041 void translatePoints(const QPointF &base, 0042 const QPointF &offset, 0043 qreal sigma, 0044 bool useWashMode, 0045 qreal flow); 0046 0047 void scalePoints(const QPointF &base, 0048 qreal scale, 0049 qreal sigma, 0050 bool useWashMode, 0051 qreal flow); 0052 0053 void rotatePoints(const QPointF &base, 0054 qreal angle, 0055 qreal sigma, 0056 bool useWashMode, 0057 qreal flow); 0058 0059 void undoPoints(const QPointF &base, 0060 qreal amount, 0061 qreal sigma); 0062 0063 const QVector<QPointF>& originalPoints() const; 0064 QVector<QPointF>& transformedPoints(); 0065 0066 void run(KisPaintDeviceSP srcDevice, KisPaintDeviceSP dstDevice); 0067 QImage runOnQImage(const QImage &srcImage, 0068 const QPointF &srcImageOffset, 0069 const QTransform &imageToThumbTransform, 0070 QPointF *newOffset); 0071 0072 void toXML(QDomElement *e) const; 0073 static KisLiquifyTransformWorker* fromXML(const QDomElement &e); 0074 0075 void translate(const QPointF &offset); 0076 void translateDstSpace(const QPointF &offset); 0077 0078 QRect approxChangeRect(const QRect &rc); 0079 QRect approxNeedRect(const QRect &rc, const QRect &fullBounds); 0080 0081 void transformSrcAndDst(const QTransform &t); 0082 0083 private: 0084 struct Private; 0085 const QScopedPointer<Private> m_d; 0086 }; 0087 0088 #endif /* __KIS_LIQUIFY_TRANSFORM_WORKER_H */