From 979d14525c8b81b4cf337154c46b5ca17c6a7478 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Thu, 3 Oct 2019 14:36:07 +0300 Subject: [PATCH] Make animation conform to playhead snapping When playhead snapping in on, make animation update based on the snapped frames (not in between frames). Also the current frame text shows just the snapped frames values. Task-number: QDS-1068 Change-Id: I6309975fda3d96ce3bc2ae1582b42b62b340112c Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../timelineeditor/timelinegraphicsscene.cpp | 11 ++++++----- .../components/timelineeditor/timelinegraphicsscene.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp index 96d37f395a2..19dad57661f 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.cpp @@ -221,7 +221,8 @@ qreal TimelineGraphicsScene::snap(qreal frame, bool snapToPlayhead) return playheadFrame; } -void TimelineGraphicsScene::setCurrenFrame(const QmlTimeline &timeline, qreal frame) +// set the playhead frame and return the updated frame in case of snapping +qreal TimelineGraphicsScene::setCurrenFrame(const QmlTimeline &timeline, qreal frame) { if (timeline.isValid()) { if (QApplication::keyboardModifiers() & Qt::ShiftModifier) // playhead snapping @@ -232,6 +233,9 @@ void TimelineGraphicsScene::setCurrenFrame(const QmlTimeline &timeline, qreal fr } invalidateCurrentValues(); + emitStatusBarPlayheadFrameChanged(frame); + + return frame; } void TimelineGraphicsScene::setCurrentFrame(int frame) @@ -246,8 +250,6 @@ void TimelineGraphicsScene::setCurrentFrame(int frame) } invalidateCurrentValues(); - - emitStatusBarPlayheadFrameChanged(frame); } void TimelineGraphicsScene::setStartFrame(int frame) @@ -367,11 +369,10 @@ void TimelineGraphicsScene::commitCurrentFrame(qreal frame) QmlTimeline timeline(timelineModelNode()); if (timeline.isValid()) { + frame = setCurrenFrame(timeline, qRound(frame)); timeline.modelNode().setAuxiliaryData("currentFrame@NodeInstance", qRound(frame)); - setCurrenFrame(timeline, qRound(frame)); invalidateCurrentValues(); } - emitStatusBarPlayheadFrameChanged(int(frame)); } QList TimelineGraphicsScene::selectedKeyframes() const diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h index ba0c10bcd56..4e33ce362ee 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinegraphicsscene.h @@ -73,7 +73,7 @@ public: void setWidth(int width); void invalidateLayout(); - void setCurrenFrame(const QmlTimeline &timeline, qreal frame); + qreal setCurrenFrame(const QmlTimeline &timeline, qreal frame); void setCurrentFrame(int frame); void setStartFrame(int frame); void setEndFrame(int frame);