1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-30 00:12:50 -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 { DankSlider {
id: volumeSlider id: volumeSlider
readonly property real actualVolumePercent: AudioService.source && AudioService.source.audio ? Math.round(AudioService.source.audio.volume * 100) : 0
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: headerRow.bottom anchors.top: headerRow.bottom
@@ -42,7 +45,7 @@ Rectangle {
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
anchors.topMargin: Theme.spacingXS anchors.topMargin: Theme.spacingXS
height: 35 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 minimum: 0
maximum: 100 maximum: 100
leftIcon: { leftIcon: {
@@ -54,6 +57,7 @@ Rectangle {
enabled: AudioService.source && AudioService.source.audio enabled: AudioService.source && AudioService.source.audio
unit: "%" unit: "%"
showValue: true showValue: true
valueOverride: actualVolumePercent
visible: AudioService.source && AudioService.source.audio visible: AudioService.source && AudioService.source.audio
onSliderValueChanged: function(newValue) { onSliderValueChanged: function(newValue) {

View File

@@ -57,12 +57,17 @@ Row {
} }
DankSlider { DankSlider {
readonly property real actualVolumePercent: defaultSink ? Math.round(defaultSink.audio.volume * 100) : 0
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
width: parent.width - (Theme.iconSize + Theme.spacingS * 2) - Theme.spacingM width: parent.width - (Theme.iconSize + Theme.spacingS * 2) - Theme.spacingM
enabled: defaultSink !== null enabled: defaultSink !== null
minimum: 0 minimum: 0
maximum: 100 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) { onSliderValueChanged: function(newValue) {
if (defaultSink) { if (defaultSink) {
defaultSink.audio.volume = newValue / 100.0 defaultSink.audio.volume = newValue / 100.0

View File

@@ -1406,7 +1406,7 @@ Item {
Rectangle { Rectangle {
width: parent.width 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.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
color: Theme.primary color: Theme.primary
@@ -1447,8 +1447,8 @@ Item {
onWheel: function(wheel) { onWheel: function(wheel) {
if (defaultSink) { if (defaultSink) {
const delta = wheel.angleDelta.y / 120 // Standard wheel step const delta = wheel.angleDelta.y / 120
const increment = delta * 0.05 // 5% per scroll step const increment = delta * 0.05
const newVolume = Math.max(0, Math.min(1, defaultSink.audio.volume + increment)) const newVolume = Math.max(0, Math.min(1, defaultSink.audio.volume + increment))
defaultSink.audio.volume = newVolume defaultSink.audio.volume = newVolume
if (newVolume > 0 && defaultSink.audio.muted) { if (newVolume > 0 && defaultSink.audio.muted) {

View File

@@ -58,7 +58,7 @@ DankOSD {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onClicked: { onClicked: {
AudioService.toggleMute() AudioService.toggleMute()
resetHideTimer() hideTimer.restart()
} }
onContainsMouseChanged: { onContainsMouseChanged: {
setChildHovered(containsMouse || volumeSlider.containsMouse) setChildHovered(containsMouse || volumeSlider.containsMouse)
@@ -69,6 +69,9 @@ DankOSD {
DankSlider { DankSlider {
id: volumeSlider 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 width: parent.width - Theme.iconSize - parent.gap * 3
height: 40 height: 40
x: parent.gap * 2 + Theme.iconSize x: parent.gap * 2 + Theme.iconSize
@@ -78,17 +81,18 @@ DankOSD {
enabled: AudioService.sink && AudioService.sink.audio enabled: AudioService.sink && AudioService.sink.audio
showValue: true showValue: true
unit: "%" unit: "%"
valueOverride: displayPercent
Component.onCompleted: { Component.onCompleted: {
if (AudioService.sink && AudioService.sink.audio) { 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 => { onSliderValueChanged: newValue => {
if (AudioService.sink && AudioService.sink.audio) { if (AudioService.sink && AudioService.sink.audio) {
AudioService.sink.audio.volume = newValue / 100 AudioService.sink.audio.volume = newValue / 100
resetHideTimer() hideTimer.restart()
} }
} }
@@ -101,7 +105,7 @@ DankOSD {
function onVolumeChanged() { function onVolumeChanged() {
if (volumeSlider && !volumeSlider.pressed) { 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) { if (AudioService.sink && AudioService.sink.audio && contentLoader.item) {
const slider = contentLoader.item.children[0].children[1] const slider = contentLoader.item.children[0].children[1]
if (slider) { 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 showValue: true
property bool isDragging: false property bool isDragging: false
property bool wheelEnabled: true property bool wheelEnabled: true
property real valueOverride: -1
readonly property bool containsMouse: sliderMouseArea.containsMouse readonly property bool containsMouse: sliderMouseArea.containsMouse
signal sliderValueChanged(int newValue) signal sliderValueChanged(int newValue)
@@ -114,7 +115,7 @@ Item {
StyledText { StyledText {
id: tooltipText id: tooltipText
text: slider.value + slider.unit text: (slider.valueOverride >= 0 ? Math.round(slider.valueOverride) : slider.value) + slider.unit
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceText color: Theme.surfaceText
font.weight: Font.Medium font.weight: Font.Medium