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

#include <move_selection_stroke_strategy.h>

+ Inheritance diagram for MoveSelectionStrokeStrategy:

Classes

struct  ShowSelectionData
 

Signals

void sigHandlesRectCalculated (const QRect &handlesRect)
 
void sigStrokeStartedEmpty ()
 

Public Member Functions

void cancelStrokeCallback () override
 
void doStrokeCallback (KisStrokeJobData *data) override
 
void finishStrokeCallback () override
 
void initStrokeCallback () override
 
 MoveSelectionStrokeStrategy (KisPaintLayerSP paintLayer, KisSelectionSP selection, KisUpdatesFacade *updatesFacade, KisStrokeUndoFacade *undoFacade)
 
- Public Member Functions inherited from KisStrokeStrategyUndoCommandBased
 KisStrokeStrategyUndoCommandBased (const KUndo2MagicString &name, bool undo, KisStrokeUndoFacade *undoFacade, KUndo2CommandSP initCommand=KUndo2CommandSP(0), KUndo2CommandSP finishCommand=KUndo2CommandSP(0))
 
void setCommandExtraData (KUndo2CommandExtraData *data)
 
void setMacroId (int value)
 
void setSupportsWrapAroundMode (bool value)
 
void setUsedWhileUndoRedo (bool value)
 
- Public Member Functions inherited from KisRunnableBasedStrokeStrategy
 KisRunnableBasedStrokeStrategy (const KisRunnableBasedStrokeStrategy &rhs)
 
 KisRunnableBasedStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KisRunnableStrokeJobsInterfacerunnableJobsInterface () const
 
 ~KisRunnableBasedStrokeStrategy ()
 
- Public Member Functions inherited from KisSimpleStrokeStrategy
KisStrokeJobDatacreateCancelData () override
 
KisStrokeJobStrategycreateCancelStrategy () override
 
KisStrokeJobStrategycreateDabStrategy () override
 
KisStrokeJobDatacreateFinishData () override
 
KisStrokeJobStrategycreateFinishStrategy () override
 
KisStrokeJobDatacreateInitData () override
 
KisStrokeJobStrategycreateInitStrategy () override
 
KisStrokeJobDatacreateResumeData () override
 
KisStrokeJobStrategycreateResumeStrategy () override
 
KisStrokeJobDatacreateSuspendData () override
 
KisStrokeJobStrategycreateSuspendStrategy () override
 
 KisSimpleStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
virtual void resumeStrokeCallback ()
 
virtual void suspendStrokeCallback ()
 
- Public Member Functions inherited from KisStrokeStrategy
qreal balancingRatioOverride () const
 
bool canForgetAboutMe () const
 
bool clearsRedoOnStart () const
 
KisLodPreferences currentLodPreferences () const
 
bool forceLodModeIfPossible () const
 
QString id () const
 
bool isAsynchronouslyCancellable () const
 
bool isExclusive () const
 
 KisStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KUndo2MagicString name () const
 
bool needsExplicitCancel () const
 
virtual void notifyUserEndedStroke ()
 
virtual void notifyUserStartedStroke ()
 
bool requestsOtherStrokesToEnd () const
 
void setForceLodModeIfPossible (bool forceLodModeIfPossible)
 
void setMutatedJobsInterface (KisStrokesQueueMutatedJobInterface *mutatedJobsInterface, KisStrokeId strokeId)
 
bool supportsWrapAroundMode () const
 
virtual void tryCancelCurrentStrokeJobAsync ()
 tryCancelCurrentStrokeJobAsync is called by the strokes queue when the stroke is being cancelled. The stroke strategy may or may not handle this request and cancel the currently running long action.
 
virtual ~KisStrokeStrategy ()
 

Private Member Functions

KisStrokeStrategycreateLodClone (int levelOfDetail) override
 
 MoveSelectionStrokeStrategy (const MoveSelectionStrokeStrategy &rhs)
 

Private Attributes

QPoint m_finalOffset
 
QPoint m_initialDeviceOffset
 
QPoint m_initialSelectionOffset
 
KisPaintLayerSP m_paintLayer
 
KisSelectionSP m_selection
 
KisUpdatesFacadem_updatesFacade
 

Additional Inherited Members

- Public Types inherited from KisSimpleStrokeStrategy
enum  JobType {
  JOB_INIT = 0 , JOB_CANCEL , JOB_FINISH , JOB_DOSTROKE ,
  JOB_SUSPEND , JOB_RESUME , NJOBS
}
 
- Static Public Member Functions inherited from KisSimpleStrokeStrategy
static QLatin1String jobTypeToString (JobType type)
 
- Protected Member Functions inherited from KisStrokeStrategyUndoCommandBased
void cancelStrokeCallbackImpl (QVector< KisStrokeJobData * > &mutatedJobs)
 
void executeCommand (KUndo2CommandSP command, bool undo)
 
 KisStrokeStrategyUndoCommandBased (const KisStrokeStrategyUndoCommandBased &rhs)
 
void notifyCommandDone (KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality, KisStrokeJobData::Exclusivity exclusivity)
 
virtual void postProcessToplevelCommand (KUndo2Command *command)
 Applies some modifications (e.g. assigning extra data) to the toplevel command.
 
void runAndSaveCommand (KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality, KisStrokeJobData::Exclusivity exclusivity)
 
KisStrokeUndoFacadeundoFacade () const
 
- Protected Member Functions inherited from KisSimpleStrokeStrategy
void enableJob (JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
 
 KisSimpleStrokeStrategy (const KisSimpleStrokeStrategy &rhs)
 
- Protected Member Functions inherited from KisStrokeStrategy
void addMutatedJob (KisStrokeJobData *data)
 
void addMutatedJobs (const QVector< KisStrokeJobData * > list)
 
 KisStrokeStrategy (const KisStrokeStrategy &rhs)
 
void setAsynchronouslyCancellable (bool value)
 
void setBalancingRatioOverride (qreal value)
 
void setCanForgetAboutMe (bool value)
 
void setClearsRedoOnStart (bool value)
 
void setExclusive (bool value)
 
void setNeedsExplicitCancel (bool value)
 
void setRequestsOtherStrokesToEnd (bool value)
 
void setSupportsWrapAroundMode (bool value)
 

Detailed Description

Definition at line 19 of file move_selection_stroke_strategy.h.

Constructor & Destructor Documentation

◆ MoveSelectionStrokeStrategy() [1/2]

MoveSelectionStrokeStrategy::MoveSelectionStrokeStrategy ( KisPaintLayerSP paintLayer,
KisSelectionSP selection,
KisUpdatesFacade * updatesFacade,
KisStrokeUndoFacade * undoFacade )

Selection might have some update projection jobs pending, so we should ensure all of them are completed before we start our stroke.

Definition at line 25 of file move_selection_stroke_strategy.cpp.

29 : KisStrokeStrategyUndoCommandBased(kundo2_i18n("Move Selection"), false, undoFacade),
30 m_paintLayer(paintLayer),
31 m_selection(selection),
32 m_updatesFacade(updatesFacade)
33{
41}
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
KisStrokeStrategyUndoCommandBased(const KUndo2MagicString &name, bool undo, KisStrokeUndoFacade *undoFacade, KUndo2CommandSP initCommand=KUndo2CommandSP(0), KUndo2CommandSP finishCommand=KUndo2CommandSP(0))
KUndo2MagicString kundo2_i18n(const char *text)

References KisStrokeJobData::BARRIER, KisSimpleStrokeStrategy::enableJob(), KisSimpleStrokeStrategy::JOB_CANCEL, KisSimpleStrokeStrategy::JOB_FINISH, and KisSimpleStrokeStrategy::JOB_INIT.

◆ MoveSelectionStrokeStrategy() [2/2]

MoveSelectionStrokeStrategy::MoveSelectionStrokeStrategy ( const MoveSelectionStrokeStrategy & rhs)
private

Definition at line 43 of file move_selection_stroke_strategy.cpp.

Member Function Documentation

◆ cancelStrokeCallback()

void MoveSelectionStrokeStrategy::cancelStrokeCallback ( )
overridevirtual

Reimplemented from KisStrokeStrategyUndoCommandBased.

Definition at line 138 of file move_selection_stroke_strategy.cpp.

139{
142
143 if (indirect) {
144 KisPaintDeviceSP t = indirect->temporaryTarget();
145 if (t) {
146 KisRegion dirtyRegion = t->region();
147
148 indirect->setTemporaryTarget(0);
149
150 m_paintLayer->setDirty(dirtyRegion);
151
154 m_selection->setVisible(true);
156 }
157 }
159}
KisRegion region() const
virtual void setDirty()
Definition kis_node.cpp:577
void setX(qint32 x)
void notifySelectionChanged()
void setY(qint32 y)
void setVisible(bool visible)

References KisStrokeStrategyUndoCommandBased::cancelStrokeCallback(), KisSharedPtr< T >::data(), m_initialSelectionOffset, m_paintLayer, m_selection, KisSelection::notifySelectionChanged(), KisPaintDevice::region(), KisNode::setDirty(), KisIndirectPaintingSupport::setTemporaryTarget(), KisSelection::setVisible(), KisSelection::setX(), KisSelection::setY(), and KisIndirectPaintingSupport::temporaryTarget.

◆ createLodClone()

KisStrokeStrategy * MoveSelectionStrokeStrategy::createLodClone ( int levelOfDetail)
overrideprivatevirtual

Reimplemented from KisStrokeStrategy.

Definition at line 201 of file move_selection_stroke_strategy.cpp.

202{
203 Q_UNUSED(levelOfDetail);
204
205 // Vector selections don't support lod-moves
206 if (m_selection->hasShapeSelection()) return 0;
207
209 connect(clone, SIGNAL(sigHandlesRectCalculated(QRect)), this, SIGNAL(sigHandlesRectCalculated(QRect)));
210 return clone;
211}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
MoveSelectionStrokeStrategy(KisPaintLayerSP paintLayer, KisSelectionSP selection, KisUpdatesFacade *updatesFacade, KisStrokeUndoFacade *undoFacade)
void sigHandlesRectCalculated(const QRect &handlesRect)
bool hasShapeSelection() const

References connect(), KisSelection::hasShapeSelection(), m_selection, MoveSelectionStrokeStrategy(), and sigHandlesRectCalculated().

◆ doStrokeCallback()

void MoveSelectionStrokeStrategy::doStrokeCallback ( KisStrokeJobData * data)
overridevirtual

Reimplemented from KisStrokeStrategyUndoCommandBased.

Definition at line 163 of file move_selection_stroke_strategy.cpp.

164{
166 ShowSelectionData *ssd = dynamic_cast<ShowSelectionData*>(data);
167
168 if (d) {
171
172 KisPaintDeviceSP movedDevice = indirect->temporaryTarget();
173
174 QRegion dirtyRegion = movedDevice->region().toQRegion();
175
176 QPoint currentDeviceOffset(movedDevice->x(), movedDevice->y());
177 QPoint newDeviceOffset(m_initialDeviceOffset + d->offset);
178
179 dirtyRegion |= dirtyRegion.translated(newDeviceOffset - currentDeviceOffset);
180
181 movedDevice->setX(newDeviceOffset.x());
182 movedDevice->setY(newDeviceOffset.y());
183 m_finalOffset = d->offset;
184
186
187 m_selection->setX((m_initialSelectionOffset + d->offset).x());
188 m_selection->setY((m_initialSelectionOffset + d->offset).y());
189
190 if (m_selection->isVisible()) {
192 }
193
194 } else if (ssd) {
195 m_selection->setVisible(ssd->showSelection);
196 } else {
198 }
199}
void setX(qint32 x)
void setY(qint32 y)
static KisRegion fromQRegion(const QRegion &region)
QRegion toQRegion() const
void doStrokeCallback(KisStrokeJobData *data) override

References KisSharedPtr< T >::data(), KisStrokeStrategyUndoCommandBased::doStrokeCallback(), KisRegion::fromQRegion(), KisSelection::isVisible, m_finalOffset, m_initialDeviceOffset, m_initialSelectionOffset, m_paintLayer, m_selection, KisSelection::notifySelectionChanged(), KisPaintDevice::region(), KisNode::setDirty(), KisSelection::setVisible(), KisPaintDevice::setX(), KisSelection::setX(), KisPaintDevice::setY(), KisSelection::setY(), MoveSelectionStrokeStrategy::ShowSelectionData::showSelection, KisIndirectPaintingSupport::temporaryTarget, KisRegion::toQRegion(), KisPaintDevice::x(), and KisPaintDevice::y().

◆ finishStrokeCallback()

void MoveSelectionStrokeStrategy::finishStrokeCallback ( )
overridevirtual

Reimplemented from KisStrokeStrategyUndoCommandBased.

Definition at line 104 of file move_selection_stroke_strategy.cpp.

105{
108
109 KUndo2CommandSP parentCommand(new KUndo2Command());
110
111 indirect->mergeToLayer(m_paintLayer, parentCommand.data(), name(), -1);
112
113 runAndSaveCommand(parentCommand,
116
117 indirect->setTemporaryTarget(0);
118
120
121 KUndo2CommandSP moveSelectionCommand(
125
127 moveSelectionCommand,
130
132
133 m_selection->setVisible(true);
134
136}
void runAndSaveCommand(KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality, KisStrokeJobData::Exclusivity exclusivity)
KUndo2MagicString name() const
virtual void blockUpdates()=0
virtual void unblockUpdates()=0
void mergeToLayer(KisNodeSP layer, KUndo2Command *parentCommand, const KUndo2MagicString &transactionText, int timedID)

References KisUpdatesFacade::blockUpdates(), KisSharedPtr< T >::data(), KisStrokeJobData::EXCLUSIVE, KisStrokeStrategyUndoCommandBased::finishStrokeCallback(), m_finalOffset, m_initialSelectionOffset, m_paintLayer, m_selection, m_updatesFacade, KisIndirectPaintingSupport::mergeToLayer(), KisStrokeStrategy::name(), KisStrokeJobData::NORMAL, KisStrokeStrategyUndoCommandBased::runAndSaveCommand(), KisStrokeJobData::SEQUENTIAL, KisIndirectPaintingSupport::setTemporaryTarget(), KisSelection::setVisible(), and KisUpdatesFacade::unblockUpdates().

◆ initStrokeCallback()

void MoveSelectionStrokeStrategy::initStrokeCallback ( )
overridevirtual

Reimplemented from KisStrokeStrategyUndoCommandBased.

Definition at line 52 of file move_selection_stroke_strategy.cpp.

53{
55
57
58 KisPaintDeviceSP movedDevice = new KisPaintDevice(m_paintLayer.data(), paintDevice->colorSpace());
59
60 KUndo2Command *autoKeyframeCommand =
63 if (autoKeyframeCommand) {
65 }
66
67 QRect copyRect = m_selection->selectedRect();
68 KisPainter gc(movedDevice);
69 gc.setSelection(m_selection);
70 gc.bitBlt(copyRect.topLeft(), paintDevice, copyRect);
71 gc.end();
72
73 KisTransaction cutTransaction(name(), paintDevice);
74 paintDevice->clearSelection(m_selection);
75 runAndSaveCommand(KUndo2CommandSP(cutTransaction.endAndTake()),
78
81 indirect->setTemporaryTarget(movedDevice);
84 indirect->setTemporarySelection(0);
85 indirect->setTemporaryChannelFlags(QBitArray());
86
87 m_initialDeviceOffset = QPoint(movedDevice->x(), movedDevice->y());
89
90 {
91 QRect handlesRect = movedDevice->exactBounds();
92 KisLodTransform t(paintDevice);
93 handlesRect = t.mapInverted(handlesRect);
94
95 if (!handlesRect.isEmpty()) {
96 Q_EMIT this->sigHandlesRectCalculated(handlesRect);
97 } else {
98 Q_EMIT this->sigStrokeStartedEmpty();
99 }
100
101 }
102}
const qreal OPACITY_OPAQUE_F
const QString COMPOSITE_OVER
QRect exactBounds() const
const KoColorSpace * colorSpace() const
void clearSelection(KisSelectionSP selection)
QSharedPointer< T > toQShared(T *ptr)
QSharedPointer< KUndo2Command > KUndo2CommandSP
Definition kis_types.h:262
KUndo2Command * tryAutoCreateDuplicatedFrame(KisPaintDeviceSP device, AutoCreateKeyframeFlags flags)
create a new duplicated keyframe if auto-keyframe mode is on
void setTemporaryChannelFlags(const QBitArray &channelFlags)
void setTemporarySelection(KisSelectionSP selection)
void setTemporaryCompositeOp(const QString &id)
KisPaintDeviceSP paintDevice
qint32 x() const
QRect selectedRect() const
qint32 y() const

References KisStrokeJobData::BARRIER, KisPainter::bitBlt(), KisPaintDevice::clearSelection(), KisPaintDevice::colorSpace(), COMPOSITE_OVER, KisSharedPtr< T >::data(), KisPainter::end(), KisTransaction::endAndTake(), KisPaintDevice::exactBounds(), KisStrokeStrategyUndoCommandBased::initStrokeCallback(), m_initialDeviceOffset, m_initialSelectionOffset, m_paintLayer, m_selection, KisLodTransformBase::mapInverted(), KisStrokeStrategy::name(), KisStrokeJobData::NORMAL, OPACITY_OPAQUE_F, KisPaintLayer::paintDevice, KisStrokeStrategyUndoCommandBased::runAndSaveCommand(), KisSelection::selectedRect(), KisStrokeJobData::SEQUENTIAL, KisPainter::setSelection(), KisIndirectPaintingSupport::setTemporaryChannelFlags(), KisIndirectPaintingSupport::setTemporaryCompositeOp(), KisIndirectPaintingSupport::setTemporaryOpacity(), KisIndirectPaintingSupport::setTemporarySelection(), KisIndirectPaintingSupport::setTemporaryTarget(), sigHandlesRectCalculated(), sigStrokeStartedEmpty(), KisAutoKey::SupportsLod, toQShared(), KisAutoKey::tryAutoCreateDuplicatedFrame(), KisPaintDevice::x(), KisSelection::x(), KisPaintDevice::y(), and KisSelection::y().

◆ sigHandlesRectCalculated

void MoveSelectionStrokeStrategy::sigHandlesRectCalculated ( const QRect & handlesRect)
signal

◆ sigStrokeStartedEmpty

void MoveSelectionStrokeStrategy::sigStrokeStartedEmpty ( )
signal

Member Data Documentation

◆ m_finalOffset

QPoint MoveSelectionStrokeStrategy::m_finalOffset
private

Definition at line 63 of file move_selection_stroke_strategy.h.

◆ m_initialDeviceOffset

QPoint MoveSelectionStrokeStrategy::m_initialDeviceOffset
private

Definition at line 64 of file move_selection_stroke_strategy.h.

◆ m_initialSelectionOffset

QPoint MoveSelectionStrokeStrategy::m_initialSelectionOffset
private

Definition at line 65 of file move_selection_stroke_strategy.h.

◆ m_paintLayer

KisPaintLayerSP MoveSelectionStrokeStrategy::m_paintLayer
private

Definition at line 60 of file move_selection_stroke_strategy.h.

◆ m_selection

KisSelectionSP MoveSelectionStrokeStrategy::m_selection
private

Definition at line 61 of file move_selection_stroke_strategy.h.

◆ m_updatesFacade

KisUpdatesFacade* MoveSelectionStrokeStrategy::m_updatesFacade
private

Definition at line 62 of file move_selection_stroke_strategy.h.


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