implemented gizmo undoing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user