From 584b8670c0535e67366b407a4a6b9098a241a176 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 22 Jan 2019 14:15:12 +1100 Subject: [PATCH] nested sequence enhancements --- mainwindow.cpp | 3 +++ playback/playback.cpp | 12 +++++++++--- ui/renderfunctions.cpp | 4 ++-- ui/timelinewidget.cpp | 9 +++++++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 8862d93e5..584d64931 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1494,6 +1494,9 @@ void MainWindow::nest() { s->clips.append(copy); } + // relink clips in new nested sequences + panel_timeline->relink_clips_using_ids(selected_clips, s->clips); + // add sequence to project Media* m = panel_project->new_sequence(ca, s, false, nullptr); diff --git a/playback/playback.cpp b/playback/playback.cpp index 4495023e3..2056a2be8 100644 --- a/playback/playback.cpp +++ b/playback/playback.cpp @@ -61,10 +61,15 @@ void open_clip(Clip* clip, bool multithreaded) { } } else { clip->open = true; + clip->finished_opening = true; } } void close_clip(Clip* clip, bool wait) { +// qDebug() << "closing" << clip->name; + + clip->finished_opening = false; + // destroy opengl texture in main thread if (clip->texture != nullptr) { delete clip->texture; @@ -94,8 +99,9 @@ void close_clip(Clip* clip, bool wait) { close_clip_worker(clip); } } else { - if (clip->media != nullptr && clip->media->get_type() == MEDIA_TYPE_SEQUENCE) + if (clip->media != nullptr && clip->media->get_type() == MEDIA_TYPE_SEQUENCE) { closeActiveClips(clip->media->to_sequence()); + } clip->open = false; } @@ -385,8 +391,8 @@ void closeActiveClips(Sequence *s) { if (c != nullptr) { if (c->media != nullptr && c->media->get_type() == MEDIA_TYPE_SEQUENCE) { closeActiveClips(c->media->to_sequence()); - if (c->open) close_clip(c, true); - } else if (c->open) { + if (c->finished_opening) close_clip(c, true); + } else if (c->finished_opening) { close_clip(c, true); } } diff --git a/ui/renderfunctions.cpp b/ui/renderfunctions.cpp index c719acdda..a950fde15 100644 --- a/ui/renderfunctions.cpp +++ b/ui/renderfunctions.cpp @@ -169,7 +169,7 @@ GLuint compose_sequence(Viewer* viewer, } clip_is_active = true; if (c->track >= 0) audio_track_count++; - } else if (c->open) { + } else if (c->finished_opening) { close_clip(c, false); } } else { @@ -181,7 +181,7 @@ GLuint compose_sequence(Viewer* viewer, if (is_clip_active(c, playhead)) { if (!c->open) open_clip(c, !rendering); clip_is_active = true; - } else if (c->open) { + } else if (c->finished_opening) { close_clip(c, false); } } diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index afdd2c0fa..a989fa8f6 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -22,6 +22,7 @@ #include "dialogs/newsequencedialog.h" #include "mainwindow.h" #include "ui/rectangleselect.h" +#include "playback/playback.h" #include "debug.h" #include "project/effect.h" @@ -548,6 +549,14 @@ void TimelineWidget::mouseDoubleClickEvent(QMouseEvent *event) { sequence->selections.append(s); update_ui(false); } + } else if (panel_timeline->tool == TIMELINE_TOOL_POINTER) { + int clip_index = getClipIndexFromCoords(panel_timeline->cursor_frame, panel_timeline->cursor_track); + if (clip_index >= 0) { + Clip* c = sequence->clips.at(clip_index); + if (c->media != nullptr && c->media->get_type() == MEDIA_TYPE_SEQUENCE) { + set_sequence(c->media->to_sequence()); + } + } } }