1
0
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:
purian23
2025-09-13 21:01:56 -04:00
parent 6d84553da9
commit 3db1a2ccf2
5 changed files with 27 additions and 13 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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))
}
}
}

View File

@@ -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