implemented gizmo undoing

This commit is contained in:
itsmattkc
2018-11-30 10:24:27 +11:00
parent 6f84e47c2c
commit f6406cab9c
4 changed files with 58 additions and 0 deletions
+24
View File
@@ -1299,3 +1299,27 @@ void SetPointer::redo() {
*p = new_data;
mainWindow->setWindowModified(true);
}
MoveGizmo::MoveGizmo(Effect *e, EffectGizmo *g, int x_movement, int y_movement, double tc) :
effect(e),
gizmo(g),
x(x_movement),
y(y_movement),
timecode(tc),
done(true),
old_changed(mainWindow->isWindowModified())
{}
void MoveGizmo::undo() {
effect->gizmo_move(gizmo, -x, -y, timecode);
mainWindow->setWindowModified(old_changed);
done = false;
}
void MoveGizmo::redo() {
if (!done) {
effect->gizmo_move(gizmo, x, y, timecode);
mainWindow->setWindowModified(true);
done = true;
}
}
+16
View File
@@ -9,6 +9,7 @@ class SourceTable;
class EffectRow;
class EffectField;
class Transition;
class EffectGizmo;
struct Clip;
struct Sequence;
struct Media;
@@ -597,4 +598,19 @@ private:
void* old_data;
};
class MoveGizmo : public QUndoCommand {
public:
MoveGizmo(Effect* e, EffectGizmo* g, int x_movement, int y_movement, double tc);
void undo();
void redo();
private:
Effect* effect;
EffectGizmo* gizmo;
int x;
int y;
double timecode;
bool done;
bool old_changed;
};
#endif // UNDO_H
+16
View File
@@ -17,6 +17,7 @@
#include "debug.h"
#include "io/math.h"
#include "ui/collapsiblewidget.h"
#include "project/undo.h"
#include <QPainter>
#include <QAudioOutput>
@@ -175,6 +176,9 @@ void ViewerWidget::mousePressEvent(QMouseEvent* event) {
drag_start_x = event->pos().x();
drag_start_y = event->pos().y();
gizmo_x_mvmt = 0;
gizmo_y_mvmt = 0;
selected_gizmo = get_gizmo_from_mouse(event->pos().x(), event->pos().y());
}
dragging = true;
@@ -199,6 +203,9 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
gizmos->gizmo_move(selected_gizmo, x_movement, y_movement, get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead));
gizmo_x_mvmt += x_movement;
gizmo_y_mvmt += y_movement;
drag_start_x = event->pos().x();
drag_start_y = event->pos().y();
@@ -216,6 +223,15 @@ void ViewerWidget::mouseMoveEvent(QMouseEvent* event) {
}
void ViewerWidget::mouseReleaseEvent(QMouseEvent *event) {
if (selected_gizmo != NULL) {
undo_stack.push(new MoveGizmo(
gizmos,
selected_gizmo,
gizmo_x_mvmt,
gizmo_y_mvmt,
get_timecode(gizmos->parent_clip, gizmos->parent_clip->sequence->playhead)
));
}
dragging = false;
}
+2
View File
@@ -51,6 +51,8 @@ private:
Effect* gizmos;
int drag_start_x;
int drag_start_y;
int gizmo_x_mvmt;
int gizmo_y_mvmt;
EffectGizmo* selected_gizmo;
EffectGizmo* get_gizmo_from_mouse(int x, int y);
bool drawn_gizmos;