Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSimplifiedActionPolicyStrategy Class Referenceabstract

#include <kis_simplified_action_policy_strategy.h>

+ Inheritance diagram for KisSimplifiedActionPolicyStrategy:

Classes

struct  Private
 

Public Member Functions

void activateAlternateAction (KisTool::AlternateAction action) override
 
void activatePrimaryAction () 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
 
virtual QPointF handleSnapPoint (const QPointF &imagePos)
 
void hoverActionCommon (KoPointerEvent *event) override
 
 KisSimplifiedActionPolicyStrategy (const KisCoordinatesConverter *_converter, KoSnapGuide *snapGuide=0)
 
 ~KisSimplifiedActionPolicyStrategy () override
 
- Public Member Functions inherited from KisTransformStrategyBase
virtual bool acceptsClicks () const
 
virtual void deactivatePrimaryAction ()
 
virtual int decorationThickness () const
 
virtual void decreaseBrushSize (KoCanvasBase *canvas)
 
virtual void externalConfigChanged ()=0
 
virtual QCursor getCurrentCursor () const =0
 
virtual QPainterPath getCursorOutline () const
 
virtual void increaseBrushSize (KoCanvasBase *canvas)
 
 KisTransformStrategyBase ()
 
QImage originalImage () const
 
virtual void paint (QPainter &gc, const KoColorDisplayRendererInterface *displayRendererInterface)=0
 
virtual void setDecorationThickness (int thickness)
 
void setThumbnailImage (const QImage &image, QTransform thumbToImageTransform)
 
QTransform thumbToImageTransform () const
 
 ~KisTransformStrategyBase () override
 

Protected Member Functions

virtual bool beginPrimaryAction (const QPointF &pt)=0
 
virtual void continuePrimaryAction (const QPointF &pt, bool shiftModifierActive, bool altModifierActive)=0
 
virtual void continuePrimaryAction (const QPointF &pt, bool shiftModifierActive, bool altModifierActive, bool hasOriginalModifiersSet)
 
virtual bool endPrimaryAction ()=0
 
virtual void hoverActionCommon (const QPointF &pt)
 
virtual void setTransformFunction (const QPointF &mousePos, bool perspectiveModifierActive, bool shiftModifierActive, bool altModifierActive)=0
 
virtual bool shiftModifierIsUsed () const
 

Private Member Functions

QPointF snapDocPoint (const QPointF &point, Qt::KeyboardModifiers modifiers) const
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 19 of file kis_simplified_action_policy_strategy.h.

Constructor & Destructor Documentation

◆ KisSimplifiedActionPolicyStrategy()

KisSimplifiedActionPolicyStrategy::KisSimplifiedActionPolicyStrategy ( const KisCoordinatesConverter * _converter,
KoSnapGuide * snapGuide = 0 )

Definition at line 35 of file kis_simplified_action_policy_strategy.cpp.

36 : m_d(new Private(_converter, _snapGuide))
37{
38}

◆ ~KisSimplifiedActionPolicyStrategy()

KisSimplifiedActionPolicyStrategy::~KisSimplifiedActionPolicyStrategy ( )
override

Definition at line 40 of file kis_simplified_action_policy_strategy.cpp.

41{
42}

Member Function Documentation

◆ activateAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 145 of file kis_simplified_action_policy_strategy.cpp.

146{
147 if (action == KisTool::ChangeSize) {
148 m_d->changeSizeModifierActive = true;
149 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode) {
150 m_d->anySamplerModifierActive = true;
151 m_d->sampleFromNodeModifierActive = true;
152 } else if (action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
153 m_d->anySamplerModifierActive = true;
154 m_d->sampleFromNodeModifierActive = false;
155 }
156
157 setTransformFunction(m_d->lastImagePos, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
158}
virtual void setTransformFunction(const QPointF &mousePos, bool perspectiveModifierActive, bool shiftModifierActive, bool altModifierActive)=0
@ SampleFgImage
Definition kis_tool.h:139
@ SampleFgNode
Definition kis_tool.h:137
@ SampleBgImage
Definition kis_tool.h:140
@ SampleBgNode
Definition kis_tool.h:138
@ ChangeSize
Definition kis_tool.h:135

References KisTool::ChangeSize, m_d, KisTool::SampleBgImage, KisTool::SampleBgNode, KisTool::SampleFgImage, KisTool::SampleFgNode, and setTransformFunction().

◆ activatePrimaryAction()

void KisSimplifiedActionPolicyStrategy::activatePrimaryAction ( )
overridevirtual

Reimplemented from KisTransformStrategyBase.

Definition at line 140 of file kis_simplified_action_policy_strategy.cpp.

141{
142 setTransformFunction(m_d->lastImagePos, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
143}

References m_d, and setTransformFunction().

◆ beginAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 172 of file kis_simplified_action_policy_strategy.cpp.

173{
174 Q_UNUSED(action);
175
176 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return false;
177
178 const QPointF pos = snapDocPoint(event->point, event->modifiers());
179 QPointF imagePos = m_d->converter->documentToImage(pos);
180 m_d->lastImagePos = imagePos;
181
182 m_d->modifiersAtStart = event->modifiers();
183
184 return beginPrimaryAction(imagePos);
185}
bool beginPrimaryAction(KoPointerEvent *event) override
QPointF snapDocPoint(const QPointF &point, Qt::KeyboardModifiers modifiers) const
Qt::KeyboardModifiers modifiers() const
QPointF point
The point in document coordinates.

References beginPrimaryAction(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ beginPrimaryAction() [1/2]

virtual bool KisSimplifiedActionPolicyStrategy::beginPrimaryAction ( const QPointF & pt)
protectedpure virtual

◆ beginPrimaryAction() [2/2]

bool KisSimplifiedActionPolicyStrategy::beginPrimaryAction ( KoPointerEvent * event)
overridevirtual

Note: Snapping with Offset is not yet used in the transform strategies. When the user starts an action, we just move the handle to the mouse position, even if it was positioned with an offset. That is not what we do in Crop Tool.

Implements KisTransformStrategyBase.

Reimplemented in KisWarpTransformStrategy.

Definition at line 66 of file kis_simplified_action_policy_strategy.cpp.

67{
68 const QPointF rawImagePoint = m_d->converter->documentToImage(event->point);
69 const QPointF snappedImagePoint = handleSnapPoint(rawImagePoint);
70
78 if (m_d->snapGuide && rawImagePoint != snappedImagePoint) {
79 QPointF imageOffset = snappedImagePoint - rawImagePoint;
80 m_d->dragOffset = m_d->converter->imageToDocument(imageOffset);
81 }
82
83 const QPointF pos = snapDocPoint(event->point, event->modifiers());
84
85 QPointF imagePos = m_d->converter->documentToImage(pos);
86 m_d->lastImagePos = imagePos;
87
88 m_d->modifiersAtStart = event->modifiers();
89
90 return beginPrimaryAction(imagePos);
91}
virtual QPointF handleSnapPoint(const QPointF &imagePos)

References beginPrimaryAction(), handleSnapPoint(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ continueAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 187 of file kis_simplified_action_policy_strategy.cpp.

188{
189 Q_UNUSED(action);
190
191 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return;
192 const bool altIsActive = event->modifiers() & Qt::AltModifier;
193
194 const QPointF pos = snapDocPoint(event->point, event->modifiers());
195 QPointF imagePos = m_d->converter->documentToImage(pos);
196 m_d->lastImagePos = imagePos;
197
198 continuePrimaryAction(imagePos, m_d->changeSizeModifierActive, altIsActive, m_d->modifiersAtStart == event->modifiers());
199}
void continuePrimaryAction(KoPointerEvent *event) override

References continuePrimaryAction(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ continuePrimaryAction() [1/3]

virtual void KisSimplifiedActionPolicyStrategy::continuePrimaryAction ( const QPointF & pt,
bool shiftModifierActive,
bool altModifierActive )
protectedpure virtual

◆ continuePrimaryAction() [2/3]

void KisSimplifiedActionPolicyStrategy::continuePrimaryAction ( const QPointF & pt,
bool shiftModifierActive,
bool altModifierActive,
bool hasOriginalModifiersSet )
protectedvirtual

Reimplemented in KisMeshTransformStrategy, and KisFreeTransformStrategy.

Definition at line 117 of file kis_simplified_action_policy_strategy.cpp.

118{
119 Q_UNUSED(hasOriginalModifiersSet);
120 continuePrimaryAction(imagePos, shiftModifierActive, altModifierActive);
121}

References continuePrimaryAction().

◆ continuePrimaryAction() [3/3]

void KisSimplifiedActionPolicyStrategy::continuePrimaryAction ( KoPointerEvent * event)
overridevirtual

HACK ALERT!

Here we explicitly check for Shift key pressed! The choice of the stroke type is usually done before the tablet press, but for some actions like constrain proportions we should be able to activate it even after the stroke has been started. For now, KisShortcutMatcher does not support it, so just hardcode this special case.

See bug 340496

Implements KisTransformStrategyBase.

Reimplemented in KisWarpTransformStrategy.

Definition at line 93 of file kis_simplified_action_policy_strategy.cpp.

94{
107 const bool shiftIsActive = event->modifiers() & Qt::ShiftModifier;
108 const bool altIsActive = event->modifiers() & Qt::AltModifier;
109
110 const QPointF pos = snapDocPoint(event->point, event->modifiers());
111 QPointF imagePos = m_d->converter->documentToImage(pos);
112 m_d->lastImagePos = imagePos;
113
114 continuePrimaryAction(imagePos, shiftIsActive, altIsActive, m_d->modifiersAtStart == event->modifiers());
115}

References continuePrimaryAction(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ deactivateAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 160 of file kis_simplified_action_policy_strategy.cpp.

161{
162 if (action == KisTool::ChangeSize) {
163 m_d->changeSizeModifierActive = false;
164 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
165 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
166
167 m_d->anySamplerModifierActive = false;
168 m_d->sampleFromNodeModifierActive = false;
169 }
170}

References KisTool::ChangeSize, m_d, KisTool::SampleBgImage, KisTool::SampleBgNode, KisTool::SampleFgImage, and KisTool::SampleFgNode.

◆ endAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 201 of file kis_simplified_action_policy_strategy.cpp.

202{
203 Q_UNUSED(action);
204
205 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return false;
206
207 const QPointF pos = snapDocPoint(event->point, event->modifiers());
208 QPointF imagePos = m_d->converter->documentToImage(pos);
209 m_d->lastImagePos = imagePos;
210
211 return endPrimaryAction();
212}

References endPrimaryAction(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ endPrimaryAction() [1/2]

virtual bool KisSimplifiedActionPolicyStrategy::endPrimaryAction ( )
protectedpure virtual

◆ endPrimaryAction() [2/2]

bool KisSimplifiedActionPolicyStrategy::endPrimaryAction ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Reimplemented in KisWarpTransformStrategy.

Definition at line 131 of file kis_simplified_action_policy_strategy.cpp.

132{
133 const QPointF pos = snapDocPoint(event->point, event->modifiers());
134 QPointF imagePos = m_d->converter->documentToImage(pos);
135 m_d->lastImagePos = imagePos;
136
137 return endPrimaryAction();
138}

References endPrimaryAction(), m_d, KoPointerEvent::modifiers(), KoPointerEvent::point, and snapDocPoint().

◆ handleSnapPoint()

QPointF KisSimplifiedActionPolicyStrategy::handleSnapPoint ( const QPointF & imagePos)
virtual

Reimplemented in KisMeshTransformStrategy.

Definition at line 44 of file kis_simplified_action_policy_strategy.cpp.

45{
46 return imagePos;
47}

◆ hoverActionCommon() [1/2]

void KisSimplifiedActionPolicyStrategy::hoverActionCommon ( const QPointF & pt)
protectedvirtual

Definition at line 219 of file kis_simplified_action_policy_strategy.cpp.

220{
221 setTransformFunction(pt, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
222}

References m_d, and setTransformFunction().

◆ hoverActionCommon() [2/2]

void KisSimplifiedActionPolicyStrategy::hoverActionCommon ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 123 of file kis_simplified_action_policy_strategy.cpp.

124{
125 QPointF imagePos = m_d->converter->documentToImage(event->point);
126 m_d->lastImagePos = imagePos;
127
128 hoverActionCommon(imagePos);
129}
void hoverActionCommon(KoPointerEvent *event) override

References hoverActionCommon(), m_d, and KoPointerEvent::point.

◆ setTransformFunction()

virtual void KisSimplifiedActionPolicyStrategy::setTransformFunction ( const QPointF & mousePos,
bool perspectiveModifierActive,
bool shiftModifierActive,
bool altModifierActive )
protectedpure virtual

◆ shiftModifierIsUsed()

bool KisSimplifiedActionPolicyStrategy::shiftModifierIsUsed ( ) const
protectedvirtual

Reimplemented in KisFreeTransformStrategy, and KisMeshTransformStrategy.

Definition at line 214 of file kis_simplified_action_policy_strategy.cpp.

215{
216 return false;
217}

◆ snapDocPoint()

QPointF KisSimplifiedActionPolicyStrategy::snapDocPoint ( const QPointF & point,
Qt::KeyboardModifiers modifiers ) const
private

Definition at line 49 of file kis_simplified_action_policy_strategy.cpp.

50{
51 QPointF pos = point;
52
53 if (m_d->snapGuide) {
54 Qt::KeyboardModifiers modifiersForSnapping = modifiers;
55
56 if (shiftModifierIsUsed()) {
57 modifiersForSnapping.setFlag(Qt::ShiftModifier, false);
58 }
59
60 pos = m_d->snapGuide->snap(point, m_d->dragOffset, modifiersForSnapping);
61 }
62
63 return pos;
64}

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisSimplifiedActionPolicyStrategy::m_d
private

Definition at line 57 of file kis_simplified_action_policy_strategy.h.


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