numerous keyframe improvements

This commit is contained in:
itsmattkc
2019-01-04 21:01:36 +11:00
parent b36f54c11d
commit a2eef2e829
13 changed files with 217 additions and 64 deletions
-1
View File
@@ -23,7 +23,6 @@ class QXmlStreamWriter;
class Effect;
class EffectRow;
class CheckboxEx;
class KeyframeDelete;
struct EffectMeta {
QString name;
+2 -3
View File
@@ -8,7 +8,6 @@ class Effect;
class QGridLayout;
class EffectField;
class QLabel;
class KeyframeDelete;
class QPushButton;
class ComboAction;
class QHBoxLayout;
@@ -23,8 +22,8 @@ public:
EffectField* add_field(int type, const QString &id, int colspan = 1);
EffectField* field(int i);
int fieldCount();
void set_keyframe_now(ComboAction *ca);
void delete_keyframe_at_time(ComboAction *ca, long time);
void set_keyframe_now(ComboAction *ca);
void delete_keyframe_at_time(ComboAction *ca, long time);
ClickableLabel* label;
Effect* parent_effect;
bool savable;
+37
View File
@@ -1,5 +1,10 @@
#include "keyframe.h"
#include <QVector>
#include "effectfield.h"
#include "undo.h"
#include "panels/panels.h"
EffectKeyframe::EffectKeyframe() {
pre_handle_x = -40;
@@ -7,3 +12,35 @@ EffectKeyframe::EffectKeyframe() {
post_handle_x = 40;
post_handle_y = 0;
}
void delete_keyframes(QVector<EffectField *>& selected_key_fields, QVector<int> &selected_keys) {
QVector<EffectField*> fields;
QVector<int> key_indices;
for (int i=0;i<selected_keys.size();i++) {
bool added = false;
for (int j=0;j<key_indices.size();j++) {
if (key_indices.at(j) < selected_keys.at(i)) {
key_indices.insert(j, selected_keys.at(i));
fields.insert(j, selected_key_fields.at(i));
added = true;
break;
}
}
if (!added) {
key_indices.append(selected_keys.at(i));
fields.append(selected_key_fields.at(i));
}
}
if (fields.size() > 0) {
ComboAction* ca = new ComboAction();
for (int i=0;i<key_indices.size();i++) {
ca->append(new KeyframeDelete(fields.at(i), key_indices.at(i)));
}
undo_stack.push(ca);
selected_keys.clear();
selected_key_fields.clear();
update_ui(false);
}
}
+4
View File
@@ -3,6 +3,8 @@
#include <QVariant>
class EffectField;
class EffectKeyframe {
public:
EffectKeyframe();
@@ -18,4 +20,6 @@ public:
double post_handle_y;
};
void delete_keyframes(QVector<EffectField *> &selected_key_fields, QVector<int> &selected_keys);
#endif // KEYFRAME_H