fixed ripple to point regression

This commit is contained in:
itsmattkc
2018-12-30 23:09:26 +11:00
parent 1204a69baa
commit 02d7f00304
5 changed files with 38 additions and 20 deletions
+5 -4
View File
@@ -150,7 +150,7 @@ void ripple_clips(ComboAction* ca, Sequence *s, long point, long length, const Q
Clip* c = s->clips.at(i);
if (c != NULL) {
if (c->timeline_in >= point) {
move_clip(ca, c, c->timeline_in + length, c->timeline_out + length, c->clip_in, c->track, true);
move_clip(ca, c, length, length, 0, 0, true, true);
}
}
}
@@ -1108,7 +1108,8 @@ void Timeline::ripple_to_in_point(bool in, bool ripple) {
// trim and move clips around the in point
delete_areas_and_relink(ca, areas);
if (ripple) ripple_clips(ca, sequence, in_point+1, -1);
if (ripple) ripple_clips(ca, sequence, in_point, -1);
} else {
push_undo = false;
}
@@ -1785,8 +1786,8 @@ void Timeline::setup_ui() {
setWidget(dockWidgetContents);
}
void move_clip(ComboAction* ca, Clip *c, long iin, long iout, long iclip_in, int itrack, bool verify_transitions) {
ca->append(new MoveClipAction(c, iin, iout, iclip_in, itrack));
void move_clip(ComboAction* ca, Clip *c, long iin, long iout, long iclip_in, int itrack, bool verify_transitions, bool relative) {
ca->append(new MoveClipAction(c, iin, iout, iclip_in, itrack, relative));
if (verify_transitions) {
if (c->get_opening_transition() != NULL && c->get_opening_transition()->secondary_clip != NULL && c->get_opening_transition()->secondary_clip->timeline_out != iin) {
+1 -1
View File
@@ -40,7 +40,7 @@ int getScreenPointFromFrame(double zoom, long frame);
long getFrameFromScreenPoint(double zoom, int x);
void draw_selection_rectangle(QPainter& painter, const QRect& rect);
bool selection_contains_transition(const Selection& s, Clip* c, int type);
void move_clip(ComboAction *ca, Clip *c, long iin, long iout, long iclip_in, int itrack, bool verify_transitions = true);
void move_clip(ComboAction *ca, Clip *c, long iin, long iout, long iclip_in, int itrack, bool verify_transitions = true, bool relative = false);
void ripple_clips(ComboAction *ca, Sequence* s, long point, long length, const QVector<int>& ignore = QVector<int>());
struct Ghost {
+24 -9
View File
@@ -61,7 +61,7 @@ void ComboAction::appendPost(QUndoCommand* u) {
post_commands.append(u);
}
MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int itrack) :
MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int itrack, bool irelative) :
clip(c),
old_in(c->timeline_in),
old_out(c->timeline_out),
@@ -71,23 +71,38 @@ MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int
new_out(iout),
new_clip_in(iclip_in),
new_track(itrack),
relative(irelative),
old_project_changed(mainWindow->isWindowModified())
{}
void MoveClipAction::undo() {
clip->timeline_in = old_in;
clip->timeline_out = old_out;
clip->clip_in = old_clip_in;
clip->track = old_track;
if (relative) {
clip->timeline_in -= new_in;
clip->timeline_out -= new_out;
clip->clip_in -= new_clip_in;
clip->track -= new_track;
} else {
clip->timeline_in = old_in;
clip->timeline_out = old_out;
clip->clip_in = old_clip_in;
clip->track = old_track;
}
mainWindow->setWindowModified(old_project_changed);
}
void MoveClipAction::redo() {
clip->timeline_in = new_in;
clip->timeline_out = new_out;
clip->clip_in = new_clip_in;
clip->track = new_track;
if (relative) {
clip->timeline_in += new_in;
clip->timeline_out += new_out;
clip->clip_in += new_clip_in;
clip->track += new_track;
} else {
clip->timeline_in = new_in;
clip->timeline_out = new_out;
clip->clip_in = new_clip_in;
clip->track = new_track;
}
mainWindow->setWindowModified(true);
}
+3 -1
View File
@@ -41,7 +41,7 @@ private:
class MoveClipAction : public QUndoCommand {
public:
MoveClipAction(Clip* c, long iin, long iout, long iclip_in, int itrack);
MoveClipAction(Clip* c, long iin, long iout, long iclip_in, int itrack, bool irelative);
void undo();
void redo();
private:
@@ -57,6 +57,8 @@ private:
long new_clip_in;
int new_track;
bool relative;
bool old_project_changed;
};
+5 -5
View File
@@ -975,7 +975,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
// step 3 - move clips
Clip* c = sequence->clips.at(g.clip);
if (g.transition == NULL) {
move_clip(ca, c, c->timeline_in + (g.in - g.old_in), c->timeline_out + (g.out - g.old_out), c->clip_in + (g.clip_in - g.old_clip_in), c->track + (g.track - g.old_track));
move_clip(ca, c, (g.in - g.old_in), (g.out - g.old_out), (g.clip_in - g.old_clip_in), (g.track - g.old_track), true, true);
// adjust transitions if we need to
long new_clip_length = (g.out - g.in);
@@ -1012,13 +1012,13 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
if (g.transition->secondary_clip != NULL) {
if (g.in != g.old_in && !g.trimming) {
long movement = g.in - g.old_in;
move_clip(ca, g.transition->parent_clip, g.transition->parent_clip->timeline_in + movement, g.transition->parent_clip->timeline_out, g.transition->parent_clip->clip_in + movement, g.transition->parent_clip->track, false);
move_clip(ca, g.transition->secondary_clip, g.transition->secondary_clip->timeline_in, g.transition->secondary_clip->timeline_out + movement, g.transition->secondary_clip->clip_in, g.transition->secondary_clip->track, false);
move_clip(ca, g.transition->parent_clip, movement, 0, movement, 0, false, true);
move_clip(ca, g.transition->secondary_clip, 0, movement, 0, 0, false, true);
}
} else if (is_opening_transition) {
if (g.in != g.old_in) {
// if transition is going to make the clip bigger, make the clip bigger
move_clip(ca, c, c->timeline_in + (g.in - g.old_in), c->timeline_out, c->clip_in + (g.clip_in - g.old_clip_in), c->track);
move_clip(ca, c, (g.in - g.old_in), 0, (g.clip_in - g.old_clip_in), 0, true, true);
clip_length -= (g.in - g.old_in);
}
@@ -1026,7 +1026,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
} else {
if (g.out != g.old_out) {
// if transition is going to make the clip bigger, make the clip bigger
move_clip(ca, c, c->timeline_in, c->timeline_out + (g.out - g.old_out), c->clip_in, c->track);
move_clip(ca, c, 0, (g.out - g.old_out), 0, 0, true, true);
clip_length += (g.out - g.old_out);
}