fixed timeline issues
This commit is contained in:
+17
-13
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user