Skip to content

Commit 3106235

Browse files
authored
fix: reapply timeline horizontal wheel scrolling on develop (#220)
1 parent 0a90eea commit 3106235

1 file changed

Lines changed: 47 additions & 9 deletions

File tree

ui/qml/xstudio/application/panels/timeline/XsTimeline.qml

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,43 @@ Rectangle {
13991399
property var initialValue: 0
14001400
property real minScaleX: 0
14011401

1402+
function wheelDelta(pixelDelta, angleDelta) {
1403+
return pixelDelta !== 0 ? pixelDelta : angleDelta
1404+
}
1405+
1406+
function scrollTimelineHorizontally(deltaX) {
1407+
let stackItem = list_view.itemAtIndex(0)
1408+
if(
1409+
!stackItem ||
1410+
Math.abs(deltaX) < 1 ||
1411+
stackItem.scrollbar.size >= 1.0 ||
1412+
stackItem.scrollbar.width <= 0
1413+
) {
1414+
return false
1415+
}
1416+
1417+
let positionDelta = (stackItem.scrollbar.size / stackItem.scrollbar.width) * deltaX
1418+
stackItem.jumpToPosition(stackItem.currentPosition() + positionDelta)
1419+
return true
1420+
}
1421+
1422+
function scrollTimelineVertically(deltaY) {
1423+
if(
1424+
hovered == null ||
1425+
Math.abs(deltaY) < 1 ||
1426+
!["Video Track", "Audio Track", "Gap", "Clip"].includes(hovered.itemTypeRole)
1427+
) {
1428+
return false
1429+
}
1430+
1431+
if(["Video Track", "Audio Track"].includes(hovered.itemTypeRole))
1432+
hovered.parentLV.flick(0, deltaY > 0 ? 500 : -500)
1433+
else if(["Gap", "Clip"].includes(hovered.itemTypeRole))
1434+
hovered.parentLV.parentLV.flick(0, deltaY > 0 ? 500 : -500)
1435+
1436+
return true
1437+
}
1438+
14021439
Rectangle {
14031440
id: region
14041441
visible: ma.isRegionSelection
@@ -1608,36 +1645,37 @@ Rectangle {
16081645
}
16091646

16101647
onWheel: wheel => {
1648+
let deltaX = wheelDelta(wheel.pixelDelta.x, wheel.angleDelta.x)
1649+
let deltaY = wheelDelta(wheel.pixelDelta.y, wheel.angleDelta.y)
16111650

16121651
// maintain position as we zoom..
16131652
if(wheel.modifiers == Qt.ShiftModifier) {
16141653
// wheel.angleDelta.y always return 0 on MacOS laptops
16151654
// when SHIFT is pressed and a mouse wheel is used, but in
16161655
// that case the x component is updating and usable.
1617-
let deltaY = wheel.angleDelta.y == 0 ? wheel.angleDelta.x : wheel.angleDelta.y
1656+
let zoomDelta = deltaY == 0 ? deltaX : deltaY
16181657
// Limit the scale to keep it within a usable range and
16191658
// avoid a negative scaleY value.
1620-
if(deltaY > 1) {
1659+
if(zoomDelta > 1) {
16211660
scaleY = Math.min(2.0, scaleY + 0.2)
16221661
} else {
16231662
scaleY = Math.max(0.6, scaleY - 0.2)
16241663
}
16251664
wheel.accepted = true
16261665
} else if(wheel.modifiers == Qt.ControlModifier) {
16271666
let tmp = scaleX
1628-
if(wheel.angleDelta.y > 1) {
1667+
let zoomDelta = deltaY == 0 ? deltaX : deltaY
1668+
if(zoomDelta > 1) {
16291669
tmp += 0.2
16301670
} else {
16311671
tmp -= 0.2
16321672
}
16331673
scaleX = Math.max((list_view.width - trackHeaderWidth) / theSessionData.timelineRect([timeline_items.rootIndex]).width, tmp)
16341674
list_view.itemAtIndex(0).jumpToFrame(timelinePlayhead.logicalFrame, ListView.Center)
16351675
wheel.accepted = true
1636-
} else if(hovered != null && ["Video Track", "Audio Track","Gap","Clip"].includes(hovered.itemTypeRole)) {
1637-
if(["Video Track", "Audio Track"].includes(hovered.itemTypeRole))
1638-
hovered.parentLV.flick(0, wheel.angleDelta.y > 1 ? 500 : -500)
1639-
else if(["Gap", "Clip"].includes(hovered.itemTypeRole))
1640-
hovered.parentLV.parentLV.flick(0, wheel.angleDelta.y > 1 ? 500 : -500)
1676+
} else if(Math.abs(deltaX) > Math.abs(deltaY)) {
1677+
wheel.accepted = scrollTimelineHorizontally(deltaX)
1678+
} else if(scrollTimelineVertically(deltaY)) {
16411679
wheel.accepted = true
16421680
} else {
16431681
wheel.accepted = false
@@ -2232,4 +2270,4 @@ Rectangle {
22322270
// }
22332271
// }
22342272

2235-
}
2273+
}

0 commit comments

Comments
 (0)