Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_layer.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
3 * SPDX-FileCopyrightText: 2005 C. Boemann <cbo@boemann.dk>
4 * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org>
5 * SPDX-FileCopyrightText: 2009 Dmitry Kazakov <dimula73@gmail.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9#ifndef KIS_LAYER_H_
10#define KIS_LAYER_H_
11
12#include <QRect>
13#include <QMetaType>
14#include <QObject>
15
16#include "kritaimage_export.h"
17
18#include "kis_base_node.h"
19
20#include "kis_types.h"
21#include "kis_node.h"
22#include "kis_psd_layer_style.h"
23
24#include "KisRenderPassFlags.h"
25
26template <class T>
27class QStack;
28
29class QBitArray;
30class KisCloneLayer;
35
36
37namespace KisMetaData
38{
39class Store;
40}
41
54class KRITAIMAGE_EXPORT KisLayer : public KisNode
55{
56
57 Q_OBJECT
58
59public:
60
65 KisLayer(KisImageWSP image, const QString &name, quint8 opacity);
66 KisLayer(const KisLayer& rhs);
67 ~KisLayer() override;
68
70 const KoColorSpace * colorSpace() const override;
71
73 const KoCompositeOp * compositeOp() const override;
74
76 void setLayerStyle(KisPSDLayerStyleSP layerStyle);
77
82
88 virtual KisLayerProjectionPlaneSP internalProjectionPlane() const;
89
90 QRect partialChangeRect(KisNodeSP lastNode, const QRect& rect);
91 void buildProjectionUpToNode(KisPaintDeviceSP projection, KisNodeSP lastNode, const QRect& rect);
92
93 virtual bool needProjection() const;
94
99 KisPaintDeviceSP projection() const override;
100
105 KisPaintDeviceSP original() const override = 0;
106
111 virtual KisSelectionMaskSP selectionMask() const;
112
117 virtual KisSelectionSP selection() const;
118
120 void setSectionModelProperties(const KisBaseNode::PropertyList &properties) override;
121
125 void disableAlphaChannel(bool disable);
126
132 bool alphaChannelDisabled() const;
133
140 virtual void setChannelFlags(const QBitArray & channelFlags);
141
147 QBitArray & channelFlags() const;
148
154 bool temporary() const;
155
161 void setTemporary(bool t);
162
166 void setImage(KisImageWSP image) override;
167
179 virtual KisLayerSP createMergedLayerTemplate(KisLayerSP prevLayer);
180 virtual void fillMergedLayerTemplate(KisLayerSP dstLayer, KisLayerSP prevLayer, bool skipPaintingThisLayer = false);
181
186 void registerClone(KisCloneLayerWSP clone);
187
193 void unregisterClone(KisCloneLayerWSP clone);
194
199 const QList<KisCloneLayerWSP> registeredClones() const;
200
201
208 bool hasClones() const;
209
213 void updateClones(const QRect &rect, bool dontInvalidateFrames);
214
218 void notifyChildMaskChanged();
219
220public:
221 qint32 x() const override;
222 qint32 y() const override;
223
224 void setX(qint32 x) override;
225 void setY(qint32 y) override;
226
231 QRect extent() const override;
232
237 QRect exactBounds() const override;
238
239 QImage createThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio) override;
240
241 int thumbnailSeqNo() const override;
242
243 QImage createThumbnailForFrame(qint32 w, qint32 h, int time, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio) override;
244
251 QRect tightUserVisibleBounds() const;
252
261 QRect looseUserVisibleBounds() const;
262
263public:
267 bool hasEffectMasks() const;
268
272 QList<KisEffectMaskSP> effectMasks() const;
273
277 QList<KisEffectMaskSP> effectMasks(KisNodeSP lastNode) const;
278
282 KisFilterMaskSP colorOverlayMask() const;
283
287 KisLayerSP parentLayer() const;
288
292 KisMetaData::Store* metaData();
293
294protected:
300 virtual QRect amortizedProjectionRectForCleanupInChangePass() const;
301
302 // override from KisNode
303 QRect changeRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const override;
304
305 void childNodeChanged(KisNodeSP changedChildNode) override;
306
307protected:
308
313 QRect updateProjection(const QRect& rect, KisNodeSP filthyNode, KisRenderPassFlags flags);
314
322 virtual void copyOriginalToProjection(const KisPaintDeviceSP original,
323 KisPaintDeviceSP projection,
324 const QRect& rect) const;
366 virtual QRect incomingChangeRect(const QRect &rect) const;
367
371 virtual QRect outgoingChangeRect(const QRect &rect) const;
372
386 QRect needRectForOriginal(const QRect &rect) const;
387
394 QRect masksChangeRect(const QList<KisEffectMaskSP> &masks,
395 const QRect &requestedRect,
396 bool &rectVariesFlag) const;
397
410 QRect masksNeedRect(const QList<KisEffectMaskSP> &masks,
411 const QRect &changeRect,
412 QStack<QRect> &applyRects,
413 bool &rectVariesFlag) const;
414
415 QRect applyMasks(const KisPaintDeviceSP source,
416 KisPaintDeviceSP destination,
417 const QRect &requestedRect,
418 KisNodeSP filthyNode,
419 KisNodeSP lastNode,
420 KisRenderPassFlags flags) const;
421
422 bool canMergeAndKeepBlendOptions(KisLayerSP otherLayer);
423
424 QList<KisEffectMaskSP> searchEffectMasks(KisNodeSP lastNode) const;
425
426private:
427 friend class KisLayerMasksCache;
429 friend class KisTransformMask;
430 friend class KisLayerTest;
431
432private:
433 QRect layerExtentImpl(bool exactBounds) const;
434 QRect userVisibleBoundsImpl(bool exactBounds) const;
435
436private:
437 struct Private;
438 Private * const m_d;
439};
440
442
443#endif // KIS_LAYER_H_
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
QSharedPointer< KisLayerProjectionPlane > KisLayerProjectionPlaneSP
Definition kis_layer.h:34
Q_DECLARE_METATYPE(KisPaintopLodLimitations)
virtual KisPaintDeviceSP projection() const =0
virtual qint32 y() const
virtual QRect exactBounds() const
virtual QImage createThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)
virtual void setX(qint32)
virtual void setY(qint32)
virtual const KoColorSpace * colorSpace() const =0
virtual int thumbnailSeqNo() const
QString compositeOp
virtual qint32 x() const
virtual QRect extent() const
virtual PropertyList sectionModelProperties() const
virtual QImage createThumbnailForFrame(qint32 w, qint32 h, int time, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)
virtual void setSectionModelProperties(const PropertyList &properties)
QBitArray & channelFlags() const
KisAbstractProjectionPlaneSP projectionPlane() const override
Private *const m_d
Definition kis_layer.h:438
KisPaintDeviceSP original() const override=0
KisPSDLayerStyleSP layerStyle() const
friend class KisLayer
Definition kis_node.h:383
void setImage(KisImageWSP newImage) override
Definition kis_node.cpp:254
virtual QRect changeRect(const QRect &rect, PositionToFilthy pos=N_FILTHY) const
Definition kis_node.cpp:224
PositionToFilthy
Definition kis_node.h:58
virtual void childNodeChanged(KisNodeSP changedChildNode)
Definition kis_node.cpp:236
The KisPSDLayerStyle class implements loading, saving and applying the PSD layer effects.