48 lines
1.6 KiB
QML
48 lines
1.6 KiB
QML
// SPDX-FileCopyrightText: 2020 George Florea Bănuș <georgefb899@gmail.com>
|
|
// SPDX-FileCopyrightText: 2026 Tri Vo Khac
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import org.kde.kirigami as Kirigami
|
|
import org.kde.ki18n
|
|
|
|
// Use the desktop style's handle and hover/focus feedback.
|
|
Slider {
|
|
id: root
|
|
|
|
required property MpvItem mpv
|
|
|
|
Accessible.name: KI18n.i18nc("@label:slider", "Volume")
|
|
Accessible.description: root.mpv.mute ? KI18n.i18nc("@info volume muted", "Muted") : KI18n.i18nc("@info volume percentage", "%1%", Math.round(value))
|
|
from: 0
|
|
to: root.mpv.volumeMax
|
|
implicitWidth: Kirigami.Units.gridUnit * 5
|
|
wheelEnabled: true
|
|
stepSize: QtPotatoSettings.volumeStep
|
|
focusPolicy: Qt.TabFocus
|
|
|
|
// Let the Slider consume navigation keys before window playback shortcuts.
|
|
Keys.onShortcutOverride: event => {
|
|
if (event.modifiers === Qt.NoModifier && [Qt.Key_Left, Qt.Key_Right, Qt.Key_Up, Qt.Key_Down, Qt.Key_Home, Qt.Key_End].includes(event.key)) {
|
|
event.accepted = true
|
|
}
|
|
}
|
|
Keys.onPressed: event => {
|
|
if (event.modifiers === Qt.NoModifier && (event.key === Qt.Key_Home || event.key === Qt.Key_End)) {
|
|
value = event.key === Qt.Key_Home ? from : to
|
|
moved()
|
|
event.accepted = true
|
|
}
|
|
}
|
|
|
|
onMoved: root.mpv.volume = Math.round(value)
|
|
|
|
// Follow mpv, but not while the user drags.
|
|
Binding on value {
|
|
value: root.mpv.volume
|
|
when: !root.pressed
|
|
restoreMode: Binding.RestoreNone
|
|
}
|
|
}
|