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
 
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
 
 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 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 82 of file kis_liquify_transform_strategy.cpp.

87 : m_d(new Private(this, converter, currentArgs, transaction, manager))
88{
89}
const QScopedPointer< Private > m_d

◆ ~KisLiquifyTransformStrategy()

KisLiquifyTransformStrategy::~KisLiquifyTransformStrategy ( )
override

Definition at line 91 of file kis_liquify_transform_strategy.cpp.

92{
93}

Member Function Documentation

◆ acceptsClicks()

bool KisLiquifyTransformStrategy::acceptsClicks ( ) const
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 136 of file kis_liquify_transform_strategy.cpp.

137{
138 return true;
139}

◆ activateAlternateAction()

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

◆ beginAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 197 of file kis_liquify_transform_strategy.cpp.

198{
199 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
200 QPointF widgetPoint = m_d->converter->documentToWidget(event->point);
201 m_d->lastMouseWidgetPos = widgetPoint;
202 m_d->startResizeImagePos = m_d->converter->documentToImage(event->point);
203 m_d->startResizeGlobalCursorPos = QCursor::pos();
204 return true;
205 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
206 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
207
208 return beginPrimaryAction(event);
209 }
210
211 return false;
212}
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 141 of file kis_liquify_transform_strategy.cpp.

142{
143 m_d->helper.configurePaintOp(*m_d->currentArgs.liquifyProperties(), m_d->currentArgs.liquifyWorker());
144 m_d->helper.startPaint(event, m_d->manager);
145
146 m_d->recalculateTransformations();
147
148 return true;
149}

References m_d.

◆ continueAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 214 of file kis_liquify_transform_strategy.cpp.

215{
216 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
217 QPointF widgetPoint = m_d->converter->documentToWidget(event->point);
218
219 QPointF diff = widgetPoint - m_d->lastMouseWidgetPos;
220
221 KisLiquifyProperties *props = m_d->currentArgs.liquifyProperties();
222 const qreal linearizedOffset = diff.x() / KisTransformUtils::scaleFromAffineMatrix(m_d->converter->imageToWidgetTransform());
223 const qreal newSize = qBound(props->minSize(), props->size() + linearizedOffset, props->maxSize());
224 if (action == KisTool::ChangeSizeSnap) {
225 props->setSize(floor(newSize));
226 } else {
227 props->setSize(newSize);
228 }
229 m_d->currentArgs.saveLiquifyTransformMode();
230
231 m_d->lastMouseWidgetPos = widgetPoint;
232
233 Q_EMIT requestCursorOutlineUpdate(m_d->startResizeImagePos);
234 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
235 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
236
237 return continuePrimaryAction(event);
238 }
239}
void continuePrimaryAction(KoPointerEvent *event) override
void requestCursorOutlineUpdate(const QPointF &imagePoint)
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 151 of file kis_liquify_transform_strategy.cpp.

152{
153 m_d->helper.continuePaint(event);
154
155 // the updates should be compressed
156 m_d->recalculateOnNextRedraw = true;
157 Q_EMIT requestCanvasUpdate();
158}

References m_d, and requestCanvasUpdate().

◆ deactivateAlternateAction()

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

◆ endAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 241 of file kis_liquify_transform_strategy.cpp.

242{
243 Q_UNUSED(event);
244
245 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
246 KisToolUtils::setCursorPos(m_d->startResizeGlobalCursorPos);
247 return true;
248 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
249 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
250 return endPrimaryAction(event);
251 }
252
253 return false;
254}
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 160 of file kis_liquify_transform_strategy.cpp.

161{
162 if (m_d->helper.endPaint(event)) {
163 m_d->recalculateTransformations();
164 Q_EMIT requestCanvasUpdate();
165 }
166
167 return true;
168}

References m_d, and requestCanvasUpdate().

◆ externalConfigChanged()

void KisLiquifyTransformStrategy::externalConfigChanged ( )
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 130 of file kis_liquify_transform_strategy.cpp.

131{
132 if (!m_d->currentArgs.liquifyWorker()) return;
133 m_d->recalculateTransformations();
134}

References m_d.

◆ getCurrentCursor()

QCursor KisLiquifyTransformStrategy::getCurrentCursor ( ) const
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 107 of file kis_liquify_transform_strategy.cpp.

108{
109 return Qt::BlankCursor;
110}

◆ getCursorOutline()

QPainterPath KisLiquifyTransformStrategy::getCursorOutline ( ) const
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 95 of file kis_liquify_transform_strategy.cpp.

96{
97 return m_d->helper.brushOutline(*m_d->currentArgs.liquifyProperties());
98}

References m_d.

◆ hoverActionCommon()

void KisLiquifyTransformStrategy::hoverActionCommon ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 170 of file kis_liquify_transform_strategy.cpp.

171{
172 m_d->helper.hoverPaint(event);
173}

References m_d.

◆ paint()

void KisLiquifyTransformStrategy::paint ( QPainter & gc)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 112 of file kis_liquify_transform_strategy.cpp.

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

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 100 of file kis_liquify_transform_strategy.cpp.

101{
102 Q_UNUSED(mousePos);
103 Q_UNUSED(perspectiveModifierActive);
104 Q_UNUSED(shiftModifierActive);
105}

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisLiquifyTransformStrategy::m_d
private

Definition at line 61 of file kis_liquify_transform_strategy.h.


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