diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-10-10 13:04:34 +0300 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-10-10 12:10:34 +0000 |
commit | ed97d73da80b2664db18dc994018275354a0ee54 (patch) | |
tree | 0d57d3573b14b77088c938c18994b54a099c9fe7 /src/plugins/qmldesigner/components/timelineeditor | |
parent | 4d7c64426869ca21be9a69401c18bbb2d11e12cc (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.cpp | 21 |
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); |