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:
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user