8#include <klocalizedstring.h>
34 bool collapsed {
false};
35 bool supportsLodMoves {
false};
36 bool animated {
false};
37 bool pinnedToTimeline {
false};
42 : id(QUuid::createUuid())
49 : compositeOp(rhs.compositeOp),
50 id(QUuid::createUuid()),
52 collapsed(rhs.collapsed),
53 supportsLodMoves(rhs.supportsLodMoves),
54 animated(rhs.animated),
55 pinnedToTimeline(rhs.pinnedToTimeline),
58 QMapIterator<QString, QVariant> iter = rhs.properties.propertyIterator();
59 while (iter.hasNext()) {
85 connect(&
m_d->opacityProperty, SIGNAL(changed(quint8)),
this, SIGNAL(
opacityChanged(quint8)));
94 if (rhs.
m_d->opacityProperty.hasChannel()) {
95 m_d->opacityProperty.transferKeyframeData(rhs.
m_d->opacityProperty);
96 m_d->keyframeChannels.insert(
m_d->opacityProperty.channel()->id(),
m_d->opacityProperty.channel());
99 connect(&
m_d->opacityProperty, SIGNAL(changed(quint8)),
this, SIGNAL(
opacityChanged(quint8)));
114 return m_d->opacityProperty.get();
119 m_d->opacityProperty.set(val);
125 return int(
float(
opacity() * 100) / 255 + 0.5);
130 setOpacity(
int(
float(val * 255) / 100 + 0.5));
135 return m_d->compositeOp;
164 return m_d->properties;
176 while (iter.hasNext()) {
178 m_d->properties.setProperty(iter.key(), iter.value());
187 while (iter.hasNext()) {
189 if (
m_d->properties.contains(iter.key())) {
190 if (
m_d->properties.value(iter.key()) != iter.value())
200 Q_UNUSED(aspectRatioMode);
201 Q_UNUSED(boundsMode);
204 QImage
image(w, h, QImage::Format_ARGB32);
207 }
catch (
const std::bad_alloc&) {
220 return m_d->thumbnailBoundsMode;
249 return recursive && isVisible && parentNode ?
250 parentNode->visible(recursive) : isVisible;
256 if (!loading && isVisible ==
visible)
return;
297 const KisBaseNode* isolatedRoot =
m_d->image->isolationRootNode().data();
299 return (
this == isolatedRoot);
305 if (isLocked == locked)
return;
313 bool editable =
true;
314 if (checkVisibility) {
323 if (parentNode && parentNode !=
this) {
324 editable = parentNode->isEditable(checkVisibility);
337 const bool oldCollapsed =
m_d->collapsed;
348 return m_d->collapsed;
355 if (currentLabel == index)
return;
379 return m_d->supportsLodMoves;
411 return m_d->keyframeChannels;
416 QMap<QString, KisKeyframeChannel*>::const_iterator i =
m_d->keyframeChannels.constFind(
id);
417 if (i ==
m_d->keyframeChannels.constEnd()) {
425 return m_d->pinnedToTimeline;
430 if (pinned ==
m_d->pinnedToTimeline)
return;
432 m_d->pinnedToTimeline = pinned;
440 if (!channel && create) {
453 return m_d->animated;
458 m_d->animated =
true;
464 m_d->keyframeChannels.insert(channel->
id(), channel);
471 Q_ASSERT(!
m_d->opacityProperty.hasChannel());
476 if (device && node) {
477 m_d->opacityProperty.makeAnimated(node);
478 return m_d->opacityProperty.channel();
496 dbg.nospace() <<
"Property(" << prop.
id <<
", " << prop.
state;
499 dbg.nospace() <<
", in-stasis";
502 dbg.nospace() <<
")";
float value(const T *src, size_t ch)
const quint8 OPACITY_OPAQUE_U8
const QString COMPOSITE_OVER
KisKeyframeChannel stores and manages KisKeyframes. Maps units of time to virtual keyframe values....
static const KoID Opacity
static const KoID colorLabelIndex
static KisBaseNode::Property getProperty(const KoID &id, bool state)
static const KoID visible
QMapIterator< QString, QVariant > propertyIterator() const
void setProperty(const QString &name, const QVariant &value)
QDebug operator<<(QDebug dbg, const KisBaseNode::Property &prop)
void setPinnedToTimeline(bool pinned)
void setNodeProperty(const QString &name, const QVariant &value)
void setSupportsLodMoves(bool value)
virtual bool supportsLodPainting() const
QMap< QString, KisKeyframeChannel * > keyframeChannels
quint8 percentOpacity() const
virtual KisPaintDeviceSP colorSampleSourceDevice() const
virtual void setUserLocked(bool l)
bool isIsolatedRoot() const
virtual void baseNodeInvalidateAllFramesCallback()
virtual KisPaintDeviceSP projection() const =0
const QString & compositeOpId() const
virtual void baseNodeCollapsedChangedCallback()
virtual QImage createThumbnailForFrame(qint32 w, qint32 h, int time, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio, KisThumbnailBoundsMode boundsMode=KisThumbnailBoundsMode::Precise)
bool isEditable(bool checkVisibility=true) const
virtual void baseNodeChangedCallback()
KisBaseNode(KisImageWSP image)
void setOpacity(quint8 val)
virtual void setVisible(bool visible, bool loading=false)
bool isPinnedToTimeline() const
KisKeyframeChannel * getKeyframeChannel(const QString &id, bool create)
void mergeNodeProperties(const KoProperties &properties)
QImage createPreferredThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)
virtual void setImage(KisImageWSP image)
virtual KisKeyframeChannel * requestKeyframeChannel(const QString &id)
bool belongsToIsolatedGroup() const
const KoProperties & nodeProperties() const
virtual KisPaintDeviceSP original() const =0
KisAnimatedOpacityProperty opacityProperty
virtual void notifyParentVisibilityChanged(bool value)
void setUuid(const QUuid &id)
KisThumbnailBoundsMode preferredThumbnailBoundsMode() const
void setColorLabelIndex(int index)
KisBaseNode::Property hack_visible
Private(KisImageWSP p_image)
void setCollapsed(bool collapsed)
virtual int thumbnailSeqNo() const
void keyframeChannelAdded(KisKeyframeChannel *channel)
int colorLabelIndex() const
void opacityChanged(quint8 value)
void setPercentOpacity(quint8 val)
virtual QImage createThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio, KisThumbnailBoundsMode boundsMode=KisThumbnailBoundsMode::Precise)
virtual KisPaintDeviceSP paintDevice() const =0
virtual PropertyList sectionModelProperties() const
void setPreferredThumbnailBoundsMode(KisThumbnailBoundsMode value) const
void setCompositeOpId(const QString &compositeOpId)
Private(const Private &rhs)
virtual void addKeyframeChannel(KisKeyframeChannel *channel)
virtual bool isFakeNode() const
bool check(const KoProperties &properties) const
virtual bool visible(bool recursive=false) const
virtual KisBaseNodeSP parentCallback() const
bool hasEditablePaintDevice() const
virtual bool supportsKeyframeChannel(const QString &id)
virtual void setSectionModelProperties(const PropertyList &properties)
QImage createPreferredThumbnailForFrame(qint32 w, qint32 h, int time, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)