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

#include <kis_recalculate_transform_mask_job.h>

+ Inheritance diagram for KisRecalculateTransformMaskJob:

Public Member Functions

QString debugName () const override
 
 KisRecalculateTransformMaskJob (KisTransformMaskSP mask, const QRect &extraUpdateRect)
 
int levelOfDetail () const override
 
bool overrides (const KisSpontaneousJob *otherJob) override
 
void run () override
 
- Public Member Functions inherited from KisSpontaneousJob
bool isExclusive () const
 
- Public Member Functions inherited from KisRunnable
virtual ~KisRunnable ()
 

Private Attributes

QRect m_extraUpdateRect
 
KisTransformMaskSP m_mask
 

Additional Inherited Members

- Protected Member Functions inherited from KisSpontaneousJob
void setExclusive (bool value)
 

Detailed Description

Definition at line 16 of file kis_recalculate_transform_mask_job.h.

Constructor & Destructor Documentation

◆ KisRecalculateTransformMaskJob()

KisRecalculateTransformMaskJob::KisRecalculateTransformMaskJob ( KisTransformMaskSP mask,
const QRect & extraUpdateRect )

Member Function Documentation

◆ debugName()

QString KisRecalculateTransformMaskJob::debugName ( ) const
overridevirtual

Implements KisRunnableWithDebugName.

Definition at line 101 of file kis_recalculate_transform_mask_job.cpp.

102{
103 QString result;
104 QDebug dbg(&result);
105 dbg << "KisRecalculateTransformMaskJob" << m_mask;
106 return result;
107}

References m_mask.

◆ levelOfDetail()

int KisRecalculateTransformMaskJob::levelOfDetail ( ) const
overridevirtual

Implements KisSpontaneousJob.

Definition at line 96 of file kis_recalculate_transform_mask_job.cpp.

97{
98 return 0;
99}

◆ overrides()

bool KisRecalculateTransformMaskJob::overrides ( const KisSpontaneousJob * otherJob)
overridevirtual

Implements KisSpontaneousJob.

Definition at line 25 of file kis_recalculate_transform_mask_job.cpp.

26{
27 const KisRecalculateTransformMaskJob *otherJob =
28 dynamic_cast<const KisRecalculateTransformMaskJob*>(_otherJob);
29
30 return otherJob && otherJob->m_mask == m_mask;
31}

References m_mask.

◆ run()

void KisRecalculateTransformMaskJob::run ( )
overridevirtual

The mask might have been deleted from the layers stack. In such a case, don't try do update it.

Depending on whether the mask is hidden we should either update it entirely via the setDirty() call, or we can use a lightweight approach by directly regenerating the precalculated static image using KisRecalculateTransformMaskJob.

When we call NoFilthy update on a layer, its masks' change rect is not counted, because it is considered to be N_ABOVE_FILTHY. Therefore, we should expand the dirty rect manually to get the correct update

Implements KisRunnable.

Definition at line 33 of file kis_recalculate_transform_mask_job.cpp.

34{
39 if (!m_mask->parent()) return;
40 if (!m_mask->visible()) return;
41 if (m_mask->staticImageCacheIsValid()) return;
42
43 const QRect oldMaskExtent = m_mask->extent();
45
46 KisLayerSP layer = qobject_cast<KisLayer*>(m_mask->parent().data());
47
48 if (!layer) {
49 warnKrita << "WARNING: KisRecalculateTransformMaskJob::run() Mask has no parent layer! Skipping projection update!";
50 return;
51 }
52
53 KisImageSP image = layer->image();
54 Q_ASSERT(image);
55
63 if (m_mask->transformParams()->isHidden()) {
64 QRect updateRect = m_mask->extent() | oldMaskExtent;
65
66 updateRect |= m_extraUpdateRect;
67
68 if (layer->original()) {
69 updateRect |= layer->original()->defaultBounds()->bounds();
70 }
71
72 if (layer->isAnimated()) {
73 m_mask->setDirty(updateRect);
74 } else {
76 }
77 } else {
84 QRect updateRect = oldMaskExtent |
85 layer->projectionPlane()->changeRect(layer->extent(), KisLayer::N_FILTHY);
86
87 updateRect |= m_extraUpdateRect;
88
89 // Should there be a case where this is flushed?
90 image->requestProjectionUpdate(layer.data(), {updateRect},
93 }
94}
virtual QRect bounds() const =0
void requestProjectionUpdate(KisNode *node, const QVector< QRect > &rects, KisProjectionUpdateFlags flags) override
KisDefaultBoundsBaseSP defaultBounds() const
#define warnKrita
Definition kis_debug.h:87
KisImageWSP image
bool isAnimated() const
virtual bool visible(bool recursive=false) const
QRect extent() const override
KisPaintDeviceSP original() const override=0
KisLayerProjectionPlaneSP projectionPlane
Definition kis_layer.cc:174
void setDirtyDontResetAnimationCache()
Definition kis_node.cpp:599
@ N_FILTHY
Definition kis_node.h:61
KisNodeWSP parent
Definition kis_node.cpp:86
virtual void setDirty()
Definition kis_node.cpp:577
QRect extent() const override
KisTransformMaskParamsInterfaceSP transformParams() const
bool staticImageCacheIsValid() const

References KisDefaultBoundsBase::bounds(), KisSharedPtr< T >::data(), KisWeakSharedPtr< T >::data(), KisPaintDevice::defaultBounds(), DontInvalidateFrames, KisLayer::extent(), KisTransformMask::extent(), KisBaseNode::image, KisBaseNode::isAnimated(), m_extraUpdateRect, m_mask, KisNode::N_FILTHY, NoFilthy, KisLayer::original(), KisNode::parent, KisLayer::projectionPlane, KisTransformMask::recalculateStaticImage(), KisImage::requestProjectionUpdate(), KisNode::setDirty(), KisNode::setDirtyDontResetAnimationCache(), KisTransformMask::staticImageCacheIsValid(), KisTransformMask::transformParams(), KisBaseNode::visible(), and warnKrita.

Member Data Documentation

◆ m_extraUpdateRect

QRect KisRecalculateTransformMaskJob::m_extraUpdateRect
private

Definition at line 29 of file kis_recalculate_transform_mask_job.h.

◆ m_mask

KisTransformMaskSP KisRecalculateTransformMaskJob::m_mask
private

Definition at line 28 of file kis_recalculate_transform_mask_job.h.


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