Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_warptransform_worker.h
Go to the documentation of this file.
1/*
2 * kis_warptransform_worker.h - part of Krita
3 *
4 * SPDX-FileCopyrightText: 2010 Marc Pegon <pe.marc@free.fr>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#ifndef KIS_WARPTRANSFORM_WORKER_H
10#define KIS_WARPTRANSFORM_WORKER_H
11
12#include "kis_types.h"
13#include "kritaimage_export.h"
14
15#include <QImage>
16#include <QPolygon>
17#include <QPoint>
18#include <QPointF>
19#include <QRect>
20
21#include <KoUpdater.h>
22
32class KRITAIMAGE_EXPORT KisWarpTransformWorker : public QObject
33{
34 Q_OBJECT
35
36public:
37 typedef enum WarpType_ {AFFINE_TRANSFORM = 0, SIMILITUDE_TRANSFORM, RIGID_TRANSFORM, N_MODES} WarpType;
38 typedef enum WarpCalculation_ {GRID = 0, DRAW} WarpCalculation;
39
40 static QPointF affineTransformMath(QPointF v, QVector<QPointF> p, QVector<QPointF> q, qreal alpha);
41 static QPointF similitudeTransformMath(QPointF v, QVector<QPointF> p, QVector<QPointF> q, qreal alpha);
42 static QPointF rigidTransformMath(QPointF v, QVector<QPointF> p, QVector<QPointF> q, qreal alpha);
43
44 static QImage transformQImage(WarpType warpType,
45 const QVector<QPointF> &origPoint,
46 const QVector<QPointF> &transfPoint,
47 qreal alpha,
48 const QImage& srcImage,
49 const QPointF &srcQImageOffset,
50 QPointF *newOffset);
51
52 // Prepare the transformation on dev
53 KisWarpTransformWorker(WarpType warpType, QVector<QPointF> origPoint, QVector<QPointF> transfPoint, qreal alpha, KoUpdater *progress);
54 ~KisWarpTransformWorker() override;
55 // Perform the prepared transformation
56 void run(KisPaintDeviceSP srcDev, KisPaintDeviceSP dstDev);
57
58 QRect approxChangeRect(const QRect &rc);
59 QRect approxNeedRect(const QRect &rc, const QRect &fullBounds);
60
61private:
62 struct FunctionTransformOp;
63 typedef QPointF (*WarpMathFunction)(QPointF, QVector<QPointF>, QVector<QPointF>, qreal);
64
65private:
66 WarpMathFunction m_warpMathFunction;
67 WarpCalculation m_warpCalc {GRID};
70 qreal m_alpha {1.0};
71 KoUpdater *m_progress {0};
72};
73
74#endif
const Params2D p
qreal v
enum KisWarpTransformWorker::WarpCalculation_ WarpCalculation