16#include <QScopedPointer>
70 m_d->safeProjection->setImage(
image);
82 if (rhs.
m_d->selection) {
84 m_d->selection->setParentNode(
this);
97 m_d->selection->setParentNode(0);
108 if (parentPaintDevice) {
112 qWarning() <<
"WARNING: KisMask::setImage() was called without any parent layer being set";
119 if (
m_d->selection) {
120 m_d->selection->setDefaultBounds(defaultBounds);
121 m_d->selection->setResolutionProxy(
m_d->selection->resolutionProxy()->createOrCloneDetached(
image));
124 m_d->safeProjection->setImage(
image);
138 return parentNode ? parentNode->
colorSpace() : 0;
151 if (!colorSpace)
return 0;
159 m_d->initSelectionImpl(copyFrom, parentLayer, 0,
image());
164 m_d->initSelectionImpl(0, parentLayer, copyFromDevice,
image());
169 m_d->initSelectionImpl(0, parentLayer, 0,
image());
174 Q_ASSERT(parentLayer);
184 selection->setResolutionProxy(copyFrom->
resolutionProxy()->createOrCloneDetached(image));
185 }
else if (copyFromDevice) {
187 q->inherits(
"KisFilterMask") || q->inherits(
"KisTransparencyMask") ?
199 q->addKeyframeChannel(keyframeChannel);
200 q->enableAnimation();
205 selection->pixelSelection()->setDefaultPixel(
KoColor(Qt::white, selection->pixelSelection()->colorSpace()));
207 if (deferredSelectionOffset) {
208 selection->setX(deferredSelectionOffset->x());
209 selection->setY(deferredSelectionOffset->y());
210 deferredSelectionOffset.reset();
213 selection->setParentNode(q);
214 selection->pixelSelection()->setSupportsWraparoundMode(
true);
215 selection->updateProjection();
220 return m_d->selection;
241 result =
m_d->safeProjection->getDeviceLazy(
selection)->pixelSelection();
249 return m_d->projectionPlane;
257 m_d->selection->setParentNode(
this);
258 m_d->selection->pixelSelection()->setSupportsWraparoundMode(
true);
265 psel->
select(rc, selectedness);
274 KisRenderPassFlags flags)
const
280 Q_ASSERT_X(0,
"KisMask::decorateRect",
"Should be overridden by successors");
304 QRect effectiveExtent =
m_d->selection->selectedRect();
310 if(!effectiveExtent.intersects(applyRect)) {
316 effectiveSelection =
m_d->safeProjection->getDeviceLazy(
m_d->selection);
319 m_d->selection->pixelSelection(),
326 m_d->safeProjection->releaseDevice();
339 const QRect &applyRect,
340 const QRect &preparedNeedRect,
342 KisRenderPassFlags flags)
const
347 if (effectiveSelection) {
369 QRect resultRect =
rect;
370 if (
m_d->selection) {
371 QRect selectionExtent =
m_d->selection->selectedRect();
376 if (temporaryTarget) {
380 resultRect &= selectionExtent;
395 if (
m_d->selection) {
396 resultRect =
m_d->selection->selectedRect();
401 if (temporaryTarget) {
415 if (
m_d->selection) {
416 resultRect =
m_d->selection->selectedExactRect();
421 if (temporaryTarget) {
433 return m_d->selection ?
m_d->selection->x() :
434 m_d->deferredSelectionOffset ?
m_d->deferredSelectionOffset->x() :
440 return m_d->selection ?
m_d->selection->y() :
441 m_d->deferredSelectionOffset ?
m_d->deferredSelectionOffset->y() :
447 if (
m_d->selection) {
448 m_d->selection->setX(
x);
449 }
else if (!
m_d->deferredSelectionOffset) {
450 m_d->deferredSelectionOffset.reset(
new QPoint(
x, 0));
452 m_d->deferredSelectionOffset->rx() =
x;
458 if (
m_d->selection) {
459 m_d->selection->setY(
y);
460 }
else if (!
m_d->deferredSelectionOffset) {
461 m_d->deferredSelectionOffset.reset(
new QPoint(0,
y));
463 m_d->deferredSelectionOffset->ry() =
y;
477 return originalDevice ?
499 m_d->selection->pixelSelection()->setSupportsWraparoundMode(
true);
500 m_d->selection->updateProjection(
rect);
501 m_d->selection->setParentNode(
this);
506 return !
m_d->selection || !
m_d->selection->hasShapeSelection();
516 return contentChannel;
const quint8 OPACITY_OPAQUE_U8
const QString COMPOSITE_OVER
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
KisRasterKeyframeChannel * keyframeChannel() const
void makeCloneFromRough(KisPaintDeviceSP src, const QRect &minimalRect)
int sequenceNumber() const
QImage createThumbnail(qint32 maxw, qint32 maxh, QRect rect, qreal oversample=1, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags())
KisPaintDeviceFramesInterface * framesInterface()
QRect exactBounds() const
KisRasterKeyframeChannel * createKeyframeChannel(const KoID &id)
static void copyAreaOptimized(const QPoint &dstPt, KisPaintDeviceSP src, KisPaintDeviceSP dst, const QRect &originalSrcRect)
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
The KisRasterKeyframeChannel is a concrete KisKeyframeChannel subclass that stores and manages KisRas...
void setFilenameSuffix(const QString &suffix)
const KoCompositeOp * compositeOp(const QString &id, const KoColorSpace *srcSpace=nullptr) const
QSharedPointer< T > toQShared(T *ptr)
const QString & compositeOpId() const
virtual QRect exactBounds() const
virtual KisKeyframeChannel * requestKeyframeChannel(const QString &id)
virtual KisPaintDeviceSP original() const =0
void setName(const QString &name)
virtual const KoColorSpace * colorSpace() const =0
virtual QRect extent() const
virtual KisPaintDeviceSP paintDevice() const =0
virtual bool supportsKeyframeChannel(const QString &id)
KisPaintDeviceSP device() const
void setupTemporaryPainter(KisPainter *painter) const
KisPaintDeviceSP temporaryTarget
bool hasTemporaryTarget() const
void notifyChildMaskChanged()
KisPaintDeviceSP original() const override=0
KisPaintDeviceSP projection() const override
void apply(KisPaintDeviceSP projection, const QRect &applyRect, const QRect &needRect, PositionToFilthy maskPos, KisRenderPassFlags flags) const
virtual bool paintsOutsideSelection() const
qint32 x() const override
KisPaintDeviceSP original() const override
virtual QRect nonDependentExtent() const
bool supportsLodPainting() const override
KisKeyframeChannel * requestKeyframeChannel(const QString &id) override
QScopedPointer< QPoint > deferredSelectionOffset
virtual void flattenSelectionProjection(KisSelectionSP selection, const QRect &dirtyRect) const
bool supportsKeyframeChannel(const QString &id) override
void setImage(KisImageWSP image) override
QRect needRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
KisSafeSelectionNodeProjectionStoreSP safeProjection
int thumbnailSeqNo() const override
KisMask(KisImageWSP image, const QString &name)
void initSelectionImpl(KisSelectionSP copyFrom, KisLayerSP parentLayer, KisPaintDeviceSP copyFromDevice, KisImageWSP image)
const KoCompositeOp * compositeOp() const override
virtual QRect decorateRect(KisPaintDeviceSP &src, KisPaintDeviceSP &dst, const QRect &rc, PositionToFilthy maskPos, KisRenderPassFlags flags) const
QImage createThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio) override
qint32 y() const override
void setY(qint32 y) override
void baseNodeChangedCallback() override
KisCachedPaintDevice paintDeviceCache
void testingInitSelection(const QRect &rect, KisLayerSP parentLayer)
const KoColorSpace * colorSpace() const override
void setX(qint32 x) override
virtual void mergeInMaskInternal(KisPaintDeviceSP projection, KisSelectionSP effectiveSelection, const QRect &applyRect, const QRect &preparedNeedRect, PositionToFilthy maskPos, KisRenderPassFlags flags) const
QRect changeRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const override
bool allowAsChild(KisNodeSP node) const override
QRect exactBounds() const override
void initSelection(KisSelectionSP copyFrom, KisLayerSP parentLayer)
initSelection initializes the selection for the mask from the given selection's projection.
void setSelection(KisSelectionSP selection)
KisAbstractProjectionPlaneSP projectionPlane
QRect extent() const override
void select(const QRect &rc, quint8 selectedness=MAX_SELECTED)
KisPaintDeviceSP paintDevice() const override
void baseNodeChangedCallback() override
void setImage(KisImageWSP newImage) override
void addKeyframeChannel(KisKeyframeChannel *channel) override
void select(const QRect &r, quint8 selectedness=MAX_SELECTED)
KisPixelSelectionSP projection() const
void updateProjection(const QRect &rect)
KisImageResolutionProxySP resolutionProxy
KisPixelSelectionSP pixelSelection