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

Public Member Functions

 KisUpdateOriginalVisitor (const QRect &updateRect, KisPaintDeviceSP projection)
 
bool visit (KisAdjustmentLayer *layer) override
 
virtual bool visit (KisAdjustmentLayer *layer)=0
 
bool visit (KisCloneLayer *) override
 
virtual bool visit (KisCloneLayer *layer)=0
 
bool visit (KisColorizeMask *) override
 
virtual bool visit (KisColorizeMask *mask)=0
 
bool visit (KisExternalLayer *) override
 
virtual bool visit (KisExternalLayer *layer)=0
 
bool visit (KisFilterMask *) override
 
virtual bool visit (KisFilterMask *mask)=0
 
bool visit (KisGeneratorLayer *) override
 
virtual bool visit (KisGeneratorLayer *layer)=0
 
bool visit (KisGroupLayer *) override
 
virtual bool visit (KisGroupLayer *layer)=0
 
bool visit (KisNode *) override
 
virtual bool visit (KisNode *node)=0
 
bool visit (KisPaintLayer *) override
 
virtual bool visit (KisPaintLayer *layer)=0
 
bool visit (KisSelectionMask *) override
 
virtual bool visit (KisSelectionMask *mask)=0
 
bool visit (KisTransformMask *) override
 
virtual bool visit (KisTransformMask *mask)=0
 
bool visit (KisTransparencyMask *) override
 
virtual bool visit (KisTransparencyMask *mask)=0
 
 ~KisUpdateOriginalVisitor () override
 
- Public Member Functions inherited from KisNodeVisitor
 KisNodeVisitor ()
 
virtual ~KisNodeVisitor ()
 

Private Attributes

KisPaintDeviceSP m_projection
 
QRect m_updateRect
 

Additional Inherited Members

- Protected Member Functions inherited from KisNodeVisitor
bool visitAll (KisNode *node, bool breakOnFail=false)
 
bool visitAllInverse (KisNode *node, bool breakOnFail=false)
 

Detailed Description

Definition at line 47 of file kis_async_merger.cpp.

Constructor & Destructor Documentation

◆ KisUpdateOriginalVisitor()

KisUpdateOriginalVisitor::KisUpdateOriginalVisitor ( const QRect & updateRect,
KisPaintDeviceSP projection )
inline

Definition at line 50 of file kis_async_merger.cpp.

51 : m_updateRect(updateRect),
52 m_projection(projection)
53 {
54 }

◆ ~KisUpdateOriginalVisitor()

KisUpdateOriginalVisitor::~KisUpdateOriginalVisitor ( )
inlineoverride

Definition at line 56 of file kis_async_merger.cpp.

56 {
57 }

Member Function Documentation

◆ visit() [1/24]

bool KisUpdateOriginalVisitor::visit ( KisAdjustmentLayer * layer)
inlineoverridevirtual

When an adjustment layer is just created, it may have no filter inside. Then the layer has work as a pass-through node. Just copy the merged data to the layer's original.

Implements KisNodeVisitor.

Definition at line 62 of file kis_async_merger.cpp.

62 {
63 if (!layer->visible()) return true;
64
65 if (!m_projection) {
66 warnImage << "ObligeChild mechanism has been activated for "
67 "an adjustment layer! Do nothing...";
68 layer->original()->clear();
69 return true;
70 }
71
72 const QRect originalUpdateRect =
73 layer->projectionPlane()->needRectForOriginal(m_updateRect);
74
75 KisPaintDeviceSP originalDevice = layer->original();
76 originalDevice->clear(originalUpdateRect);
77
78 const QRect applyRect = originalUpdateRect & m_projection->extent();
79
80 // If the intersection of the updaterect and the projection extent is
81 // null, we are finish here.
82 if(applyRect.isNull()) return true;
83
84 KisFilterConfigurationSP filterConfig = layer->filter();
85 if (!filterConfig) {
91 KisPainter::copyAreaOptimized(applyRect.topLeft(), m_projection, originalDevice, applyRect);
92 return true;
93 }
94
95 KisSelectionSP selection = layer->fetchComposedInternalSelection(applyRect);
96 const QRect filterRect = selection ? applyRect & selection->selectedRect() : applyRect;
97
98 KisFilterSP filter = KisFilterRegistry::instance()->value(filterConfig->name());
99 if (!filter) return false;
100
101 KisPaintDeviceSP dstDevice = originalDevice;
102
103 if (selection) {
104 dstDevice = new KisPaintDevice(originalDevice->colorSpace());
105 }
106
107 if (!filterRect.isEmpty()) {
109 layer->busyProgressIndicator()->update();
110
111 // We do not create a transaction here, as srcDevice != dstDevice
112 filter->process(m_projection, dstDevice, 0, filterRect, filterConfig.data(), 0);
113 }
114
115 if (selection) {
116 KisPainter::copyAreaOptimized(applyRect.topLeft(), m_projection, originalDevice, applyRect);
117 KisPainter::copyAreaOptimized(filterRect.topLeft(), dstDevice, originalDevice, filterRect, selection);
118 }
119
120 return true;
121 }
static KisFilterRegistry * instance()
void process(const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
Definition kis_filter.cc:41
virtual KisFilterConfigurationSP filter() const
virtual void clear()
QRect extent() const
const KoColorSpace * colorSpace() const
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
const T value(const QString &id) const
#define KIS_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:97
#define warnImage
Definition kis_debug.h:88
virtual bool visible(bool recursive=false) const
KisLayerProjectionPlaneSP projectionPlane
Definition kis_layer.cc:174
KisBusyProgressIndicator * busyProgressIndicator
Definition kis_node.cpp:90
KisSelectionSP fetchComposedInternalSelection(const QRect &rect) const
KisPaintDeviceSP original() const override
QRect selectedRect() const

References KisNode::busyProgressIndicator, KisPaintDevice::clear(), KisPaintDevice::colorSpace(), KisPainter::copyAreaOptimized(), KisSharedPtr< T >::data(), KisPaintDevice::extent(), KisSelectionBasedLayer::fetchComposedInternalSelection(), KisNodeFilterInterface::filter(), KisFilterRegistry::instance(), KIS_ASSERT_RECOVER_NOOP, m_projection, m_updateRect, KisSelectionBasedLayer::original(), KisFilter::process(), KisLayer::projectionPlane, KisSelection::selectedRect(), KisBusyProgressIndicator::update(), KoGenericRegistry< T >::value(), KisBaseNode::visible(), and warnImage.

◆ visit() [2/24]

virtual bool KisNodeVisitor::visit ( KisAdjustmentLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [3/24]

bool KisUpdateOriginalVisitor::visit ( KisCloneLayer * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 139 of file kis_async_merger.cpp.

139 {
140 return true;
141 }

◆ visit() [4/24]

virtual bool KisNodeVisitor::visit ( KisCloneLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [5/24]

bool KisUpdateOriginalVisitor::visit ( KisColorizeMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 158 of file kis_async_merger.cpp.

158 {
159 return true;
160 }

◆ visit() [6/24]

virtual bool KisNodeVisitor::visit ( KisColorizeMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [7/24]

bool KisUpdateOriginalVisitor::visit ( KisExternalLayer * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 123 of file kis_async_merger.cpp.

123 {
124 return true;
125 }

◆ visit() [8/24]

virtual bool KisNodeVisitor::visit ( KisExternalLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [9/24]

bool KisUpdateOriginalVisitor::visit ( KisFilterMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 146 of file kis_async_merger.cpp.

146 {
147 return true;
148 }

◆ visit() [10/24]

virtual bool KisNodeVisitor::visit ( KisFilterMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [11/24]

bool KisUpdateOriginalVisitor::visit ( KisGeneratorLayer * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 127 of file kis_async_merger.cpp.

127 {
128 return true;
129 }

◆ visit() [12/24]

virtual bool KisNodeVisitor::visit ( KisGeneratorLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [13/24]

bool KisUpdateOriginalVisitor::visit ( KisGroupLayer * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 135 of file kis_async_merger.cpp.

135 {
136 return true;
137 }

◆ visit() [14/24]

virtual bool KisNodeVisitor::visit ( KisGroupLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [15/24]

bool KisUpdateOriginalVisitor::visit ( KisNode * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 143 of file kis_async_merger.cpp.

143 {
144 return true;
145 }

◆ visit() [16/24]

virtual bool KisNodeVisitor::visit ( KisNode * node)
virtual

Implements KisNodeVisitor.

◆ visit() [17/24]

bool KisUpdateOriginalVisitor::visit ( KisPaintLayer * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 131 of file kis_async_merger.cpp.

131 {
132 return true;
133 }

◆ visit() [18/24]

virtual bool KisNodeVisitor::visit ( KisPaintLayer * layer)
virtual

Implements KisNodeVisitor.

◆ visit() [19/24]

bool KisUpdateOriginalVisitor::visit ( KisSelectionMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 155 of file kis_async_merger.cpp.

155 {
156 return true;
157 }

◆ visit() [20/24]

virtual bool KisNodeVisitor::visit ( KisSelectionMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [21/24]

bool KisUpdateOriginalVisitor::visit ( KisTransformMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 149 of file kis_async_merger.cpp.

149 {
150 return true;
151 }

◆ visit() [22/24]

virtual bool KisNodeVisitor::visit ( KisTransformMask * mask)
virtual

Implements KisNodeVisitor.

◆ visit() [23/24]

bool KisUpdateOriginalVisitor::visit ( KisTransparencyMask * )
inlineoverridevirtual

Implements KisNodeVisitor.

Definition at line 152 of file kis_async_merger.cpp.

152 {
153 return true;
154 }

◆ visit() [24/24]

virtual bool KisNodeVisitor::visit ( KisTransparencyMask * mask)
virtual

Implements KisNodeVisitor.

Member Data Documentation

◆ m_projection

KisPaintDeviceSP KisUpdateOriginalVisitor::m_projection
private

Definition at line 164 of file kis_async_merger.cpp.

◆ m_updateRect

QRect KisUpdateOriginalVisitor::m_updateRect
private

Definition at line 163 of file kis_async_merger.cpp.


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