fix(battery): align brightness reporting with cosmic-osd
This commit is contained in:
parent
8320b54074
commit
226c50e233
1 changed files with 24 additions and 6 deletions
|
|
@ -136,10 +136,16 @@ impl CosmicBatteryApplet {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn screen_brightness_percent(&self) -> Option<f64> {
|
fn screen_brightness_percent(&self) -> Option<f64> {
|
||||||
Some(
|
let raw = self.screen_brightness? as i64;
|
||||||
(self.screen_brightness? as f64 / self.max_screen_brightness?.max(1) as f64)
|
let max = self.max_screen_brightness?.max(1) as i64;
|
||||||
.clamp(0.01, 1.0),
|
if max <= 20 {
|
||||||
)
|
// Coarse panels (<=20 brightness levels)
|
||||||
|
let rung = (raw.saturating_add(1)).min(20);
|
||||||
|
Some((5 * rung) as f64 / 100.0)
|
||||||
|
} else {
|
||||||
|
let p = ((raw * 100 + max / 2) / max).clamp(1, 100) as f64;
|
||||||
|
Some(p / 100.0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_display(&mut self) {
|
fn update_display(&mut self) {
|
||||||
|
|
@ -242,8 +248,20 @@ impl cosmic::Application for CosmicBatteryApplet {
|
||||||
return cosmic::task::message(Message::SetKbdBrightnessDebounced);
|
return cosmic::task::message(Message::SetKbdBrightnessDebounced);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Matching brightness calculation logic from cosmic-osd and cosmic-settings-daemon
|
||||||
Message::SetScreenBrightness(brightness) => {
|
Message::SetScreenBrightness(brightness) => {
|
||||||
self.screen_brightness = Some(brightness);
|
let snapped = if let Some(max) = self.max_screen_brightness {
|
||||||
|
if max > 0 && max <= 20 {
|
||||||
|
// Coarse: map raw→k by round, then back to raw setpoint round(k*max/20)
|
||||||
|
let k = ((brightness as i64 * 20 + (max as i64)/2) / (max as i64)).clamp(0, 20);
|
||||||
|
(((k * (max as i64)) + 10) / 20) as i32
|
||||||
|
} else {
|
||||||
|
brightness
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
brightness
|
||||||
|
};
|
||||||
|
self.screen_brightness = Some(snapped);
|
||||||
if !self.dragging_screen_brightness {
|
if !self.dragging_screen_brightness {
|
||||||
self.dragging_screen_brightness = true;
|
self.dragging_screen_brightness = true;
|
||||||
self.update_display();
|
self.update_display();
|
||||||
|
|
@ -663,7 +681,7 @@ impl cosmic::Application for CosmicBatteryApplet {
|
||||||
.size(24)
|
.size(24)
|
||||||
.symbolic(true),
|
.symbolic(true),
|
||||||
slider(
|
slider(
|
||||||
1..=max_screen_brightness,
|
0..=max_screen_brightness,
|
||||||
screen_brightness,
|
screen_brightness,
|
||||||
Message::SetScreenBrightness
|
Message::SetScreenBrightness
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue