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 externalConfigChanged ()=0
 
virtual QCursor getCurrentCursor () const =0
 
virtual QPainterPath getCursorOutline () const
 
 KisTransformStrategyBase ()
 
QImage originalImage () const
 
virtual void paint (QPainter &gc)=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 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 34 of file kis_simplified_action_policy_strategy.cpp.

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

◆ ~KisSimplifiedActionPolicyStrategy()

KisSimplifiedActionPolicyStrategy::~KisSimplifiedActionPolicyStrategy ( )
override

Definition at line 39 of file kis_simplified_action_policy_strategy.cpp.

40{
41}

Member Function Documentation

◆ activateAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 136 of file kis_simplified_action_policy_strategy.cpp.

137{
138 if (action == KisTool::ChangeSize) {
139 m_d->changeSizeModifierActive = true;
140 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode) {
141 m_d->anySamplerModifierActive = true;
142 m_d->sampleFromNodeModifierActive = true;
143 } else if (action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
144 m_d->anySamplerModifierActive = true;
145 m_d->sampleFromNodeModifierActive = false;
146 }
147
148 setTransformFunction(m_d->lastImagePos, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
149}
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 131 of file kis_simplified_action_policy_strategy.cpp.

132{
133 setTransformFunction(m_d->lastImagePos, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
134}

References m_d, and setTransformFunction().

◆ beginAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 163 of file kis_simplified_action_policy_strategy.cpp.

164{
165 Q_UNUSED(action);
166
167 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return false;
168
169 const QPointF pos = snapDocPoint(event->point, event->modifiers());
170 QPointF imagePos = m_d->converter->documentToImage(pos);
171 m_d->lastImagePos = imagePos;
172
173 return beginPrimaryAction(imagePos);
174}
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 65 of file kis_simplified_action_policy_strategy.cpp.

66{
67 const QPointF rawImagePoint = m_d->converter->documentToImage(event->point);
68 const QPointF snappedImagePoint = handleSnapPoint(rawImagePoint);
69
77 if (m_d->snapGuide && rawImagePoint != snappedImagePoint) {
78 QPointF imageOffset = snappedImagePoint - rawImagePoint;
79 m_d->dragOffset = m_d->converter->imageToDocument(imageOffset);
80 }
81
82 const QPointF pos = snapDocPoint(event->point, event->modifiers());
83
84 QPointF imagePos = m_d->converter->documentToImage(pos);
85 m_d->lastImagePos = imagePos;
86
87 return beginPrimaryAction(imagePos);
88}
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 176 of file kis_simplified_action_policy_strategy.cpp.

177{
178 Q_UNUSED(action);
179
180 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return;
181 const bool altIsActive = event->modifiers() & Qt::AltModifier;
182
183 const QPointF pos = snapDocPoint(event->point, event->modifiers());
184 QPointF imagePos = m_d->converter->documentToImage(pos);
185 m_d->lastImagePos = imagePos;
186
187 continuePrimaryAction(imagePos, m_d->changeSizeModifierActive, altIsActive);
188}
void continuePrimaryAction(KoPointerEvent *event) override

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

◆ continuePrimaryAction() [1/2]

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

◆ continuePrimaryAction() [2/2]

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 90 of file kis_simplified_action_policy_strategy.cpp.

91{
104 const bool shiftIsActive = event->modifiers() & Qt::ShiftModifier;
105 const bool altIsActive = event->modifiers() & Qt::AltModifier;
106
107 const QPointF pos = snapDocPoint(event->point, event->modifiers());
108 QPointF imagePos = m_d->converter->documentToImage(pos);
109 m_d->lastImagePos = imagePos;
110
111 return continuePrimaryAction(imagePos, shiftIsActive, altIsActive);
112}

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

◆ deactivateAlternateAction()

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

Reimplemented from KisTransformStrategyBase.

Definition at line 151 of file kis_simplified_action_policy_strategy.cpp.

152{
153 if (action == KisTool::ChangeSize) {
154 m_d->changeSizeModifierActive = false;
155 } else if (action == KisTool::SampleFgNode || action == KisTool::SampleBgNode ||
156 action == KisTool::SampleFgImage || action == KisTool::SampleBgImage) {
157
158 m_d->anySamplerModifierActive = false;
159 m_d->sampleFromNodeModifierActive = false;
160 }
161}

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 190 of file kis_simplified_action_policy_strategy.cpp.

191{
192 Q_UNUSED(action);
193
194 if (!m_d->changeSizeModifierActive && !m_d->anySamplerModifierActive) return false;
195
196 const QPointF pos = snapDocPoint(event->point, event->modifiers());
197 QPointF imagePos = m_d->converter->documentToImage(pos);
198 m_d->lastImagePos = imagePos;
199
200 return endPrimaryAction();
201}

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 122 of file kis_simplified_action_policy_strategy.cpp.

123{
124 const QPointF pos = snapDocPoint(event->point, event->modifiers());
125 QPointF imagePos = m_d->converter->documentToImage(pos);
126 m_d->lastImagePos = imagePos;
127
128 return endPrimaryAction();
129}

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

◆ handleSnapPoint()

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

Reimplemented in KisMeshTransformStrategy.

Definition at line 43 of file kis_simplified_action_policy_strategy.cpp.

44{
45 return imagePos;
46}

◆ hoverActionCommon() [1/2]

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

Definition at line 208 of file kis_simplified_action_policy_strategy.cpp.

209{
210 setTransformFunction(pt, m_d->anySamplerModifierActive && !m_d->sampleFromNodeModifierActive, m_d->changeSizeModifierActive, m_d->sampleFromNodeModifierActive);
211}

References m_d, and setTransformFunction().

◆ hoverActionCommon() [2/2]

void KisSimplifiedActionPolicyStrategy::hoverActionCommon ( KoPointerEvent * event)
overridevirtual

Implements KisTransformStrategyBase.

Definition at line 114 of file kis_simplified_action_policy_strategy.cpp.

115{
116 QPointF imagePos = m_d->converter->documentToImage(event->point);
117 m_d->lastImagePos = imagePos;
118
119 hoverActionCommon(imagePos);
120}
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 203 of file kis_simplified_action_policy_strategy.cpp.

204{
205 return false;
206}

◆ snapDocPoint()

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

Definition at line 48 of file kis_simplified_action_policy_strategy.cpp.

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

References m_d, and shiftModifierIsUsed().

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisSimplifiedActionPolicyStrategy::m_d
private

Definition at line 56 of file kis_simplified_action_policy_strategy.h.


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