59 if (!cs)
return false;
61 QMutexLocker l(&
m_d->transparentPixelsCacheLock);
63 if (
m_d->needsTransparentPixelsCache) {
64 if (*
m_d->needsTransparentPixelsCache->colorSpace != *cs) {
65 m_d->needsTransparentPixelsCache = std::nullopt;
67 return m_d->needsTransparentPixelsCache->value;
74 if (!filterConfig)
return false;
77 const bool needsTransparentPixelsValue =
filter->needsTransparentPixels(filterConfig, cs);
81 m_d->needsTransparentPixelsCache = {needsTransparentPixelsValue, cs};
82 return needsTransparentPixelsValue;
88 m_d->needsTransparentPixelsCache = std::nullopt;
95 KisRenderPassFlags flags)
const
105 "KisFilterMask::decorateRect: "
106 "src must be != dst, because we can't create transactions "
107 "during merge, as it breaks reentrancy",
118 warnKrita <<
"Could not retrieve filter \"" << filterConfig->name() <<
"\"";
125 filter->
process(src, dst, 0, rc, filterConfig.
data(), 0);
133 return v.visit(
this);
138 return visitor.
visit(
this, undoAdapter);
183 QRect filteredRect =
rect;
192 filteredRect =
filter->changedRect(
rect, filterConfig.
data(), lod);
208 return rect | filteredRect;
223 if (!filterConfig)
return rect;
const QString COMPOSITE_COPY
virtual int currentLevelOfDetail() const =0
QRect changeRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
bool filterNeedsTransparentPixels() const
~KisFilterMask() override
QScopedPointer< Private > m_d
QRect decorateRect(KisPaintDeviceSP &src, KisPaintDeviceSP &dst, const QRect &rc, PositionToFilthy maskPos, KisRenderPassFlags flags) const override
QIcon icon() const override
bool accept(KisNodeVisitor &v) override
QRect exactBounds() const override
void setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig=true) override
KisFilterMask(KisImageWSP image, const QString &name=QString())
QRect extent() const override
QRect needRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
static KisFilterRegistry * instance()
void process(const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
virtual KisFilterConfigurationSP filter() const
virtual void setFilter(KisFilterConfigurationSP filterConfig, bool checkCompareConfig=true)
KisDefaultBoundsBaseSP defaultBounds() const
virtual void visit(KisNode *node, KisUndoAdapter *undoAdapter)=0
const T value(const QString &id) const
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_ASSERT_RECOVER_NOOP(cond)
QIcon loadIcon(const QString &name)
virtual KisPaintDeviceSP projection() const =0
virtual QRect exactBounds() const
virtual QRect extent() const
void setCompositeOpId(const QString &compositeOpId)
const KoColorSpace * colorSpace
QMutex transparentPixelsCacheLock
std::optional< NeedsTransparentPixelsCache > needsTransparentPixelsCache
const KoColorSpace * colorSpace() const override
QRect changeRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
KisBusyProgressIndicator * busyProgressIndicator
KisNodeProgressProxy * nodeProgressProxy