Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_node.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef _KIS_NODE_H
7#define _KIS_NODE_H
8
9#include "kis_types.h"
10
11#include "kis_base_node.h"
13#include <KisQStringListFwd.h>
14
15#include "kritaimage_export.h"
16
17#include <QVector>
18#include <KisRegion.h>
19
20class QRect;
21class KoProperties;
22
23class KisNodeVisitor;
30class KisTimeSpan;
31class KisUndoAdapter;
33
46class KRITAIMAGE_EXPORT KisNode : public KisBaseNode
47{
48 friend class KisFilterMaskTest;
49 Q_OBJECT
50
51public:
59 N_ABOVE_FILTHY = 0x08,
60 N_FILTHY_PROJECTION = 0x20,
61 N_FILTHY = 0x40,
62 N_BELOW_FILTHY = 0x80
63 };
64
68 KisNode(KisImageWSP image);
69
74 KisNode(const KisNode & rhs);
75
79 ~KisNode() override;
80
81 virtual KisNodeSP clone() const = 0;
82
83 bool accept(KisNodeVisitor &v) override;
84 void accept(KisProcessingVisitor &visitor, KisUndoAdapter *undoAdapter) override;
85
92 virtual bool allowAsChild(KisNodeSP) const = 0;
93
99 virtual void setDirty();
100
106 void setDirty(const QRect & rect);
107
113 virtual void setDirty(const QVector<QRect> &rects);
114
120 void setDirty(const KisRegion &region);
121
127 void setDirtyDontResetAnimationCache();
128
134 void setDirtyDontResetAnimationCache(const QRect &rect);
135
141 void setDirtyDontResetAnimationCache(const QVector<QRect> &rects);
142
148 void invalidateFrames(const KisTimeSpan &range, const QRect &rect);
149
150 virtual void handleKeyframeChannelFrameChange(const KisKeyframeChannel *channel, int time);
151 virtual void handleKeyframeChannelFrameAdded(const KisKeyframeChannel *channel, int time);
152 void handleKeyframeChannelFrameAboutToBeRemoved(const KisKeyframeChannel *channel, int time);
153 void handleKeyframeChannelFrameHasBeenRemoved(const KisKeyframeChannel *channel, int time);
154
159 void requestTimeSwitch(int time);
160
173 virtual KisAbstractProjectionPlaneSP projectionPlane() const;
174
180 virtual void syncLodCache();
181 virtual KisPaintDeviceList getLodCapableDevices() const;
182
192
193
194 void setImage(KisImageWSP newImage) override;
195
196protected:
197
209 virtual QRect changeRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const;
210
220 virtual QRect needRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const;
221
222
244 virtual QRect accessRect(const QRect &rect, PositionToFilthy pos = N_FILTHY) const;
245
251 virtual void childNodeChanged(KisNodeSP changedChildNode);
252
253public: // Graph methods
254
260 int graphSequenceNumber() const;
261
267
272 void setGraphListener(KisNodeGraphListener * graphListener);
273
279
284 KisNodeSP firstChild() const;
285
290 KisNodeSP lastChild() const;
291
298 KisNodeSP prevSibling() const;
299
306 KisNodeSP nextSibling() const;
307
312 quint32 childCount() const;
313
319 KisNodeSP at(quint32 index) const;
320
327 int index(const KisNodeSP node) const;
328
329
340 QList<KisNodeSP> childNodes(const QStringList & nodeTypes, const KoProperties & properties) const;
341
342Q_SIGNALS:
347
348public:
349
356
358
359private:
360
366 void createNodeProgressProxy();
367
368protected:
369 KisBaseNodeSP parentCallback() const override;
370 void notifyParentVisibilityChanged(bool value) override;
371 void baseNodeChangedCallback() override;
373 void baseNodeCollapsedChangedCallback() override;
374
375protected:
376 void addKeyframeChannel(KisKeyframeChannel* channel) override;
377 virtual KisFrameChangeUpdateRecipe handleKeyframeChannelFrameAboutToBeRemovedImpl(const KisKeyframeChannel *channel, int time);
378
379private:
380
381 friend class KisNodeFacade;
382 friend class KisNodeTest;
383 friend class KisLayer; // Note: only for setting the preview mask!
387 void setParent(KisNodeWSP parent);
388
393 bool add(KisNodeSP newNode, KisNodeSP aboveThis, KisNodeAdditionFlags flags = KisNodeAdditionFlag::None);
394
400 bool remove(quint32 index);
401
407 bool remove(KisNodeSP node);
408
409 KisNodeSP prevChildImpl(KisNodeSP child);
410 KisNodeSP nextChildImpl(KisNodeSP child);
411
412private:
413
414 struct Private;
415 Private * const m_d;
416
417};
418
419#ifndef Q_DECLARE_KISNODE
420#define Q_DECLARE_KISNODE
423#endif
424#endif
float value(const T *src, size_t ch)
qreal v
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
Q_DECLARE_METATYPE(KisPaintopLodLimitations)
virtual bool accept(KisNodeVisitor &)
virtual void baseNodeInvalidateAllFramesCallback()
virtual void baseNodeCollapsedChangedCallback()
virtual void baseNodeChangedCallback()
virtual void setImage(KisImageWSP image)
virtual void notifyParentVisibilityChanged(bool value)
virtual void addKeyframeChannel(KisKeyframeChannel *channel)
virtual KisBaseNodeSP parentCallback() const
KisNodeGraphListener * graphListener() const
virtual KisProjectionLeafSP projectionLeaf() const
virtual KisNodeSP clone() const =0
PositionToFilthy
Definition kis_node.h:58
Private *const m_d
Definition kis_node.h:415
KisBusyProgressIndicator * busyProgressIndicator() const
void sigNodeChangedInternal()
KisNodeSP parent() const
KisNodeProgressProxy * nodeProgressProxy() const
virtual bool allowAsChild(KisNodeSP) const =0