Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLiquifyTransformStrategy Class Reference

#include <kis_liquify_transform_strategy.h>

+ Inheritance diagram for KisLiquifyTransformStrategy:

Classes

struct  Private
 

Signals

void requestCanvasUpdate ()
 
void requestCursorOutlineUpdate (const QPointF &imagePoint)
 
void requestImageRecalculation ()
 
void requestUpdateOptionWidget ()
 

Public Member Functions

bool acceptsClicks () const override
 
void activateAlternateAction (KisTool::AlternateAction action) override
 
bool beginAlternateAction (KoPointerEvent *event, KisTool::AlternateAction action) override
 
bool beginPrimaryAction (KoPointerEvent *event) override
 
void continueAlternateAction (KoPointerEvent *event, KisTool::AlternateAction action) override
 
void continuePrimaryAction (KoPointerEvent *event) override
 
void deactivateAlternateAction (KisTool::AlternateAction action) override
 
void decreaseBrushSize (KoCanvasBase *canvas) override
 
bool endAlternateAction (KoPointerEvent *event, KisTool::AlternateAction action) override
 
bool endPrimaryAction (KoPointerEvent *event) override
 
void externalConfigChanged () override
 
QCursor getCurrentCursor () const override
 
QPainterPath getCursorOutline () const override
 
void hoverActionCommon (KoPointerEvent *event) override
 
void increaseBrushSize (KoCanvasBase *canvas) override
 
 KisLiquifyTransformStrategy (const KisCoordinatesConverter *converter, ToolTransformArgs &currentArgs, TransformTransactionProperties &transaction, const KoCanvasResourceProvider *manager)
 
void paint (QPainter &gc) override
 
void setTransformFunction (const QPointF &mousePos, bool perspectiveModifierActive, bool shiftModifierActive)
 
 ~KisLiquifyTransformStrategy () override
 
- Public Member Functions inherited from KisTransformStrategyBase
virtual void activatePrimaryAction ()
 
virtual void deactivatePrimaryAction ()
 
virtual int decorationThickness () const
 
 KisTransformStrategyBase ()
 
QImage originalImage () const
 
virtual void setDecorationThickness (int thickness)
 
void setThumbnailImage (const QImage &image, QTransform thumbToImageTransform)
 
QTransform thumbToImageTransform () const
 
 ~KisTransformStrategyBase () override
 

Private Member Functions

void changeBrushSize (KoCanvasBase *canvas, bool increase)
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 23 of file kis_liquify_transform_strategy.h.

Constructor & Destructor Documentation

◆ KisLiquifyTransformStrategy()

KisLiquifyTransformStrategy::KisLiquifyTransformStrategy ( const KisCoordinatesConverter * converter,
ToolTransformArgs & currentArgs,
TransformTransactionProperties & transaction,
const KoCanvasResourceProvider * manager )

Definition at line 87 of file kis_liquify_transform_strategy.cpp.

92 : m_d(new Private(this, converter, currentArgs, transaction, manager))
93{
94}
const QScopedPointer< Private > m_d

◆ ~KisLiquifyTransformStrategy()

KisLiquifyTransformStrategy::~KisLiquifyTransformStrategy ( )
override

Definition at line 96 of file kis_liquify_transform_strategy.cpp.

97{
98}

Member Function Documentation

◆ acceptsClicks()

bool KisLiquifyTransformStrategy::acceptsClicks ( ) const
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 141 of file kis_liquify_transform_strategy.cpp.

142{
143 return true;
144}

◆ activateAlternateAction()

void KisLiquifyTransformStrategy::activateAlternateAction ( KisTool::AlternateAction action)
overridevirtual

◆ beginAlternateAction()

bool KisLiquifyTransformStrategy::beginAlternateAction ( KoPointerEvent * event,
KisTool::AlternateAction action )
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 206 of file kis_liquify_transform_strategy.cpp.

207{
208 m_d->lastDocPos = event->point;
209 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
210 QPointF widgetPoint = m_d->converter->documentToWidget(event->point);
211 m_d->lastMouseWidgetPos = widgetPoint;
212 m_d->startResizeImagePos = m_d->converter->documentToImage(event->point);
213 m_d->startResizeGlobalCursorPos = event->globalPos();
214 return true;
215 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
216 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
217
218 return beginPrimaryAction(event);
219 }
220
221 return false;
222}
bool beginPrimaryAction(KoPointerEvent *event) override
QPointF point
The point in document coordinates.
@ ChangeSizeSnap
Definition kis_tool.h:136
@ ChangeSize
Definition kis_tool.h:135

References beginPrimaryAction(), KisTool::ChangeSize, KisTool::ChangeSizeSnap, m_d, KoPointerEvent::point, KisTool::SampleBgImage, KisTool::SampleBgNode, KisTool::SampleFgImage, and KisTool::SampleFgNode.

◆ beginPrimaryAction()

bool KisLiquifyTransformStrategy::beginPrimaryAction ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 146 of file kis_liquify_transform_strategy.cpp.

147{
148 m_d->lastDocPos = event->point;
149 m_d->helper.configurePaintOp(*m_d->currentArgs.liquifyProperties(), m_d->currentArgs.liquifyWorker());
150 m_d->helper.startPaint(event, m_d->manager);
151
152 m_d->recalculateTransformations();
153
154 return true;
155}

References m_d.

◆ changeBrushSize()

void KisLiquifyTransformStrategy::changeBrushSize ( KoCanvasBase * canvas,
bool increase )
private

Definition at line 277 of file kis_liquify_transform_strategy.cpp.

278{
279 KisLiquifyProperties *props = m_d->currentArgs.liquifyProperties();
280 qreal oldSize = props->size();
281
282 int newSize;
283 if (increase) {
284 newSize = m_d->standardBrushSizes.increaseBrushSize(oldSize);
285 } else {
286 newSize = m_d->standardBrushSizes.decreaseBrushSize(oldSize);
287 }
288
289 props->setSize(newSize);
291 Q_EMIT requestCursorOutlineUpdate( m_d->converter->documentToImage(m_d->lastDocPos));
293}
void requestCursorOutlineUpdate(const QPointF &imagePoint)
void KRITAUI_EXPORT showBrushSizeFloatingMessage(KoCanvasBase *canvas, qreal size)

References m_d, requestCursorOutlineUpdate(), requestUpdateOptionWidget(), KisLiquifyProperties::setSize(), KisToolUtils::showBrushSizeFloatingMessage(), and KisLiquifyProperties::size().

◆ continueAlternateAction()

void KisLiquifyTransformStrategy::continueAlternateAction ( KoPointerEvent * event,
KisTool::AlternateAction action )
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 224 of file kis_liquify_transform_strategy.cpp.

225{
226 m_d->lastDocPos = event->point;
227 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
228 QPointF widgetPoint = m_d->converter->documentToWidget(event->point);
229
230 QPointF diff = widgetPoint - m_d->lastMouseWidgetPos;
231
232 KisLiquifyProperties *props = m_d->currentArgs.liquifyProperties();
233 const qreal linearizedOffset = diff.x() / KisTransformUtils::scaleFromAffineMatrix(m_d->converter->imageToWidgetTransform());
234 const qreal newSize = qBound(props->minSize(), props->size() + linearizedOffset, props->maxSize());
235 if (action == KisTool::ChangeSizeSnap) {
236 props->setSize(floor(newSize));
237 } else {
238 props->setSize(newSize);
239 }
240 m_d->currentArgs.saveLiquifyTransformMode();
241
242 m_d->lastMouseWidgetPos = widgetPoint;
243
244 Q_EMIT requestCursorOutlineUpdate(m_d->startResizeImagePos);
245 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
246 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
247
248 return continuePrimaryAction(event);
249 }
250}
void continuePrimaryAction(KoPointerEvent *event) override
static qreal scaleFromAffineMatrix(const QTransform &t)

References KisTool::ChangeSize, KisTool::ChangeSizeSnap, continuePrimaryAction(), m_d, KisLiquifyProperties::maxSize(), KisLiquifyProperties::minSize(), KoPointerEvent::point, requestCursorOutlineUpdate(), KisTool::SampleBgImage, KisTool::SampleBgNode, KisTool::SampleFgImage, KisTool::SampleFgNode, KisTransformUtils::scaleFromAffineMatrix(), KisLiquifyProperties::setSize(), and KisLiquifyProperties::size().

◆ continuePrimaryAction()

void KisLiquifyTransformStrategy::continuePrimaryAction ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 157 of file kis_liquify_transform_strategy.cpp.

158{
159 m_d->lastDocPos = event->point;
160 m_d->helper.continuePaint(event);
161
162 // the updates should be compressed
163 m_d->recalculateOnNextRedraw = true;
164 Q_EMIT requestCanvasUpdate();
165}

References m_d, and requestCanvasUpdate().

◆ deactivateAlternateAction()

void KisLiquifyTransformStrategy::deactivateAlternateAction ( KisTool::AlternateAction action)
overridevirtual

◆ decreaseBrushSize()

void KisLiquifyTransformStrategy::decreaseBrushSize ( KoCanvasBase * canvas)
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 272 of file kis_liquify_transform_strategy.cpp.

273{
274 changeBrushSize(canvas, false);
275}
void changeBrushSize(KoCanvasBase *canvas, bool increase)

References changeBrushSize().

◆ endAlternateAction()

bool KisLiquifyTransformStrategy::endAlternateAction ( KoPointerEvent * event,
KisTool::AlternateAction action )
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 252 of file kis_liquify_transform_strategy.cpp.

253{
254 m_d->lastDocPos = event->point;
255
256 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
257 KisToolUtils::setCursorPos(m_d->startResizeGlobalCursorPos);
258 return true;
259 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
260 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
261 return endPrimaryAction(event);
262 }
263
264 return false;
265}
bool endPrimaryAction(KoPointerEvent *event) override
void KRITAUI_EXPORT setCursorPos(const QPoint &point)

References KisTool::ChangeSize, KisTool::ChangeSizeSnap, endPrimaryAction(), m_d, KisTool::SampleBgImage, KisTool::SampleBgNode, KisTool::SampleFgImage, KisTool::SampleFgNode, and KisToolUtils::setCursorPos().

◆ endPrimaryAction()

bool KisLiquifyTransformStrategy::endPrimaryAction ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 167 of file kis_liquify_transform_strategy.cpp.

168{
169 m_d->lastDocPos = event->point;
170 if (m_d->helper.endPaint(event)) {
171 m_d->recalculateTransformations();
172 Q_EMIT requestCanvasUpdate();
173 }
174
175 return true;
176}

References m_d, and requestCanvasUpdate().

◆ externalConfigChanged()

void KisLiquifyTransformStrategy::externalConfigChanged ( )
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 135 of file kis_liquify_transform_strategy.cpp.

136{
137 if (!m_d->currentArgs.liquifyWorker()) return;
138 m_d->recalculateTransformations();
139}

References m_d.

◆ getCurrentCursor()

QCursor KisLiquifyTransformStrategy::getCurrentCursor ( ) const
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 112 of file kis_liquify_transform_strategy.cpp.

113{
114 return Qt::BlankCursor;
115}

◆ getCursorOutline()

QPainterPath KisLiquifyTransformStrategy::getCursorOutline ( ) const
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 100 of file kis_liquify_transform_strategy.cpp.

101{
102 return m_d->helper.brushOutline(*m_d->currentArgs.liquifyProperties());
103}

References m_d.

◆ hoverActionCommon()

void KisLiquifyTransformStrategy::hoverActionCommon ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 178 of file kis_liquify_transform_strategy.cpp.

179{
180 m_d->lastDocPos = event->point;
181 m_d->helper.hoverPaint(event);
182}

References m_d.

◆ increaseBrushSize()

void KisLiquifyTransformStrategy::increaseBrushSize ( KoCanvasBase * canvas)
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 267 of file kis_liquify_transform_strategy.cpp.

268{
269 changeBrushSize(canvas, true);
270}

References changeBrushSize().

◆ paint()

void KisLiquifyTransformStrategy::paint ( QPainter & gc)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 117 of file kis_liquify_transform_strategy.cpp.

118{
119 // Draw preview image
120
121 if (m_d->recalculateOnNextRedraw) {
122 m_d->recalculateTransformations();
123 m_d->recalculateOnNextRedraw = false;
124 }
125
126 gc.save();
127
128 gc.setOpacity(m_d->transaction.basePreviewOpacity());
129 gc.setTransform(m_d->paintingTransform, true);
130 gc.drawImage(m_d->paintingOffset, m_d->transformedImage);
131
132 gc.restore();
133}

References m_d.

◆ requestCanvasUpdate

void KisLiquifyTransformStrategy::requestCanvasUpdate ( )
signal

◆ requestCursorOutlineUpdate

void KisLiquifyTransformStrategy::requestCursorOutlineUpdate ( const QPointF & imagePoint)
signal

◆ requestImageRecalculation

void KisLiquifyTransformStrategy::requestImageRecalculation ( )
signal

◆ requestUpdateOptionWidget

void KisLiquifyTransformStrategy::requestUpdateOptionWidget ( )
signal

◆ setTransformFunction()

void KisLiquifyTransformStrategy::setTransformFunction ( const QPointF & mousePos,
bool perspectiveModifierActive,
bool shiftModifierActive )

Definition at line 105 of file kis_liquify_transform_strategy.cpp.

106{
107 Q_UNUSED(mousePos);
108 Q_UNUSED(perspectiveModifierActive);
109 Q_UNUSED(shiftModifierActive);
110}

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisLiquifyTransformStrategy::m_d
private

Definition at line 66 of file kis_liquify_transform_strategy.h.


The documentation for this class was generated from the following files: