Krita Source Code Documentation
Loading...
Searching...
No Matches
UpdateCommand Class Reference
+ Inheritance diagram for UpdateCommand:

Public Member Functions

 UpdateCommand (KisImageWSP image, KisNodeList nodes, KisProcessingApplicator::ProcessingFlags flags, State initialState, QSharedPointer< bool > sharedAllFramesToken)
 
- Public Member Functions inherited from KisCommandUtils::FlipFlopCommand
 FlipFlopCommand (bool finalizing=false, KUndo2Command *parent=0)
 
 FlipFlopCommand (State initialState, KUndo2Command *parent=0)
 
void redo () override
 
void undo () override
 
- Public Member Functions inherited from KUndo2Command
QString actionText () const
 
virtual bool canAnnihilateWith (const KUndo2Command *other) const
 
const KUndo2Commandchild (int index) const
 
int childCount () const
 
virtual QTime endTime () const
 
KUndo2CommandExtraDataextraData () const
 
bool hasParent () const
 
virtual bool isMerged () const
 
 KUndo2Command (const KUndo2MagicString &text, KUndo2Command *parent=0)
 
 KUndo2Command (KUndo2Command *parent=0)
 
virtual QVector< KUndo2Command * > mergeCommandsVector () const
 
virtual void redoMergedCommands ()
 
void setEndTime ()
 
virtual void setEndTime (const QTime &time)
 
void setExtraData (KUndo2CommandExtraData *data)
 
void setText (const KUndo2MagicString &text)
 
void setTime ()
 
virtual void setTime (const QTime &time)
 
virtual void setTimedID (int timedID)
 
KUndo2MagicString text () const
 
virtual QTime time () const
 
virtual int timedId () const
 
virtual bool timedMergeWith (KUndo2Command *other)
 
virtual void undoMergedCommands ()
 
virtual ~KUndo2Command ()
 
- Public Member Functions inherited from KisAsynchronouslyMergeableCommandInterface
virtual ~KisAsynchronouslyMergeableCommandInterface ()
 

Private Member Functions

bool canMergeWith (const KUndo2Command *command) const override
 
int id () const override
 
bool mergeWith (const KUndo2Command *command) override
 
void partA () override
 
void partB () override
 
void updateClones (KisNodeSP node)
 

Private Attributes

KisProcessingApplicator::ProcessingFlags m_flags
 
KisImageWSP m_image
 
KisNodeList m_nodes
 
QSharedPointer< bool > m_sharedAllFramesToken
 

Additional Inherited Members

- Public Types inherited from KisCommandUtils::FlipFlopCommand
enum  State { INITIALIZING , FINALIZING }
 
- Protected Member Functions inherited from KisCommandUtils::FlipFlopCommand
State getState () const
 
bool isFirstRedo () const
 

Detailed Description

Definition at line 63 of file kis_processing_applicator.cpp.

Constructor & Destructor Documentation

◆ UpdateCommand()

UpdateCommand::UpdateCommand ( KisImageWSP image,
KisNodeList nodes,
KisProcessingApplicator::ProcessingFlags flags,
State initialState,
QSharedPointer< bool > sharedAllFramesToken )
inline

Definition at line 66 of file kis_processing_applicator.cpp.

69 : FlipFlopCommand(initialState),
70 m_image(image),
71 m_nodes(nodes),
72 m_flags(flags),
73 m_sharedAllFramesToken(sharedAllFramesToken)
74 {
75 }
QSharedPointer< bool > m_sharedAllFramesToken
KisProcessingApplicator::ProcessingFlags m_flags
FlipFlopCommand(State initialState, KUndo2Command *parent=0)

Member Function Documentation

◆ canMergeWith()

bool UpdateCommand::canMergeWith ( const KUndo2Command * command) const
inlineoverrideprivatevirtual
Returns
true if command can be merged with (*this) command using KUndo2Command::mergeWith() call.

WARNING: if canMergeWith() returned true, then mergeWith() must also return true. Otherwise KisSavedMacroCommand will be able to enter inconsistent state and assert.

Implements KisAsynchronouslyMergeableCommandInterface.

Definition at line 161 of file kis_processing_applicator.cpp.

161 {
162 const UpdateCommand *other =
163 dynamic_cast<const UpdateCommand*>(command);
164
165 return other &&
166 other->m_image == m_image &&
167 other->m_nodes == m_nodes &&
168 other->m_flags == m_flags &&
169 bool(other->m_sharedAllFramesToken) == bool(m_sharedAllFramesToken) &&
171 }

References m_flags, m_image, m_nodes, and m_sharedAllFramesToken.

◆ id()

int UpdateCommand::id ( ) const
inlineoverrideprivatevirtual

Returns the ID of this command.

A command ID is used in command compression. It must be an integer unique to this command's class, or -1 if the command doesn't support compression.

If the command supports compression this function must be overridden in the derived class to return the correct ID. The base implementation returns -1.

KUndo2QStack::push() will only try to merge two commands if they have the same ID, and the ID is not -1.

See also
mergeWith(), KUndo2QStack::push()

Reimplemented from KUndo2Command.

Definition at line 153 of file kis_processing_applicator.cpp.

References KisCommandUtils::UpdateCommandId.

◆ mergeWith()

bool UpdateCommand::mergeWith ( const KUndo2Command * command)
inlineoverrideprivatevirtual

Attempts to merge this command with command. Returns true on success; otherwise returns false.

If this function returns true, calling this command's redo() must have the same effect as redoing both this command and command. Similarly, calling this command's undo() must have the same effect as undoing command and this command.

KUndo2QStack will only try to merge two commands if they have the same id, and the id is not -1.

The default implementation returns false.

See also
id() KUndo2QStack::push()

Reimplemented from KUndo2Command.

Definition at line 157 of file kis_processing_applicator.cpp.

157 {
158 return canMergeWith(command);
159 }
bool canMergeWith(const KUndo2Command *command) const override

◆ partA()

void UpdateCommand::partA ( )
inlineoverrideprivatevirtual

We disable all non-centralized updates here. Everything should be done by this command's explicit updates.

If you still need third-party updates work, please add a flag to the applicator.

Reimplemented from KisCommandUtils::FlipFlopCommand.

Definition at line 78 of file kis_processing_applicator.cpp.

78 {
87 }
void disableDirtyRequests() override

References KisImage::disableDirtyRequests(), and m_image.

◆ partB()

void UpdateCommand::partB ( )
inlineoverrideprivatevirtual

Reimplemented from KisCommandUtils::FlipFlopCommand.

Definition at line 89 of file kis_processing_applicator.cpp.

89 {
91
94 KisPaintLayer* paintLayer = qobject_cast<KisPaintLayer*>(node.data());
95 if (paintLayer && paintLayer->onionSkinEnabled()) {
96 paintLayer->flushOnionSkinCache();
97 }
98 });
99 }
100
101 Q_FOREACH(KisNodeSP node, m_nodes) {
103
107 }
108
109 node->setDirty(m_image->bounds());
110
111 updateClones(node);
112 }
113 }
114 }
void refreshGraphAsync(KisNodeSP root, const QVector< QRect > &rects, const QRect &cropRect, KisProjectionUpdateFlags flags=KisProjectionUpdateFlag::None) override
void enableDirtyRequests() override
QRect bounds() const override
static KisTimeSpan infinite(int start)
void updateClones(KisNodeSP node)
void recursiveApplyNodes(NodePointer node, Functor func)
virtual QRect exactBounds() const
virtual void invalidateFrames(const KisTimeSpan &range, const QRect &rect)
KisNodeGraphListener * graphListener
Definition kis_node.cpp:87
virtual void setDirty()
Definition kis_node.cpp:577

References KisImage::enableDirtyRequests(), m_image, m_sharedAllFramesToken, KisLayerUtils::recursiveApplyNodes(), and KisNodeFacade::root.

◆ updateClones()

void UpdateCommand::updateClones ( KisNodeSP node)
inlineprivate

TODO: completely remove these clone updates code in Krita 6

These updates should actually be issued by KisBaseRectsWalker::registerCloneNotification(), so we disable then for now. If no reports about broken clones arrive until Krita 6, just remove this (deprecated?) code.

Definition at line 116 of file kis_processing_applicator.cpp.

116 {
128 if (qEnvironmentVariableIsSet("KRITA_ENABLE_CLONE_UPDATES_IN_APPLICATOR")) {
129 // simple tail-recursive iteration
130 KisNodeSP prevNode = node->lastChild();
131 while(prevNode) {
132 updateClones(prevNode);
133 prevNode = prevNode->prevSibling();
134 }
135
136 Q_FOREACH(KisNodeSP node, m_nodes) {
137 KisLayer *layer = qobject_cast<KisLayer*>(node.data());
138 if(layer && layer->hasClones()) {
139 Q_FOREACH (KisCloneLayerSP clone, layer->registeredClones()) {
140 if(!clone) continue;
141
142 QPoint offset(clone->x(), clone->y());
143 QRegion dirtyRegion(m_image->bounds());
144 dirtyRegion -= m_image->bounds().translated(offset);
145
146 clone->setDirty(KisRegion::fromQRegion(dirtyRegion));
147 }
148 }
149 }
150 }
151 }
static KisRegion fromQRegion(const QRegion &region)
const QList< KisCloneLayerWSP > registeredClones() const
Definition kis_layer.cc:478
bool hasClones() const
Definition kis_layer.cc:483
KisNodeSP prevSibling() const
Definition kis_node.cpp:402
KisNodeSP lastChild() const
Definition kis_node.cpp:367

References KisSharedPtr< T >::data(), KisRegion::fromQRegion(), KisLayer::hasClones(), KisNode::lastChild(), KisNode::prevSibling(), and KisLayer::registeredClones().

Member Data Documentation

◆ m_flags

KisProcessingApplicator::ProcessingFlags UpdateCommand::m_flags
private

Definition at line 176 of file kis_processing_applicator.cpp.

◆ m_image

KisImageWSP UpdateCommand::m_image
private

Definition at line 174 of file kis_processing_applicator.cpp.

◆ m_nodes

KisNodeList UpdateCommand::m_nodes
private

Definition at line 175 of file kis_processing_applicator.cpp.

◆ m_sharedAllFramesToken

QSharedPointer<bool> UpdateCommand::m_sharedAllFramesToken
private

Definition at line 177 of file kis_processing_applicator.cpp.


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