keyframes are movable in graph view
This commit is contained in:
+13
-6
@@ -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
@@ -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
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user