Skip to content
Snippets Groups Projects

qt: handle high precision wheel events on playback speed widget

Merged Fatih Uzunoğlu requested to merge fuzun/vlc:qt/playbackspeedwheel into master
1 file
+ 62
32
Compare changes
  • Side-by-side
  • Inline
@@ -44,16 +44,32 @@ PopupIconToolButton {
Navigation.rightItem: root
}
contentItem: T.Label {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
contentItem: Item {
implicitHeight: label.implicitHeight
implicitWidth: textMetrics.width
TextMetrics {
id: textMetrics
font: label.font
// '-' is for additional space if certain digits have more width with certain fonts
text: "0.00x-"
}
Text {
id: label
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pixelSize: VLCStyle.fontSize_normal
font.pixelSize: VLCStyle.fontSize_normal
text: !root.paintOnly ? qsTr("%1x").arg(+Player.rate.toFixed(2))
: qsTr("1x")
text: !root.paintOnly ? qsTr("%1x").arg(+Player.rate.toFixed(2))
: qsTr("1x")
color: root.color
color: root.color
}
}
// TODO: Qt bug 6.2: QTBUG-103604
@@ -62,39 +78,53 @@ PopupIconToolButton {
z: -1
WheelToVLCConverter {
id: wheelToVLC
function handle(steps: int) {
let func
if (steps > 0)
func = root.popup.contentItem.slider.increase
else
func = root.popup.contentItem.slider.decrease
for (let i = 0; i < Math.abs(steps); ++i)
func()
}
Component.onCompleted: {
wheelUpDown.connect(wheelToVLC.handle)
wheelLeftRight.connect(wheelToVLC.handle)
}
}
WheelHandler {
onWheel: (event) => {
orientation: Qt.Vertical | Qt.Horizontal
onWheel: (wheel) => {
if (!root.popup.contentItem || !root.popup.contentItem.slider) {
event.accepted = false
return
}
let delta = 0
if (event.angleDelta.x)
delta = event.angleDelta.x
else if (event.angleDelta.y)
delta = event.angleDelta.y
else {
event.accepted = false
return
// NOTE: Uncomment below to support (not only handle) high precision adjustment:
// if ((Math.abs(wheel.pixelDelta.x) % 120 > 0) || (Math.abs(wheel.pixelDelta.y) % 120 > 0)) {
// let delta = 0
// if (Math.abs(wheel.pixelDelta.x) > Math.abs(wheel.pixelDelta.y))
// delta = wheel.pixelDelta.x
// else
// delta = wheel.pixelDelta.y
// if (wheel.inverted)
// delta = -delta
// root.popup.contentItem.slider.value += 0.01 * delta
// } else
{
wheelToVLC.qmlWheelEvent(wheel)
}
if (event.inverted)
delta = -delta
event.accepted = true
delta = delta / 8 / 15
let func
if (delta > 0)
func = root.popup.contentItem.slider.increase
else
func = root.popup.contentItem.slider.decrease
for (let i = 0; i < Math.ceil(Math.abs(delta)); ++i)
func()
wheel.accepted = true
}
}
Loading