1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-06 05:25:41 -05:00

brightness: optimistically update OSDs, works better

This commit is contained in:
bbedward
2025-11-05 10:00:42 -05:00
parent 1e6c80bd03
commit ae5d6c1ba4
3 changed files with 80 additions and 56 deletions

View File

@@ -148,16 +148,28 @@ Row {
enabled: DisplayService.brightnessAvailable && targetDeviceName.length > 0
minimum: {
if (!targetDevice) return 1
const isLogarithmic = SessionData.getBrightnessLogarithmic(targetDevice.id)
if (isLogarithmic) {
return 1
}
return (targetDevice.class === "backlight" || targetDevice.class === "ddc") ? 1 : 0
}
maximum: {
if (!targetDevice) return 100
const isLogarithmic = SessionData.getBrightnessLogarithmic(targetDevice.id)
if (isLogarithmic) {
return 100
}
return targetDevice.displayMax || 100
}
value: targetBrightness
showValue: true
unit: {
if (!targetDevice) return "%"
const isLogarithmic = SessionData.getBrightnessLogarithmic(targetDevice.id)
if (isLogarithmic) {
return "%"
}
return targetDevice.class === "ddc" ? "" : "%"
}
onSliderValueChanged: function (newValue) {

View File

@@ -13,10 +13,12 @@ DankOSD {
Connections {
target: DisplayService
function onBrightnessChanged() {
function onBrightnessChanged(showOsd) {
if (showOsd) {
root.show()
}
}
}
content: Item {
anchors.fill: parent
@@ -63,11 +65,19 @@ DankOSD {
minimum: {
const deviceInfo = DisplayService.getCurrentDeviceInfo()
if (!deviceInfo) return 1
const isLogarithmic = SessionData.getBrightnessLogarithmic(deviceInfo.id)
if (isLogarithmic) {
return 1
}
return (deviceInfo.class === "backlight" || deviceInfo.class === "ddc") ? 1 : 0
}
maximum: {
const deviceInfo = DisplayService.getCurrentDeviceInfo()
if (!deviceInfo) return 100
const isLogarithmic = SessionData.getBrightnessLogarithmic(deviceInfo.id)
if (isLogarithmic) {
return 100
}
return deviceInfo.displayMax || 100
}
enabled: DisplayService.brightnessAvailable
@@ -75,6 +85,10 @@ DankOSD {
unit: {
const deviceInfo = DisplayService.getCurrentDeviceInfo()
if (!deviceInfo) return "%"
const isLogarithmic = SessionData.getBrightnessLogarithmic(deviceInfo.id)
if (isLogarithmic) {
return "%"
}
return deviceInfo.class === "ddc" ? "" : "%"
}
thumbOutlineColor: Theme.surfaceContainer
@@ -106,7 +120,7 @@ DankOSD {
Connections {
target: DisplayService
function onBrightnessChanged() {
function onBrightnessChanged(showOsd) {
if (!brightnessSlider.pressed && brightnessSlider.value !== DisplayService.brightnessLevel) {
brightnessSlider.value = DisplayService.brightnessLevel
}

View File

@@ -29,9 +29,8 @@ Singleton {
}
property int maxBrightness: 100
property bool brightnessInitialized: false
property bool suppressNextOsd: false
signal brightnessChanged
signal brightnessChanged(bool showOsd)
signal deviceSwitched
property bool nightModeActive: nightModeEnabled
@@ -40,7 +39,7 @@ Singleton {
property bool automationAvailable: false
property bool gammaControlAvailable: false
function updateSingleDevice(device, suppressSignal) {
function updateSingleDevice(device) {
const deviceIndex = devices.findIndex(d => d.id === device.id)
if (deviceIndex !== -1) {
const newDevices = [...devices]
@@ -77,20 +76,10 @@ Singleton {
}
}
const oldValue = deviceBrightness[device.id]
const newBrightness = Object.assign({}, deviceBrightness)
newBrightness[device.id] = displayValue
deviceBrightness = newBrightness
brightnessVersion++
const shouldSuppress = suppressSignal || suppressNextOsd
if (suppressNextOsd) {
suppressNextOsd = false
}
if (!shouldSuppress && oldValue !== displayValue) {
brightnessChanged()
}
}
function updateFromBrightnessState(state) {
@@ -166,8 +155,18 @@ Singleton {
}
const deviceInfo = getCurrentDeviceInfoByName(actualDevice)
const minValue = (deviceInfo && (deviceInfo.class === "backlight" || deviceInfo.class === "ddc")) ? 1 : 0
const maxValue = deviceInfo?.displayMax || 100
const isLogarithmic = SessionData.getBrightnessLogarithmic(actualDevice)
let minValue = 0
let maxValue = 100
if (isLogarithmic) {
minValue = 1
maxValue = 100
} else {
minValue = (deviceInfo && (deviceInfo.class === "backlight" || deviceInfo.class === "ddc")) ? 1 : 0
maxValue = deviceInfo?.displayMax || 100
}
if (maxValue <= 0) {
console.warn("DisplayService: Invalid max value for device", actualDevice, "- skipping brightness change")
@@ -181,11 +180,10 @@ Singleton {
return
}
if (suppressOsd) {
suppressNextOsd = true
}
const isLogarithmic = SessionData.getBrightnessLogarithmic(actualDevice)
const newBrightness = Object.assign({}, deviceBrightness)
newBrightness[actualDevice] = clampedValue
deviceBrightness = newBrightness
brightnessVersion++
if (isLogarithmic) {
const newUserSet = Object.assign({}, deviceBrightnessUserSet)
@@ -194,6 +192,10 @@ Singleton {
SessionData.setBrightnessUserSetValue(actualDevice, clampedValue)
}
if (!suppressOsd) {
brightnessChanged(true)
}
const params = {
"device": actualDevice,
"percent": clampedValue
@@ -631,7 +633,7 @@ Singleton {
}
function onBrightnessDeviceUpdate(device) {
updateSingleDevice(device, false)
updateSingleDevice(device)
}
}
@@ -733,22 +735,20 @@ Singleton {
root.setCurrentDevice(actualDevice, false)
}
DMSService.sendRequest("brightness.increment", {
"device": actualDevice,
"step": stepValue
}, response => {
if (response.error) {
console.error("DisplayService: Failed to increment brightness:", response.error)
ToastService.showError("Failed to increment brightness: " + response.error)
return
const isLogarithmic = SessionData.getBrightnessLogarithmic(actualDevice)
const currentBrightness = root.getDeviceBrightness(actualDevice)
const deviceInfo = root.getCurrentDeviceInfoByName(actualDevice)
let maxValue = 100
if (isLogarithmic) {
maxValue = 100
} else {
maxValue = deviceInfo?.displayMax || 100
}
if (response.result && response.result.devices) {
const device = response.result.devices.find(d => d.id === actualDevice)
if (device) {
updateSingleDevice(device, false)
}
}
})
const newBrightness = Math.min(maxValue, currentBrightness + stepValue)
root.setBrightness(newBrightness, actualDevice, false)
return "Brightness increased by " + stepValue + "%" + (targetDevice ? " on " + targetDevice : "")
}
@@ -772,22 +772,20 @@ Singleton {
root.setCurrentDevice(actualDevice, false)
}
DMSService.sendRequest("brightness.decrement", {
"device": actualDevice,
"step": stepValue
}, response => {
if (response.error) {
console.error("DisplayService: Failed to decrement brightness:", response.error)
ToastService.showError("Failed to decrement brightness: " + response.error)
return
const isLogarithmic = SessionData.getBrightnessLogarithmic(actualDevice)
const currentBrightness = root.getDeviceBrightness(actualDevice)
const deviceInfo = root.getCurrentDeviceInfoByName(actualDevice)
let minValue = 0
if (isLogarithmic) {
minValue = 1
} else {
minValue = (deviceInfo && (deviceInfo.class === "backlight" || deviceInfo.class === "ddc")) ? 1 : 0
}
if (response.result && response.result.devices) {
const device = response.result.devices.find(d => d.id === actualDevice)
if (device) {
updateSingleDevice(device, false)
}
}
})
const newBrightness = Math.max(minValue, currentBrightness - stepValue)
root.setBrightness(newBrightness, actualDevice, false)
return "Brightness decreased by " + stepValue + "%" + (targetDevice ? " on " + targetDevice : "")
}