reimplemented gizmos
This commit is contained in:
+53
-11
@@ -896,27 +896,69 @@ void Effect::process_audio(double, double, quint8*, int, int) {}
|
||||
void Effect::gizmo_draw(double, GLTextureCoords &) {}
|
||||
|
||||
void Effect::gizmo_move(EffectGizmo* gizmo, int x_movement, int y_movement, double timecode, bool done) {
|
||||
// Loop through each gizmo to find `gizmo`
|
||||
for (int i=0;i<gizmos.size();i++) {
|
||||
|
||||
if (gizmos.at(i) == gizmo) {
|
||||
ComboAction* ca = nullptr;
|
||||
if (done) ca = new ComboAction();
|
||||
|
||||
// If (!done && gizmo_dragging_actions_.isEmpty()), that means the drag just started and we're going to save
|
||||
// the current state of the attach fields' keyframes in KeyframeDataChange objects to make the changes undoable
|
||||
// by the user later.
|
||||
if (!done && gizmo_dragging_actions_.isEmpty()) {
|
||||
if (gizmo->x_field1 != nullptr) {
|
||||
gizmo_dragging_actions_.append(new KeyframeDataChange(gizmo->x_field1));
|
||||
}
|
||||
if (gizmo->y_field1 != nullptr) {
|
||||
gizmo_dragging_actions_.append(new KeyframeDataChange(gizmo->y_field1));
|
||||
}
|
||||
if (gizmo->x_field2 != nullptr) {
|
||||
gizmo_dragging_actions_.append(new KeyframeDataChange(gizmo->x_field2));
|
||||
}
|
||||
if (gizmo->y_field2 != nullptr) {
|
||||
gizmo_dragging_actions_.append(new KeyframeDataChange(gizmo->y_field2));
|
||||
}
|
||||
}
|
||||
|
||||
// Update the field values
|
||||
if (gizmo->x_field1 != nullptr) {
|
||||
gizmo->x_field1->SetValueAt(timecode, gizmo->x_field1->GetDoubleAt(timecode) + x_movement*gizmo->x_field_multi1);
|
||||
//gizmo->x_field1->make_key_from_change(ca);
|
||||
gizmo->x_field1->SetValueAt(timecode,
|
||||
gizmo->x_field1->GetDoubleAt(timecode) + x_movement*gizmo->x_field_multi1);
|
||||
}
|
||||
if (gizmo->y_field1 != nullptr) {
|
||||
gizmo->y_field1->SetValueAt(timecode, gizmo->y_field1->GetDoubleAt(timecode) + y_movement*gizmo->y_field_multi1);
|
||||
//gizmo->y_field1->make_key_from_change(ca);
|
||||
gizmo->y_field1->SetValueAt(timecode,
|
||||
gizmo->y_field1->GetDoubleAt(timecode) + y_movement*gizmo->y_field_multi1);
|
||||
}
|
||||
if (gizmo->x_field2 != nullptr) {
|
||||
gizmo->x_field2->SetValueAt(timecode, gizmo->x_field2->GetDoubleAt(timecode) + x_movement*gizmo->x_field_multi2);
|
||||
//gizmo->x_field2->make_key_from_change(ca);
|
||||
gizmo->x_field2->SetValueAt(timecode,
|
||||
gizmo->x_field2->GetDoubleAt(timecode) + x_movement*gizmo->x_field_multi2);
|
||||
}
|
||||
if (gizmo->y_field2 != nullptr) {
|
||||
gizmo->y_field2->SetValueAt(timecode, gizmo->y_field2->GetDoubleAt(timecode) + y_movement*gizmo->y_field_multi2);
|
||||
//gizmo->y_field2->make_key_from_change(ca);
|
||||
gizmo->y_field2->SetValueAt(timecode,
|
||||
gizmo->y_field2->GetDoubleAt(timecode) + y_movement*gizmo->y_field_multi2);
|
||||
}
|
||||
|
||||
// If (done && !gizmo_dragging_actions_.isEmpty()), that means the drag just ended and we're going to save
|
||||
// the new state of the attach fields' keyframes in KeyframeDataChange objects to make the changes undoable
|
||||
// by the user later.
|
||||
if (done && !gizmo_dragging_actions_.isEmpty()) {
|
||||
|
||||
// Store all the KeyframeDataChange objects into a ComboAction to send to the undo stack (makes them all
|
||||
// undoable together rather than having to be undone individually).
|
||||
ComboAction* ca = new ComboAction();
|
||||
|
||||
for (int j=0;j<gizmo_dragging_actions_.size();j++) {
|
||||
// Set the current state of the keyframes as the "new" keyframes (the old values were set earlier when the
|
||||
// KeyframeDataChange object was constructed).
|
||||
gizmo_dragging_actions_.at(j)->SetNewKeyframes();
|
||||
|
||||
// Add this KeyframeDataChange object to the ComboAction
|
||||
ca->append(gizmo_dragging_actions_.at(j));
|
||||
}
|
||||
|
||||
olive::UndoStack.push(ca);
|
||||
|
||||
gizmo_dragging_actions_.clear();
|
||||
}
|
||||
if (done) olive::UndoStack.push(ca);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,6 +246,8 @@ private:
|
||||
|
||||
int flags_;
|
||||
|
||||
QVector<KeyframeDataChange*> gizmo_dragging_actions_;
|
||||
|
||||
// enable effect to update constantly
|
||||
bool enable_always_update_;
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ QVariant EffectField::GetValueAt(double timecode)
|
||||
|
||||
}
|
||||
}
|
||||
perpetual_data_ = value;
|
||||
persistent_data_ = value;
|
||||
break;
|
||||
}
|
||||
case EFFECT_FIELD_COLOR:
|
||||
@@ -192,7 +192,7 @@ QVariant EffectField::GetValueAt(double timecode)
|
||||
QColor after_data = keyframes.at(after_keyframe).data.value<QColor>();
|
||||
value = QColor(lerp(before_data.red(), after_data.red(), progress), lerp(before_data.green(), after_data.green(), progress), lerp(before_data.blue(), after_data.blue(), progress));
|
||||
}
|
||||
perpetual_data_ = value;
|
||||
persistent_data_ = value;
|
||||
break;
|
||||
}
|
||||
case EFFECT_FIELD_STRING:
|
||||
@@ -200,14 +200,14 @@ QVariant EffectField::GetValueAt(double timecode)
|
||||
case EFFECT_FIELD_COMBO:
|
||||
case EFFECT_FIELD_FONT:
|
||||
case EFFECT_FIELD_FILE:
|
||||
perpetual_data_ = before_data;
|
||||
persistent_data_ = before_data;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return perpetual_data_;
|
||||
return persistent_data_;
|
||||
}
|
||||
|
||||
void EffectField::SetValueAt(double time, const QVariant &value)
|
||||
@@ -241,7 +241,7 @@ void EffectField::SetValueAt(double time, const QVariant &value)
|
||||
}
|
||||
|
||||
} else {
|
||||
perpetual_data_ = value;
|
||||
persistent_data_ = value;
|
||||
}
|
||||
|
||||
emit Changed();
|
||||
@@ -267,7 +267,7 @@ void EffectField::PrepareDataForKeyframing(bool enabled, ComboAction *ca)
|
||||
EffectKeyframe key;
|
||||
|
||||
key.time = NowInFrames();
|
||||
key.data = perpetual_data_;
|
||||
key.data = persistent_data_;
|
||||
key.type = EFFECT_KEYFRAME_LINEAR;
|
||||
|
||||
keyframes.append(key);
|
||||
@@ -279,7 +279,7 @@ void EffectField::PrepareDataForKeyframing(bool enabled, ComboAction *ca)
|
||||
// Convert keyframes to one "perpetual" keyframe
|
||||
|
||||
// Set first keyframe to whatever the data is now
|
||||
ca->append(new SetQVariant(&perpetual_data_, perpetual_data_, GetValueAt(Now())));
|
||||
ca->append(new SetQVariant(&persistent_data_, persistent_data_, GetValueAt(Now())));
|
||||
|
||||
// Delete all keyframes
|
||||
for (int i=0;i<keyframes.size();i++) {
|
||||
|
||||
@@ -75,6 +75,7 @@ public:
|
||||
bool IsEnabled();
|
||||
void SetEnabled(bool e);
|
||||
|
||||
QVariant persistent_data_;
|
||||
QVector<EffectKeyframe> keyframes;
|
||||
|
||||
signals:
|
||||
@@ -95,7 +96,6 @@ private:
|
||||
bool enabled_;
|
||||
int colspan_;
|
||||
|
||||
QVariant perpetual_data_;
|
||||
};
|
||||
|
||||
#endif // EFFECTFIELD_H
|
||||
|
||||
@@ -344,7 +344,7 @@ unix:!mac:isEmpty(PREFIX) {
|
||||
|
||||
unix:!mac:target.path = $$PREFIX/bin
|
||||
|
||||
effects.files = $$PWD/effects/*.frag $$PWD/effects/*.xml $$PWD/effects/*.vert
|
||||
effects.files = $$PWD/effects/shaders/*
|
||||
unix:!mac:effects.path = $$PREFIX/share/olive-editor/effects
|
||||
|
||||
translations.files = $$PWD/ts/*.qm
|
||||
|
||||
@@ -310,8 +310,6 @@ void ViewerWidget::move_gizmos(QMouseEvent *event, bool done) {
|
||||
|
||||
drag_start_x = event->pos().x();
|
||||
drag_start_y = event->pos().y();
|
||||
|
||||
gizmos->FieldChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1159,16 +1159,19 @@ KeyframeDataChange::KeyframeDataChange(EffectField *field) :
|
||||
done_(true)
|
||||
{
|
||||
old_keys_ = field_->keyframes;
|
||||
old_persistent_data_ = field_->persistent_data_;
|
||||
}
|
||||
|
||||
void KeyframeDataChange::SetNewKeyframes()
|
||||
{
|
||||
new_keys_ = field_->keyframes;
|
||||
new_persistent_data_ = field_->persistent_data_;
|
||||
}
|
||||
|
||||
void KeyframeDataChange::doUndo()
|
||||
{
|
||||
field_->keyframes = old_keys_;
|
||||
field_->persistent_data_ = old_persistent_data_;
|
||||
done_ = false;
|
||||
}
|
||||
|
||||
@@ -1176,6 +1179,7 @@ void KeyframeDataChange::doRedo()
|
||||
{
|
||||
if (!done_) {
|
||||
field_->keyframes = new_keys_;
|
||||
field_->persistent_data_ = new_persistent_data_;
|
||||
done_ = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -636,6 +636,8 @@ private:
|
||||
EffectField* field_;
|
||||
QVector<EffectKeyframe> old_keys_;
|
||||
QVector<EffectKeyframe> new_keys_;
|
||||
QVariant old_persistent_data_;
|
||||
QVariant new_persistent_data_;
|
||||
bool done_;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user