keyframes are movable in graph view

This commit is contained in:
itsmattkc
2018-12-31 22:18:42 +11:00
parent 7530fb0445
commit 7a4e655d2c
7 changed files with 128 additions and 36 deletions
+13 -6
View File
@@ -309,18 +309,25 @@ void Clip::refactor_frame_rate(ComboAction* ca, double multiplier, bool change_t
track);
}
QVector<EffectRow*> key_rows;
QVector<int> key_indices;
QVector<long> key_old;
QVector<long> key_new;
for (int i=0;i<effects.size();i++) {
Effect* e = effects.at(i);
for (int j=0;j<e->row_count();j++) {
EffectRow* r = e->row(j);
for (int k=0;k<r->keyframe_times.size();k++) {
long new_pos = r->keyframe_times.at(k) * multiplier;
KeyframeMove* km = new KeyframeMove();
km->movement = new_pos - r->keyframe_times.at(k);
km->rows.append(r);
km->keyframes.append(k);
ca->append(km);
key_rows.append(r);
key_indices.at(k);
key_old.append(r->keyframe_times.at(k));
key_new.append(r->keyframe_times.at(k) * multiplier);
}
}
}
if (key_rows.size() > 0) {
ca->append(new KeyframeMove(key_rows, key_indices, key_old, key_new));
}
}
+9 -3
View File
@@ -737,18 +737,24 @@ void MediaRename::redo() {
mainWindow->setWindowModified(true);
}
KeyframeMove::KeyframeMove() : old_project_changed(mainWindow->isWindowModified()) {}
KeyframeMove::KeyframeMove(const QVector<EffectRow*>& irows, const QVector<int>& ikeyframes, const QVector<long>& iold_values, const QVector<long>& inew_values) :
rows(irows),
keyframes(ikeyframes),
old_values(iold_values),
new_values(inew_values),
old_project_changed(mainWindow->isWindowModified())
{}
void KeyframeMove::undo() {
for (int i=0;i<rows.size();i++) {
rows.at(i)->keyframe_times[keyframes.at(i)] -= movement;
rows.at(i)->keyframe_times[keyframes.at(i)] = old_values.at(i);
}
mainWindow->setWindowModified(old_project_changed);
}
void KeyframeMove::redo() {
for (int i=0;i<rows.size();i++) {
rows.at(i)->keyframe_times[keyframes.at(i)] += movement;
rows.at(i)->keyframe_times[keyframes.at(i)] = new_values.at(i);
}
mainWindow->setWindowModified(true);
}
+5 -4
View File
@@ -330,13 +330,14 @@ private:
class KeyframeMove : public QUndoCommand {
public:
KeyframeMove();
QVector<EffectRow*> rows;
QVector<int> keyframes;
long movement;
KeyframeMove(const QVector<EffectRow*>& rows, const QVector<int>& keyframes, const QVector<long>& old_values, const QVector<long>& new_values);
void undo();
void redo();
private:
QVector<EffectRow*> rows;
QVector<int> keyframes;
QVector<long> old_values;
QVector<long> new_values;
bool old_project_changed;
};