Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_cage_transform_strategy.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
9
10#include <QPointF>
11#include <QPainter>
12
13#include "kis_painting_tweaks.h"
14#include "kis_cursor.h"
16
17
27
28
30 KoSnapGuide *snapGuide,
31 ToolTransformArgs &currentArgs,
33 : KisWarpTransformStrategy(converter, snapGuide, currentArgs, transaction),
34 m_d(new Private(this))
35{
36 overrideDrawingItems(true, false, true);
40
41}
42
46
48 const QVector<QPointF> &origPoints,
49 const QVector<QPointF> &transfPoints,
50 bool isEditingPoints)
51{
52 const int numPoints = origPoints.size();
53 if (numPoints <= 1) return;
54
55 QPen antsPen;
56 QPen outlinePen;
57
58 KisPaintingTweaks::initAntsPen(&antsPen, &outlinePen);
59 antsPen.setWidth(qMax(1, decorationThickness()));
60 outlinePen.setWidth(qMax(1, decorationThickness()));
61
62 const int iterateLimit = isEditingPoints ? numPoints : numPoints + 1;
63
64 for (int i = 1; i < iterateLimit; ++i) {
65 int idx = i % numPoints;
66 int prevIdx = (i - 1) % numPoints;
67
68 gc.setPen(outlinePen);
69 gc.drawLine(transfPoints[prevIdx], transfPoints[idx]);
70 gc.setPen(antsPen);
71 gc.drawLine(transfPoints[prevIdx], transfPoints[idx]);
72 }
73}
74
76 const QImage &srcImage,
77 const QVector<QPointF> &origPoints,
78 const QVector<QPointF> &transfPoints,
79 const QPointF &srcOffset,
80 QPointF *dstOffset)
81{
82 KisCageTransformWorker worker(srcImage,
83 srcOffset,
84 origPoints,
85 0,
86 currentArgs.previewPixelPrecision());
87 worker.prepareTransform();
88 worker.setTransformedCage(transfPoints);
89 return worker.runOnQImage(dstOffset);
90}
void drawConnectionLines(QPainter &gc, const QVector< QPointF > &origPoints, const QVector< QPointF > &transfPoints, bool isEditingPoints) override
KisCageTransformStrategy(const KisCoordinatesConverter *converter, KoSnapGuide *snapGuide, ToolTransformArgs &currentArgs, TransformTransactionProperties &transaction)
QImage calculateTransformedImage(ToolTransformArgs &currentArgs, const QImage &srcImage, const QVector< QPointF > &origPoints, const QVector< QPointF > &transfPoints, const QPointF &srcOffset, QPointF *dstOffset) override
void setTransformType(TransformType type)
void overrideDrawingItems(bool drawConnectionLines, bool drawOrigPoints, bool drawTransfPoints)
int previewPixelPrecision() const
void initAntsPen(QPen *antsPen, QPen *outlinePen, int antLength, int antSpace)
void setTransformedCage(const QVector< QPointF > &transformedCage)
QImage runOnQImage(QPointF *newOffset)