fixed timeline issues

This commit is contained in:
itsmattkc
2019-01-27 10:43:29 +11:00
parent 05b2f73b1e
commit a4eb3df21a
4 changed files with 45 additions and 27 deletions
+17 -13
View File
@@ -515,7 +515,7 @@ void Timeline::delete_in_out(bool ripple) {
areas.append(s);
}
ComboAction* ca = new ComboAction();
delete_areas_and_relink(ca, areas);
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, sequence->workarea_in, sequence->workarea_in - sequence->workarea_out);
ca->append(new SetTimelineInOutCommand(sequence, false, 0, 0));
undo_stack.push(ca);
@@ -529,7 +529,7 @@ void Timeline::delete_selection(QVector<Selection>& selections, bool ripple_dele
ComboAction* ca = new ComboAction();
delete_areas_and_relink(ca, selections);
delete_areas_and_relink(ca, selections, true);
if (ripple_delete) {
long ripple_point = selections.at(0).in;
@@ -807,7 +807,7 @@ bool selection_contains_transition(const Selection& s, Clip* c, int type) {
}
}
void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& areas) {
void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& areas, bool deselect_areas) {
clean_up_selections(areas);
panel_effect_controls->clear_effects(true);
@@ -864,10 +864,12 @@ void Timeline::delete_areas_and_relink(ComboAction* ca, QVector<Selection>& area
}
// deselect selected clip areas
QVector<Selection> area_copy = areas;
for (int i=0;i<area_copy.size();i++) {
const Selection& s = area_copy.at(i);
deselect_area(s.in, s.out, s.track);
if (deselect_areas) {
QVector<Selection> area_copy = areas;
for (int i=0;i<area_copy.size();i++) {
const Selection& s = area_copy.at(i);
deselect_area(s.in, s.out, s.track);
}
}
relink_clips_using_ids(pre_clips, post_clips);
@@ -992,7 +994,7 @@ void Timeline::paste(bool insert) {
split_all_clips_at_point(ca, sequence->playhead);
ripple_clips(ca, sequence, paste_start, paste_end - paste_start);
} else {
delete_areas_and_relink(ca, delete_areas);
delete_areas_and_relink(ca, delete_areas, false);
}
// correct linked clips
@@ -1160,7 +1162,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
}
// trim and move clips around the in point
delete_areas_and_relink(ca, areas);
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, in_point, -1);
} else {
@@ -1185,7 +1187,7 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
}
// trim and move clips around the in point
delete_areas_and_relink(ca, areas);
delete_areas_and_relink(ca, areas, true);
if (ripple) ripple_clips(ca, sequence, s.in, s.in - s.out);
}
}
@@ -1225,6 +1227,11 @@ bool Timeline::split_selection(ComboAction* ca) {
pre_splits.append(j);
post_splits.append(post_a);
secondary_post_splits.append(post_b);
if (post_a != nullptr) {
post_a->timeline_out = qMin(post_a->timeline_out, s.out);
}
split = true;
}
}
@@ -1236,9 +1243,6 @@ bool Timeline::split_selection(ComboAction* ca) {
relink_clips_using_ids(pre_splits, post_splits);
relink_clips_using_ids(pre_splits, secondary_post_splits);
post_splits.removeAll(nullptr);
secondary_post_splits.removeAll(nullptr);
ca->append(new AddClipCommand(sequence, post_splits));
ca->append(new AddClipCommand(sequence, secondary_post_splits));
+1 -1
View File
@@ -85,7 +85,7 @@ public:
bool split_clip_and_relink(ComboAction* ca, int clip, long frame, bool relink);
void clean_up_selections(QVector<Selection>& areas);
void deselect_area(long in, long out, int track);
void delete_areas_and_relink(ComboAction *ca, QVector<Selection>& areas);
void delete_areas_and_relink(ComboAction *ca, QVector<Selection>& areas, bool deselect_areas);
void relink_clips_using_ids(QVector<int>& old_clips, QVector<Clip*>& new_clips);
void update_sequence();
void increase_track_height();
+11 -7
View File
@@ -513,14 +513,18 @@ void AddClipCommand::redo() {
int linkOffset = seq->clips.size();
for (int i=0;i<clips.size();i++) {
Clip* original = clips.at(i);
Clip* copy = original->copy(seq);
copy->linked.resize(original->linked.size());
for (int j=0;j<original->linked.size();j++) {
copy->linked[j] = original->linked.at(j) + linkOffset;
if (original != nullptr) {
Clip* copy = original->copy(seq);
copy->linked.resize(original->linked.size());
for (int j=0;j<original->linked.size();j++) {
copy->linked[j] = original->linked.at(j) + linkOffset;
}
if (original->opening_transition > -1) copy->opening_transition = original->get_opening_transition()->copy(copy, nullptr);
if (original->closing_transition > -1) copy->closing_transition = original->get_closing_transition()->copy(copy, nullptr);
seq->clips.append(copy);
} else {
seq->clips.append(nullptr);
}
if (original->opening_transition > -1) copy->opening_transition = original->get_opening_transition()->copy(copy, nullptr);
if (original->closing_transition > -1) copy->closing_transition = original->get_closing_transition()->copy(copy, nullptr);
seq->clips.append(copy);
}
}
mainWindow->setWindowModified(true);
+16 -6
View File
@@ -425,7 +425,7 @@ void delete_area_under_ghosts(ComboAction* ca) {
sel.track = g.track;
delete_areas.append(sel);
}
panel_timeline->delete_areas_and_relink(ca, delete_areas);
panel_timeline->delete_areas_and_relink(ca, delete_areas, false);
}
void insert_clips(ComboAction* ca) {
@@ -825,7 +825,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
s.track = c->track;
QVector<Selection> areas;
areas.append(s);
panel_timeline->delete_areas_and_relink(ca, areas);
panel_timeline->delete_areas_and_relink(ca, areas, false);
}
QVector<Clip*> add;
@@ -880,7 +880,17 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
}
}
} else if (panel_timeline->moving_proc) {
if (panel_timeline->ghosts.size() > 0) {
bool process_moving = false;
for (int i=0;i<panel_timeline->ghosts.size();i++) {
const Ghost& g = panel_timeline->ghosts.at(i);
if (g.in != g.old_in || g.out != g.old_out || g.clip_in != g.old_clip_in) {
process_moving = true;
break;
}
}
if (process_moving) {
const Ghost& first_ghost = panel_timeline->ghosts.at(0);
// if we were RIPPLING, move all the clips
@@ -949,7 +959,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
}
}
if (new_clips.size() > 0) {
panel_timeline->delete_areas_and_relink(ca, delete_areas);
panel_timeline->delete_areas_and_relink(ca, delete_areas, false);
// relink duplicated clips
panel_timeline->relink_clips_using_ids(old_clips, new_clips);
@@ -979,7 +989,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
s.track = g.track;
delete_areas.append(s);
}
panel_timeline->delete_areas_and_relink(ca, delete_areas);
panel_timeline->delete_areas_and_relink(ca, delete_areas, false);
for (int i=0;i<panel_timeline->ghosts.size();i++) {
const Ghost& g = panel_timeline->ghosts.at(i);
sequence->clips.at(g.clip)->undeletable = false;
@@ -1112,7 +1122,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
move_pre = true;
}
panel_timeline->delete_areas_and_relink(ca, areas);
panel_timeline->delete_areas_and_relink(ca, areas, false);
if (move_post) move_clip(ca, post, qMin(transition_start, post->timeline_in), post->timeline_out, post->clip_in - (post->timeline_in - transition_start), post->track);
if (move_pre) move_clip(ca, pre, pre->timeline_in, qMax(transition_end, pre->timeline_out), pre->clip_in, pre->track);