timeline: fix issue where transitions wouldn't reconnect on alt+drag

This commit is contained in:
itsmattkc
2023-02-21 18:50:11 -08:00
parent 48a7172ea3
commit 4801891532
@@ -718,6 +718,7 @@ void PointerTool::FinishDrag(TimelineViewMouseEvent *event)
if (!relinks.empty()) {
for (auto it=relinks.cbegin(); it!=relinks.cend(); it++) {
// Re-connect links on duplicate clips
for (auto jt=it.key()->links().cbegin(); jt!=it.key()->links().cend(); jt++) {
Node *link = *jt;
Node *copy_link = relinks.value(link);
@@ -725,6 +726,24 @@ void PointerTool::FinishDrag(TimelineViewMouseEvent *event)
command->add_child(new NodeLinkCommand(it.value(), copy_link, true));
}
}
// Re-connect transitions where applicable
if (ClipBlock *og_clip = dynamic_cast<ClipBlock *>(it.key())) {
ClipBlock *cp_clip = static_cast<ClipBlock *>(it.value());
TransitionBlock *og_in_transition = og_clip->in_transition();
TransitionBlock *og_out_transition = og_clip->out_transition();
if (og_in_transition && relinks.contains(og_in_transition)) {
TransitionBlock *cp_in_transition = static_cast<TransitionBlock *>(relinks.value(og_in_transition));
command->add_child(new NodeEdgeAddCommand(cp_clip, NodeInput(cp_in_transition, TransitionBlock::kInBlockInput)));
}
if (og_out_transition && relinks.contains(og_out_transition)) {
TransitionBlock *cp_out_transition = static_cast<TransitionBlock *>(relinks.value(og_out_transition));
command->add_child(new NodeEdgeAddCommand(cp_clip, NodeInput(cp_out_transition, TransitionBlock::kOutBlockInput)));
}
}
}
}