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

#include <kis_full_refresh_walker.h>

+ Inheritance diagram for KisFullRefreshWalker:

Public Types

enum  Flag
 
- Public Types inherited from KisRefreshSubtreeWalker
enum  Flag {
  None = 0x0 , SkipNonRenderableNodes = 0x1 , NoFilthyMode = 0x2 , DontAdjustChangeRect = 0x4 ,
  ClonesDontInvalidateFrames = 0x8
}
 
- Public Types inherited from KisBaseRectsWalker
typedef QVector< CloneNotificationCloneNotificationsVector
 
typedef QStack< JobItemLeafStack
 
typedef qint32 NodePosition
 
enum  NodePositionValues {
  N_NORMAL = 0x00 , N_TOPMOST = 0x01 , N_BOTTOMMOST = 0x02 , N_EXTRA = 0x04 ,
  N_ABOVE_FILTHY = 0x08 , N_FILTHY_ORIGINAL = 0x10 , N_FILTHY_PROJECTION = 0x20 , N_FILTHY = 0x40 ,
  N_BELOW_FILTHY = 0x80
}
 
enum  SubtreeVisitFlag { None = 0x0 , SkipNonRenderableNodes = 0x1 , NoFilthyMode = 0x2 , DontNotifyClones = 0x4 }
 
enum  UpdateType {
  UPDATE , UPDATE_NO_FILTHY , FULL_REFRESH , FULL_REFRESH_NO_FILTHY ,
  UNSUPPORTED
}
 
- Public Types inherited from KisMergeWalker
enum  Flag { DEFAULT = 0 , NO_FILTHY = 0x1 , CLONES_DONT_INVALIDATE_FRAMES = 0x2 }
 

Public Member Functions

void adjustMasksChangeRect (KisProjectionLeafSP firstMask) override
 
 KisFullRefreshWalker (QRect cropRect, Flags flags=None)
 
void registerChangeRect (KisProjectionLeafSP leaf, NodePosition position) override
 
void registerNeedRect (KisProjectionLeafSP leaf, NodePosition position, KisRenderPassFlags renderFlags, const QRect &cropRect) override
 
void startTrip (KisProjectionLeafSP startWith) override
 
UpdateType type () const override
 
- Public Member Functions inherited from KisRefreshSubtreeWalker
Flags flags () const
 
 KisRefreshSubtreeWalker (QRect cropRect, Flags flags=None)
 
 Q_DECLARE_FLAGS (Flags, Flag)
 
UpdateType type () const override
 
 ~KisRefreshSubtreeWalker () override
 
- Public Member Functions inherited from KisBaseRectsWalker
QRect accessRect () const
 
QRect changeRect () const
 
bool changeRectVaries () const
 
bool checksumValid ()
 
CloneNotificationsVectorcloneNotifications ()
 
bool clonesDontInvalidateFrames () const
 
void collectRects (KisNodeSP node, const QRect &requestedRect)
 
QRect cropRect () const
 
 KisBaseRectsWalker ()
 
LeafStackleafStack ()
 
int levelOfDetail () const
 
bool needRectVaries () const
 
 Q_DECLARE_FLAGS (SubtreeVisitFlags, SubtreeVisitFlag)
 
void recalculate (const QRect &requestedRect)
 
QRect requestedRect () const
 
void setClonesDontInvalidateFrames (bool value)
 
void setCropRect (QRect cropRect)
 
KisNodeSP startNode () const
 
QRect uncroppedChangeRect () const
 
virtual ~KisBaseRectsWalker ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 
- Public Member Functions inherited from KisMergeWalker
 KisMergeWalker (QRect cropRect, Flags flags=DEFAULT)
 
UpdateType type () const override
 
 ~KisMergeWalker () override
 

Private Attributes

UpdateType m_currentUpdateType { UPDATE }
 
bool m_firstRun { true }
 

Additional Inherited Members

- Static Public Member Functions inherited from KisBaseRectsWalker
static KisNode::PositionToFilthy convertPositionToFilthy (NodePosition position)
 
- Protected Member Functions inherited from KisRefreshSubtreeWalker
 KisRefreshSubtreeWalker ()
 
void startTrip (KisProjectionLeafSP startWith) override
 
- Protected Member Functions inherited from KisBaseRectsWalker
void addCloneSourceRegenerationJobs ()
 
void clear ()
 
QRect cropThisRect (const QRect &rect, const QRect &cropRect)
 
bool isStartLeaf (KisProjectionLeafSP leaf) const
 
void pushJob (KisProjectionLeafSP leaf, NodePosition position, QRect applyRect, KisRenderPassFlags flags)
 
void registerCloneNotification (KisNodeSP node, NodePosition position)
 
void registerNeedRect (KisProjectionLeafSP leaf, NodePosition position, KisRenderPassFlags flags)
 
void setExplicitChangeRect (const QRect &changeRect, bool changeRectVaries)
 
void visitSubtreeTopToBottom (KisProjectionLeafSP startWith, SubtreeVisitFlags flags, KisRenderPassFlags renderFlags, const QRect &cropRect)
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 
- Protected Member Functions inherited from KisMergeWalker
 KisMergeWalker ()
 
 KisMergeWalker (Flags flags)
 
void startTrip (KisProjectionLeafSP startWith) override
 
virtual void startTrip (KisProjectionLeafSP startWith)=0
 
void startTripWithMask (KisProjectionLeafSP filthyMask, KisMergeWalker::Flags flags)
 
- Static Protected Member Functions inherited from KisRefreshSubtreeWalker
static std::pair< QRect, bool > calculateChangeRect (KisProjectionLeafSP startWith, const QRect &requestedRect)
 
- Static Protected Member Functions inherited from KisBaseRectsWalker
static qint32 calculateChecksum (KisProjectionLeafSP leaf, const QRect &requestedRect)
 
static NodePosition calculateNodePosition (KisProjectionLeafSP leaf)
 
static qint32 getGraphPosition (qint32 position)
 
static bool hasClones (KisNodeSP node)
 

Detailed Description

Definition at line 14 of file kis_full_refresh_walker.h.

Member Enumeration Documentation

◆ Flag

Constructor & Destructor Documentation

◆ KisFullRefreshWalker()

Member Function Documentation

◆ adjustMasksChangeRect()

void KisFullRefreshWalker::adjustMasksChangeRect ( KisProjectionLeafSP firstMask)
inlineoverridevirtual

◆ registerChangeRect()

void KisFullRefreshWalker::registerChangeRect ( KisProjectionLeafSP leaf,
NodePosition position )
inlineoverridevirtual

Called for every node we meet on a forward way of the trip.

Merge walker thinks that we changed the original of the dirty node (dirtyNode == startNode()), but that is not true in case of full refresh walker, because all the children of the dirty node are dirty as well, that is why we shouldn't rely on usual registerChangeRect() mechanism for this node. That is why we just unite the changeRects of all its children here.

Reimplemented from KisBaseRectsWalker.

Definition at line 59 of file kis_full_refresh_walker.h.

59 {
62 }
63 else {
74 if(isStartLeaf(leaf)&& !leaf->isRoot()) {
75 QRect changeRect;
76 bool changeRectVaries = false;
77 std::tie(changeRect, changeRectVaries) =
80 }
81 else {
83 }
84 }
85 }
bool isStartLeaf(KisProjectionLeafSP leaf) const
void setExplicitChangeRect(const QRect &changeRect, bool changeRectVaries)
virtual void registerChangeRect(KisProjectionLeafSP leaf, NodePosition position)
static std::pair< QRect, bool > calculateChangeRect(KisProjectionLeafSP startWith, const QRect &requestedRect)

References KisRefreshSubtreeWalker::calculateChangeRect(), KisBaseRectsWalker::changeRect(), KisBaseRectsWalker::changeRectVaries(), KisBaseRectsWalker::FULL_REFRESH, KisBaseRectsWalker::isStartLeaf(), m_currentUpdateType, KisBaseRectsWalker::registerChangeRect(), KisBaseRectsWalker::requestedRect(), and KisBaseRectsWalker::setExplicitChangeRect().

◆ registerNeedRect()

void KisFullRefreshWalker::registerNeedRect ( KisProjectionLeafSP leaf,
NodePosition position,
KisRenderPassFlags flags,
const QRect & cropRect )
inlineoverridevirtual

Called for every node we meet on a backward way of the trip.

Reimplemented from KisBaseRectsWalker.

Definition at line 86 of file kis_full_refresh_walker.h.

86 {
88 KisRefreshSubtreeWalker::registerNeedRect(leaf, position, renderFlags, cropRect);
89 }
90 else {
91 KisMergeWalker::registerNeedRect(leaf, position, renderFlags, cropRect);
92 }
93 }
void registerNeedRect(KisProjectionLeafSP leaf, NodePosition position, KisRenderPassFlags flags)

References KisBaseRectsWalker::cropRect(), KisBaseRectsWalker::FULL_REFRESH, m_currentUpdateType, and KisBaseRectsWalker::registerNeedRect().

◆ startTrip()

void KisFullRefreshWalker::startTrip ( KisProjectionLeafSP startWith)
inlineoverridevirtual

Initiates collecting of rects. Should be implemented in derived classes

Implements KisBaseRectsWalker.

Definition at line 32 of file kis_full_refresh_walker.h.

32 {
33 if(m_firstRun) {
34 m_firstRun = false;
35
38
40
41 if (!startWith->dependsOnLowerNodes()) {
43 } else {
44 KIS_SAFE_ASSERT_RECOVER_NOOP(!startWith->canHaveChildLayers());
45 }
46
47 m_firstRun = true;
48 }
49 else {
52 }
53 else {
55 }
56 }
57 }
void startTrip(KisProjectionLeafSP startWith) override
void startTrip(KisProjectionLeafSP startWith) override
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KisBaseRectsWalker::FULL_REFRESH, KIS_SAFE_ASSERT_RECOVER_NOOP, m_currentUpdateType, m_firstRun, KisMergeWalker::startTrip(), KisRefreshSubtreeWalker::startTrip(), and KisBaseRectsWalker::UPDATE.

◆ type()

Member Data Documentation

◆ m_currentUpdateType

UpdateType KisFullRefreshWalker::m_currentUpdateType { UPDATE }
private

Definition at line 104 of file kis_full_refresh_walker.h.

104{ UPDATE };

◆ m_firstRun

bool KisFullRefreshWalker::m_firstRun { true }
private

Definition at line 105 of file kis_full_refresh_walker.h.

105{ true };

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