aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/timelineeditor
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-10-10 13:04:34 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2019-10-10 12:10:34 +0000
commited97d73da80b2664db18dc994018275354a0ee54 (patch)
tree0d57d3573b14b77088c938c18994b54a099c9fe7 /src/plugins/qmldesigner/components/timelineeditor
parent4d7c64426869ca21be9a69401c18bbb2d11e12cc (diff)
Snap duration bar handles movement
When dragging a timeline's duration bar start, end, or center handle while shift is down, snap the movement. Task-number: QDS-1068 Change-Id: I713e27167ce358ba3e1e468b779363dd9f17b2ae Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/components/timelineeditor')
-rw-r--r--src/plugins/qmldesigner/components/timelineeditor/timelinesectionitem.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinesectionitem.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinesectionitem.cpp
index 450ca6cbb7..733834858e 100644
--- a/src/plugins/qmldesigner/components/timelineeditor/timelinesectionitem.cpp
+++ b/src/plugins/qmldesigner/components/timelineeditor/timelinesectionitem.cpp
@@ -987,7 +987,12 @@ void TimelineBarItem::dragInit(const QRectF &rect, const QPointF &pos)
void TimelineBarItem::dragCenter(QRectF rect, const QPointF &pos, qreal min, qreal max)
{
if (validateBounds(pos.x() - rect.topLeft().x())) {
- rect.moveLeft(pos.x() - m_pivot);
+ qreal targetX = pos.x() - m_pivot;
+ if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { // snapping
+ qreal snappedTargetFrame = timelineScene()->snap(mapFromSceneToFrame(targetX));
+ targetX = mapFromFrameToScene(snappedTargetFrame);
+ }
+ rect.moveLeft(targetX);
if (rect.topLeft().x() < min) {
rect.moveLeft(min);
setOutOfBounds(Location::Left);
@@ -1006,7 +1011,12 @@ void TimelineBarItem::dragHandle(QRectF rect, const QPointF &pos, qreal min, qre
if (isActiveHandle(Location::Left)) {
if (validateBounds(pos.x() - left.topLeft().x())) {
- rect.setLeft(pos.x() - m_pivot);
+ qreal targetX = pos.x() - m_pivot;
+ if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { // snapping
+ qreal snappedTargetFrame = timelineScene()->snap(mapFromSceneToFrame(targetX));
+ targetX = mapFromFrameToScene(snappedTargetFrame);
+ }
+ rect.setLeft(targetX);
if (rect.left() < min) {
rect.setLeft(min);
setOutOfBounds(Location::Left);
@@ -1017,7 +1027,12 @@ void TimelineBarItem::dragHandle(QRectF rect, const QPointF &pos, qreal min, qre
}
} else if (isActiveHandle(Location::Right)) {
if (validateBounds(pos.x() - right.topRight().x())) {
- rect.setRight(pos.x() - m_pivot);
+ qreal targetX = pos.x() - m_pivot;
+ if (QApplication::keyboardModifiers() & Qt::ShiftModifier) { // snapping
+ qreal snappedTargetFrame = timelineScene()->snap(mapFromSceneToFrame(targetX));
+ targetX = mapFromFrameToScene(snappedTargetFrame);
+ }
+ rect.setRight(targetX);
if (rect.right() > max) {
rect.setRight(max);
setOutOfBounds(Location::Right);