mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 21:42:51 -05:00
fix: Esnure no volume UI clipping
This commit is contained in:
@@ -35,6 +35,9 @@ Rectangle {
|
||||
|
||||
DankSlider {
|
||||
id: volumeSlider
|
||||
|
||||
readonly property real actualVolumePercent: AudioService.source && AudioService.source.audio ? Math.round(AudioService.source.audio.volume * 100) : 0
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
anchors.top: headerRow.bottom
|
||||
@@ -42,7 +45,7 @@ Rectangle {
|
||||
anchors.rightMargin: Theme.spacingM
|
||||
anchors.topMargin: Theme.spacingXS
|
||||
height: 35
|
||||
value: AudioService.source && AudioService.source.audio ? Math.round(AudioService.source.audio.volume * 100) : 0
|
||||
value: AudioService.source && AudioService.source.audio ? Math.min(100, Math.round(AudioService.source.audio.volume * 100)) : 0
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
leftIcon: {
|
||||
@@ -54,8 +57,9 @@ Rectangle {
|
||||
enabled: AudioService.source && AudioService.source.audio
|
||||
unit: "%"
|
||||
showValue: true
|
||||
valueOverride: actualVolumePercent
|
||||
visible: AudioService.source && AudioService.source.audio
|
||||
|
||||
|
||||
onSliderValueChanged: function(newValue) {
|
||||
if (AudioService.source && AudioService.source.audio) {
|
||||
AudioService.source.audio.volume = newValue / 100
|
||||
|
||||
@@ -57,12 +57,17 @@ Row {
|
||||
}
|
||||
|
||||
DankSlider {
|
||||
readonly property real actualVolumePercent: defaultSink ? Math.round(defaultSink.audio.volume * 100) : 0
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
width: parent.width - (Theme.iconSize + Theme.spacingS * 2) - Theme.spacingM
|
||||
enabled: defaultSink !== null
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
value: defaultSink ? Math.round(defaultSink.audio.volume * 100) : 0
|
||||
value: defaultSink ? Math.min(100, Math.round(defaultSink.audio.volume * 100)) : 0
|
||||
showValue: true
|
||||
unit: "%"
|
||||
valueOverride: actualVolumePercent
|
||||
onSliderValueChanged: function(newValue) {
|
||||
if (defaultSink) {
|
||||
defaultSink.audio.volume = newValue / 100.0
|
||||
|
||||
@@ -1406,12 +1406,12 @@ Item {
|
||||
|
||||
Rectangle {
|
||||
width: parent.width
|
||||
height: defaultSink ? (defaultSink.audio.volume * parent.height) : 0
|
||||
height: defaultSink ? (Math.min(1.0, defaultSink.audio.volume) * parent.height) : 0
|
||||
anchors.bottom: parent.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
color: Theme.primary
|
||||
radius: width / 2
|
||||
|
||||
|
||||
Behavior on height {
|
||||
enabled: !parent.dragging
|
||||
NumberAnimation { duration: 150 }
|
||||
@@ -1447,8 +1447,8 @@ Item {
|
||||
|
||||
onWheel: function(wheel) {
|
||||
if (defaultSink) {
|
||||
const delta = wheel.angleDelta.y / 120 // Standard wheel step
|
||||
const increment = delta * 0.05 // 5% per scroll step
|
||||
const delta = wheel.angleDelta.y / 120
|
||||
const increment = delta * 0.05
|
||||
const newVolume = Math.max(0, Math.min(1, defaultSink.audio.volume + increment))
|
||||
defaultSink.audio.volume = newVolume
|
||||
if (newVolume > 0 && defaultSink.audio.muted) {
|
||||
|
||||
@@ -58,7 +58,7 @@ DankOSD {
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: {
|
||||
AudioService.toggleMute()
|
||||
resetHideTimer()
|
||||
hideTimer.restart()
|
||||
}
|
||||
onContainsMouseChanged: {
|
||||
setChildHovered(containsMouse || volumeSlider.containsMouse)
|
||||
@@ -69,6 +69,9 @@ DankOSD {
|
||||
DankSlider {
|
||||
id: volumeSlider
|
||||
|
||||
readonly property real actualVolumePercent: AudioService.sink && AudioService.sink.audio ? Math.round(AudioService.sink.audio.volume * 100) : 0
|
||||
readonly property real displayPercent: actualVolumePercent
|
||||
|
||||
width: parent.width - Theme.iconSize - parent.gap * 3
|
||||
height: 40
|
||||
x: parent.gap * 2 + Theme.iconSize
|
||||
@@ -78,17 +81,18 @@ DankOSD {
|
||||
enabled: AudioService.sink && AudioService.sink.audio
|
||||
showValue: true
|
||||
unit: "%"
|
||||
valueOverride: displayPercent
|
||||
|
||||
Component.onCompleted: {
|
||||
if (AudioService.sink && AudioService.sink.audio) {
|
||||
value = Math.round(AudioService.sink.audio.volume * 100)
|
||||
value = Math.min(100, Math.round(AudioService.sink.audio.volume * 100))
|
||||
}
|
||||
}
|
||||
|
||||
onSliderValueChanged: newValue => {
|
||||
if (AudioService.sink && AudioService.sink.audio) {
|
||||
AudioService.sink.audio.volume = newValue / 100
|
||||
resetHideTimer()
|
||||
hideTimer.restart()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +105,7 @@ DankOSD {
|
||||
|
||||
function onVolumeChanged() {
|
||||
if (volumeSlider && !volumeSlider.pressed) {
|
||||
volumeSlider.value = Math.round(AudioService.sink.audio.volume * 100)
|
||||
volumeSlider.value = Math.min(100, Math.round(AudioService.sink.audio.volume * 100))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,7 +117,7 @@ DankOSD {
|
||||
if (AudioService.sink && AudioService.sink.audio && contentLoader.item) {
|
||||
const slider = contentLoader.item.children[0].children[1]
|
||||
if (slider) {
|
||||
slider.value = Math.round(AudioService.sink.audio.volume * 100)
|
||||
slider.value = Math.min(100, Math.round(AudioService.sink.audio.volume * 100))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ Item {
|
||||
property bool showValue: true
|
||||
property bool isDragging: false
|
||||
property bool wheelEnabled: true
|
||||
property real valueOverride: -1
|
||||
readonly property bool containsMouse: sliderMouseArea.containsMouse
|
||||
|
||||
signal sliderValueChanged(int newValue)
|
||||
@@ -114,7 +115,7 @@ Item {
|
||||
StyledText {
|
||||
id: tooltipText
|
||||
|
||||
text: slider.value + slider.unit
|
||||
text: (slider.valueOverride >= 0 ? Math.round(slider.valueOverride) : slider.value) + slider.unit
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceText
|
||||
font.weight: Font.Medium
|
||||
|
||||
Reference in New Issue
Block a user