revised keyframe system for graph editor

This commit is contained in:
itsmattkc
2019-01-05 16:30:51 +11:00
parent 90181ea9c5
commit 5123ec0669
8 changed files with 96 additions and 133 deletions
-60
View File
@@ -752,66 +752,6 @@ void KeyframeDelete::redo() {
mainWindow->setWindowModified(true);
}
KeyframeSet::KeyframeSet(EffectRow* r, int i, long t, bool justMadeKeyframe) :
old_project_changed(mainWindow->isWindowModified()),
row(r),
index(i),
time(t),
just_made_keyframe(justMadeKeyframe),
done(true)
{
enable_keyframes = !row->isKeyframing();
if (index != -1) old_values.resize(row->fieldCount());
new_values.resize(row->fieldCount());
for (int i=0;i<row->fieldCount();i++) {
EffectField* field = row->field(i);
if (index != -1) {
if (field->type == EFFECT_FIELD_DOUBLE) {
old_values[i] = static_cast<LabelSlider*>(field->ui_element)->getPreviousValue();
} else {
old_values[i] = field->keyframes.at(index).data;
}
}
new_values[i] = field->get_current_data();
}
}
void KeyframeSet::undo() {
if (enable_keyframes) row->setKeyframing(false);
bool append = (index == -1 || just_made_keyframe);
for (int i=0;i<row->fieldCount();i++) {
if (append) {
row->field(i)->keyframes.removeLast();
} else {
row->field(i)->keyframes[index].data = old_values.at(i);
}
}
mainWindow->setWindowModified(old_project_changed);
done = false;
}
void KeyframeSet::redo() {
bool append = (index == -1 || (just_made_keyframe && !done));
for (int i=0;i<row->fieldCount();i++) {
EffectField* f = row->field(i);
if (append) {
EffectKeyframe k;
k.data = new_values.at(i);
k.time = time;
k.type = (f->keyframes.size() > 0) ? f->keyframes.last().type : EFFECT_KEYFRAME_LINEAR;
f->keyframes.append(k);
} else {
f->keyframes[index].data = new_values.at(i);
}
}
row->setKeyframing(true);
mainWindow->setWindowModified(true);
done = true;
}
EffectFieldUndo::EffectFieldUndo(EffectField* f) :
field(f),
done(true),