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, const KoColorDisplayRendererInterface *displayRendererInterface) 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 142 of file kis_liquify_transform_strategy.cpp.

143{
144 return true;
145}

◆ activateAlternateAction()

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

◆ beginAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 207 of file kis_liquify_transform_strategy.cpp.

208{
209 m_d->lastDocPos = event->point;
210 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
211 QPointF widgetPoint = m_d->converter->documentToWidget(event->point);
212 m_d->lastMouseWidgetPos = widgetPoint;
213 m_d->startResizeImagePos = m_d->converter->documentToImage(event->point);
214 m_d->startResizeGlobalCursorPos = event->globalPos();
215 return true;
216 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
217 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
218
219 return beginPrimaryAction(event);
220 }
221
222 return false;
223}
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 147 of file kis_liquify_transform_strategy.cpp.

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

References m_d.

◆ changeBrushSize()

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

Definition at line 278 of file kis_liquify_transform_strategy.cpp.

279{
280 KisLiquifyProperties *props = m_d->currentArgs.liquifyProperties();
281 qreal oldSize = props->size();
282
283 int newSize;
284 if (increase) {
285 newSize = m_d->standardBrushSizes.increaseBrushSize(oldSize);
286 } else {
287 newSize = m_d->standardBrushSizes.decreaseBrushSize(oldSize);
288 }
289
290 props->setSize(newSize);
292 Q_EMIT requestCursorOutlineUpdate( m_d->converter->documentToImage(m_d->lastDocPos));
294}
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 225 of file kis_liquify_transform_strategy.cpp.

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

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

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

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

References changeBrushSize().

◆ endAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 253 of file kis_liquify_transform_strategy.cpp.

254{
255 m_d->lastDocPos = event->point;
256
257 if (action == KisTool::ChangeSize || action == KisTool::ChangeSizeSnap) {
258 KisToolUtils::setCursorPos(m_d->startResizeGlobalCursorPos);
259 return true;
260 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
261 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
262 return endPrimaryAction(event);
263 }
264
265 return false;
266}
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 168 of file kis_liquify_transform_strategy.cpp.

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

References m_d, and requestCanvasUpdate().

◆ externalConfigChanged()

void KisLiquifyTransformStrategy::externalConfigChanged ( )
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 136 of file kis_liquify_transform_strategy.cpp.

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

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

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

References m_d.

◆ increaseBrushSize()

void KisLiquifyTransformStrategy::increaseBrushSize ( KoCanvasBase * canvas)
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 268 of file kis_liquify_transform_strategy.cpp.

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

References changeBrushSize().

◆ paint()

void KisLiquifyTransformStrategy::paint ( QPainter & gc,
const KoColorDisplayRendererInterface * displayRendererInterface )
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 117 of file kis_liquify_transform_strategy.cpp.

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

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: