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

#include <kis_stroke_strategy_undo_command_based.h>

+ Inheritance diagram for KisStrokeStrategyUndoCommandBased:

Classes

class  Data
 
struct  MutatedCommandInterface
 

Public Member Functions

void cancelStrokeCallback () override
 
void doStrokeCallback (KisStrokeJobData *data) override
 
void finishStrokeCallback () override
 
void initStrokeCallback () override
 
 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
 
virtual KisStrokeStrategycreateLodClone (int levelOfDetail)
 
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 ()
 

Protected Member Functions

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)
 

Private Attributes

QScopedPointer< KUndo2CommandExtraDatam_commandExtraData
 
KUndo2CommandSP m_finishCommand
 
KUndo2CommandSP m_initCommand
 
KisSavedMacroCommandm_macroCommand {nullptr}
 
int m_macroId
 
QMutex m_mutex
 
bool m_undo
 
KisStrokeUndoFacadem_undoFacade {nullptr}
 

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)
 

Detailed Description

Definition at line 25 of file kis_stroke_strategy_undo_command_based.h.

Constructor & Destructor Documentation

◆ KisStrokeStrategyUndoCommandBased() [1/2]

KisStrokeStrategyUndoCommandBased::KisStrokeStrategyUndoCommandBased ( const KUndo2MagicString & name,
bool undo,
KisStrokeUndoFacade * undoFacade,
KUndo2CommandSP initCommand = KUndo2CommandSP(0),
KUndo2CommandSP finishCommand = KUndo2CommandSP(0) )

Definition at line 20 of file kis_stroke_strategy_undo_command_based.cpp.

26 : KisRunnableBasedStrokeStrategy(QLatin1String("STROKE_UNDO_COMMAND_BASED"), name),
27 m_undo(undo),
28 m_initCommand(initCommand),
29 m_finishCommand(finishCommand),
31 m_macroId(-1),
33{
38}
KisRunnableBasedStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
KUndo2MagicString name() const

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

◆ KisStrokeStrategyUndoCommandBased() [2/2]

KisStrokeStrategyUndoCommandBased::KisStrokeStrategyUndoCommandBased ( const KisStrokeStrategyUndoCommandBased & rhs)
protected

Definition at line 40 of file kis_stroke_strategy_undo_command_based.cpp.

43 m_undo(false),
48{
50 !rhs.m_undo &&
51 "After the stroke has been started, no copying must happen");
52}
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97

References KIS_ASSERT_RECOVER_NOOP, m_macroCommand, and m_undo.

Member Function Documentation

◆ cancelStrokeCallback()

void KisStrokeStrategyUndoCommandBased::cancelStrokeCallback ( )
overridevirtual

◆ cancelStrokeCallbackImpl()

void KisStrokeStrategyUndoCommandBased::cancelStrokeCallbackImpl ( QVector< KisStrokeJobData * > & mutatedJobs)
protected

Definition at line 110 of file kis_stroke_strategy_undo_command_based.cpp.

111{
112 QMutexLocker locker(&m_mutex);
113 if(m_macroCommand) {
115
116 delete m_macroCommand;
117 m_macroCommand = 0;
118 }
119}
void getCommandExecutionJobs(QVector< KisStrokeJobData * > *jobs, bool undo, bool shouldGoToHistory=true) const

References KisSavedMacroCommand::getCommandExecutionJobs(), m_macroCommand, m_mutex, and m_undo.

◆ doStrokeCallback()

void KisStrokeStrategyUndoCommandBased::doStrokeCallback ( KisStrokeJobData * data)
overridevirtual

Reimplemented from KisRunnableBasedStrokeStrategy.

Reimplemented in MoveStrokeStrategy, MoveSelectionStrokeStrategy, and TransformStrokeStrategy.

Definition at line 121 of file kis_stroke_strategy_undo_command_based.cpp.

122{
123 Data *d = dynamic_cast<Data*>(data);
124
125 if (d) {
126 executeCommand(d->command, d->undo);
127 if (d->shouldGoToHistory) {
128 notifyCommandDone(d->command,
129 d->sequentiality(),
130 d->exclusivity());
131 }
132 } else {
134 }
135
136}
void doStrokeCallback(KisStrokeJobData *data) override
void notifyCommandDone(KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality, KisStrokeJobData::Exclusivity exclusivity)
void executeCommand(KUndo2CommandSP command, bool undo)

References KisRunnableBasedStrokeStrategy::doStrokeCallback(), executeCommand(), and notifyCommandDone().

◆ executeCommand()

void KisStrokeStrategyUndoCommandBased::executeCommand ( KUndo2CommandSP command,
bool undo )
protected

Definition at line 60 of file kis_stroke_strategy_undo_command_based.cpp.

61{
62 if(!command) return;
63
64 if (MutatedCommandInterface *mutatedCommand = dynamic_cast<MutatedCommandInterface*>(command.data())) {
65 mutatedCommand->setRunnableJobsInterface(this->runnableJobsInterface());
66 }
67
68 if(undo) {
69 command->undo();
70 } else {
71 command->redo();
72 }
73}
KisRunnableStrokeJobsInterface * runnableJobsInterface() const

References KisRunnableBasedStrokeStrategy::runnableJobsInterface().

◆ finishStrokeCallback()

void KisStrokeStrategyUndoCommandBased::finishStrokeCallback ( )
overridevirtual

Reimplemented from KisSimpleStrokeStrategy.

Reimplemented in StrategyWithStatusPromise, MoveStrokeStrategy, MoveSelectionStrokeStrategy, and TransformStrokeStrategy.

Definition at line 87 of file kis_stroke_strategy_undo_command_based.cpp.

88{
93
94 QMutexLocker locker(&m_mutex);
95 if(m_macroCommand) {
96 Q_ASSERT(m_undoFacade);
100 }
101}
void addMacro(KisSavedMacroCommand *macro)
virtual void postProcessToplevelCommand(KUndo2Command *command)
Applies some modifications (e.g. assigning extra data) to the toplevel command.
virtual KisPostExecutionUndoAdapter * postExecutionUndoAdapter() const =0

References KisPostExecutionUndoAdapter::addMacro(), executeCommand(), m_finishCommand, m_macroCommand, m_mutex, m_undo, m_undoFacade, KisStrokeJobData::NORMAL, notifyCommandDone(), KisStrokeUndoFacade::postExecutionUndoAdapter(), postProcessToplevelCommand(), and KisStrokeJobData::SEQUENTIAL.

◆ initStrokeCallback()

◆ notifyCommandDone()

void KisStrokeStrategyUndoCommandBased::notifyCommandDone ( KUndo2CommandSP command,
KisStrokeJobData::Sequentiality sequentiality,
KisStrokeJobData::Exclusivity exclusivity )
protected

Definition at line 148 of file kis_stroke_strategy_undo_command_based.cpp.

151{
152 if(!command) return;
153
154 QMutexLocker locker(&m_mutex);
155 if(m_macroCommand) {
156 m_macroCommand->addCommand(command, sequentiality, exclusivity);
157 }
158}
void addCommand(KUndo2CommandSP command, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)

References KisSavedMacroCommand::addCommand(), m_macroCommand, and m_mutex.

◆ postProcessToplevelCommand()

void KisStrokeStrategyUndoCommandBased::postProcessToplevelCommand ( KUndo2Command * command)
protectedvirtual

Applies some modifications (e.g. assigning extra data) to the toplevel command.

Reimplemented in InplaceTransformStrokeStrategy, and TransformStrokeStrategy.

Definition at line 176 of file kis_stroke_strategy_undo_command_based.cpp.

177{
178 if (m_commandExtraData) {
179 command->setExtraData(m_commandExtraData.take());
180 }
181
182 KisSavedMacroCommand *savedCommand = dynamic_cast<KisSavedMacroCommand*>(command);
183 if (savedCommand) {
184 savedCommand->setMacroId(m_macroId);
185 }
186}
void setExtraData(KUndo2CommandExtraData *data)
QScopedPointer< KUndo2CommandExtraData > m_commandExtraData

References m_commandExtraData, m_macroId, KUndo2Command::setExtraData(), and KisSavedMacroCommand::setMacroId().

◆ runAndSaveCommand()

void KisStrokeStrategyUndoCommandBased::runAndSaveCommand ( KUndo2CommandSP command,
KisStrokeJobData::Sequentiality sequentiality,
KisStrokeJobData::Exclusivity exclusivity )
protected

Definition at line 138 of file kis_stroke_strategy_undo_command_based.cpp.

141{
142 if (!command) return;
143
144 executeCommand(command, false);
145 notifyCommandDone(command, sequentiality, exclusivity);
146}

References executeCommand(), and notifyCommandDone().

◆ setCommandExtraData()

void KisStrokeStrategyUndoCommandBased::setCommandExtraData ( KUndo2CommandExtraData * data)

Set extra data that will be assigned to the command representing this action. Using extra data has the following restrictions:

1) The data must be set before the stroke has been started. Setting the data after the stroke has been started with image->startStroke(strokeId) leads to an undefined behaviour.

2) data becomes owned by the strategy/command right after setting it. Don't try to change it afterwards.

Definition at line 160 of file kis_stroke_strategy_undo_command_based.cpp.

161{
163 warnKrita << "WARNING: KisStrokeStrategyUndoCommandBased::setCommandExtraData():"
164 << "the extra data is set while the stroke has already been started!"
165 << "The result is undefined, continued actions may not work!";
166 }
167
168 m_commandExtraData.reset(data);
169}
#define warnKrita
Definition kis_debug.h:87

References m_commandExtraData, m_macroCommand, m_undoFacade, and warnKrita.

◆ setMacroId()

void KisStrokeStrategyUndoCommandBased::setMacroId ( int value)

Sets the id of this action. Will be used for merging the undo commands

The value must be set before the stroke has been started. Setting the value after the stroke has been started with image->startStroke(strokeId) leads to an undefined behaviour.

Definition at line 171 of file kis_stroke_strategy_undo_command_based.cpp.

172{
174}
float value(const T *src, size_t ch)

References m_macroId, and value().

◆ setSupportsWrapAroundMode()

void KisStrokeStrategy::setSupportsWrapAroundMode ( bool value)

The undo-command-based is a low-level strategy, so it allows changing its wraparound mode status.

WARNING: the switch must be called before the stroke has been started! Otherwise the mode will not be activated.

Definition at line 168 of file kis_stroke_strategy.cpp.

References KisStrokesQueueMutatedJobInterface::addMutatedJobs(), KIS_SAFE_ASSERT_RECOVER, KisStrokeStrategy::m_mutatedJobsInterface, and KisStrokeStrategy::m_strokeId.

◆ setUsedWhileUndoRedo()

void KisStrokeStrategyUndoCommandBased::setUsedWhileUndoRedo ( bool value)

◆ undoFacade()

KisStrokeUndoFacade * KisStrokeStrategyUndoCommandBased::undoFacade ( ) const
protected

Definition at line 188 of file kis_stroke_strategy_undo_command_based.cpp.

189 {
190 return m_undoFacade;
191 }

References m_undoFacade.

Member Data Documentation

◆ m_commandExtraData

QScopedPointer<KUndo2CommandExtraData> KisStrokeStrategyUndoCommandBased::m_commandExtraData
private

Definition at line 152 of file kis_stroke_strategy_undo_command_based.h.

◆ m_finishCommand

KUndo2CommandSP KisStrokeStrategyUndoCommandBased::m_finishCommand
private

Definition at line 149 of file kis_stroke_strategy_undo_command_based.h.

◆ m_initCommand

KUndo2CommandSP KisStrokeStrategyUndoCommandBased::m_initCommand
private

Definition at line 148 of file kis_stroke_strategy_undo_command_based.h.

◆ m_macroCommand

KisSavedMacroCommand* KisStrokeStrategyUndoCommandBased::m_macroCommand {nullptr}
private

Definition at line 157 of file kis_stroke_strategy_undo_command_based.h.

157{nullptr};

◆ m_macroId

int KisStrokeStrategyUndoCommandBased::m_macroId
private

Definition at line 153 of file kis_stroke_strategy_undo_command_based.h.

◆ m_mutex

QMutex KisStrokeStrategyUndoCommandBased::m_mutex
private

Definition at line 156 of file kis_stroke_strategy_undo_command_based.h.

◆ m_undo

bool KisStrokeStrategyUndoCommandBased::m_undo
private

Definition at line 147 of file kis_stroke_strategy_undo_command_based.h.

◆ m_undoFacade

KisStrokeUndoFacade* KisStrokeStrategyUndoCommandBased::m_undoFacade {nullptr}
private

Definition at line 150 of file kis_stroke_strategy_undo_command_based.h.

150{nullptr};

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