diff --git a/app/node/input.cpp b/app/node/input.cpp index 033a023f7..34587e5f2 100644 --- a/app/node/input.cpp +++ b/app/node/input.cpp @@ -190,22 +190,24 @@ void NodeInput::childEvent(QChildEvent *event) if (event->type() == QEvent::ChildAdded) { GetImmediate(key->element())->insert_keyframe(key); + connect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::InvalidateFromKeyframeTimeChange); connect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::KeyframeTimeChanged); - connect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::KeyframeValueChanged); - connect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::KeyframeTypeChanged); - connect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::KeyframeBezierInChanged); - connect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::KeyframeBezierOutChanged); + connect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::InvalidateFromKeyframeValueChange); + connect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::InvalidateFromKeyframeTypeChanged); + connect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::InvalidateFromKeyframeBezierInChange); + connect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::InvalidateFromKeyframeBezierOutChange); emit KeyframeAdded(key); emit ValueChanged(get_range_affected_by_keyframe(key), key->element()); } else if (event->type() == QEvent::ChildRemoved) { TimeRange time_affected = get_range_affected_by_keyframe(key); + disconnect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::InvalidateFromKeyframeTimeChange); disconnect(key, &NodeKeyframe::TimeChanged, this, &NodeInput::KeyframeTimeChanged); - disconnect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::KeyframeValueChanged); - disconnect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::KeyframeTypeChanged); - disconnect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::KeyframeBezierInChanged); - disconnect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::KeyframeBezierOutChanged); + disconnect(key, &NodeKeyframe::ValueChanged, this, &NodeInput::InvalidateFromKeyframeValueChange); + disconnect(key, &NodeKeyframe::TypeChanged, this, &NodeInput::InvalidateFromKeyframeTypeChanged); + disconnect(key, &NodeKeyframe::BezierControlInChanged, this, &NodeInput::InvalidateFromKeyframeBezierInChange); + disconnect(key, &NodeKeyframe::BezierControlOutChanged, this, &NodeInput::InvalidateFromKeyframeBezierOutChange); GetImmediate(key->element())->remove_keyframe(key); @@ -701,7 +703,7 @@ void NodeInput::set_combobox_strings(const QStringList &strings) setProperty("combo_str", strings); } -void NodeInput::KeyframeBezierInChanged() +void NodeInput::InvalidateFromKeyframeBezierInChange() { NodeKeyframe* key = static_cast(sender()); const NodeKeyframeTrack& track = GetTrackFromKeyframe(key); @@ -717,7 +719,7 @@ void NodeInput::KeyframeBezierInChanged() emit ValueChanged(TimeRange(start, end), key->element()); } -void NodeInput::KeyframeBezierOutChanged() +void NodeInput::InvalidateFromKeyframeBezierOutChange() { NodeKeyframe* key = static_cast(sender()); const NodeKeyframeTrack& track = GetTrackFromKeyframe(key); @@ -733,7 +735,7 @@ void NodeInput::KeyframeBezierOutChanged() emit ValueChanged(TimeRange(start, end), key->element()); } -void NodeInput::KeyframeTimeChanged() +void NodeInput::InvalidateFromKeyframeTimeChange() { NodeKeyframe* key = static_cast(sender()); NodeInputImmediate* immediate = GetImmediate(key->element()); @@ -760,13 +762,13 @@ void NodeInput::KeyframeTimeChanged() } } -void NodeInput::KeyframeValueChanged() +void NodeInput::InvalidateFromKeyframeValueChange() { NodeKeyframe* key = static_cast(sender()); emit ValueChanged(get_range_affected_by_keyframe(key), key->element()); } -void NodeInput::KeyframeTypeChanged() +void NodeInput::InvalidateFromKeyframeTypeChanged() { NodeKeyframe* key = static_cast(sender()); const NodeKeyframeTrack& track = GetTrackFromKeyframe(key); diff --git a/app/node/input.h b/app/node/input.h index 73f8e9a17..66da59718 100644 --- a/app/node/input.h +++ b/app/node/input.h @@ -347,6 +347,8 @@ signals: void KeyframeRemoved(NodeKeyframe* key); + void KeyframeTimeChanged(); + void PropertyChanged(const QString& s, const QVariant& v); void ArraySizeChanged(int size); @@ -445,27 +447,27 @@ private slots: /** * @brief Slot when a keyframe's time changes to keep the keyframes correctly sorted by time */ - void KeyframeTimeChanged(); + void InvalidateFromKeyframeTimeChange(); /** * @brief Slot when a keyframe's value changes to signal that the cache needs updating */ - void KeyframeValueChanged(); + void InvalidateFromKeyframeValueChange(); /** * @brief Slot when a keyframe's type changes to signal that the cache needs updating */ - void KeyframeTypeChanged(); + void InvalidateFromKeyframeTypeChanged(); /** * @brief Slot when a keyframe's bezier in value changes to signal that the cache needs updating */ - void KeyframeBezierInChanged(); + void InvalidateFromKeyframeBezierInChange(); /** * @brief Slot when a keyframe's bezier out value changes to signal that the cache needs updating */ - void KeyframeBezierOutChanged(); + void InvalidateFromKeyframeBezierOutChange(); }; diff --git a/app/widget/nodeparamview/nodeparamviewkeyframecontrol.cpp b/app/widget/nodeparamview/nodeparamviewkeyframecontrol.cpp index 32698c861..8b583c963 100644 --- a/app/widget/nodeparamview/nodeparamviewkeyframecontrol.cpp +++ b/app/widget/nodeparamview/nodeparamviewkeyframecontrol.cpp @@ -77,6 +77,7 @@ void NodeParamViewKeyframeControl::SetInput(NodeInput *input, int element) disconnect(input_, &NodeInput::KeyframeEnableChanged, enable_key_btn_, &QPushButton::setChecked); disconnect(input_, &NodeInput::KeyframeAdded, this, &NodeParamViewKeyframeControl::UpdateState); disconnect(input_, &NodeInput::KeyframeRemoved, this, &NodeParamViewKeyframeControl::UpdateState); + disconnect(input_, &NodeInput::KeyframeTimeChanged, this, &NodeParamViewKeyframeControl::UpdateState); } input_ = input; @@ -93,6 +94,7 @@ void NodeParamViewKeyframeControl::SetInput(NodeInput *input, int element) connect(input_, &NodeInput::KeyframeEnableChanged, enable_key_btn_, &QPushButton::setChecked); connect(input_, &NodeInput::KeyframeAdded, this, &NodeParamViewKeyframeControl::UpdateState); connect(input_, &NodeInput::KeyframeRemoved, this, &NodeParamViewKeyframeControl::UpdateState); + connect(input_, &NodeInput::KeyframeTimeChanged, this, &NodeParamViewKeyframeControl::UpdateState); } }