improv(display): switch scaling slider to spin button

This commit is contained in:
Michael Aaron Murphy 2025-02-17 20:54:12 +01:00
parent d1e41d53f6
commit 43f2652d5d
No known key found for this signature in database
GPG key ID: B2732D4240C9212C

View file

@ -25,7 +25,6 @@ use tokio::sync::oneshot;
use tracing::error; use tracing::error;
static DPI_SCALES: &[u32] = &[50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300]; static DPI_SCALES: &[u32] = &[50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300];
static ADJUSTED_SCALE_BREAKPOINTS: &[u32] = &[0, 1, 2, 3, 4];
static DPI_SCALE_LABELS: Lazy<Vec<String>> = static DPI_SCALE_LABELS: Lazy<Vec<String>> =
Lazy::new(|| DPI_SCALES.iter().map(|scale| format!("{scale}%")).collect()); Lazy::new(|| DPI_SCALES.iter().map(|scale| format!("{scale}%")).collect());
@ -104,8 +103,6 @@ pub enum Message {
Scale(usize), Scale(usize),
/// Adjust the display scale. /// Adjust the display scale.
AdjustScale(u32), AdjustScale(u32),
/// Apply a custom scale adjustment.
AdjustScaleApply,
/// Refreshes display outputs. /// Refreshes display outputs.
Update { Update {
/// Available outputs from cosmic-randr. /// Available outputs from cosmic-randr.
@ -531,10 +528,8 @@ impl Page {
} }
Message::AdjustScale(scale) => { Message::AdjustScale(scale) => {
self.adjusted_scale = scale * 5; self.adjusted_scale = scale;
}
Message::AdjustScaleApply => {
if let Some(option) = self.cache.scale_selected { if let Some(option) = self.cache.scale_selected {
return self.set_scale(option); return self.set_scale(option);
} }
@ -570,7 +565,7 @@ impl Page {
) )
} }
/// Displays the night light context drawer. // /// Displays the night light context drawer.
// pub fn night_light_context_view(&self) -> Element<pages::Message> { // pub fn night_light_context_view(&self) -> Element<pages::Message> {
// column().into() // column().into()
// } // }
@ -685,7 +680,7 @@ impl Page {
self.cache.refresh_rate_selected = None; self.cache.refresh_rate_selected = None;
self.cache.vrr_selected = None; self.cache.vrr_selected = None;
self.adjusted_scale = ((self.config.scale % 25).min(20) as f32 / 5.0).round() as u32 * 5; self.adjusted_scale = ((self.config.scale % 25).min(20) as f32 / 5.0).round() as u32 * 5;
self.cache.scale_selected = Some(if self.adjusted_scale != 0 { self.cache.scale_selected = Some(if self.adjusted_scale != 0 && selected_scale > 0 {
selected_scale - 1 selected_scale - 1
} else { } else {
selected_scale selected_scale
@ -943,13 +938,9 @@ impl Page {
let scale = (option * 25 + 50) as u32 + self.adjusted_scale.min(20); let scale = (option * 25 + 50) as u32 + self.adjusted_scale.min(20);
let request = Randr::Scale(scale);
let revert_request = Randr::Scale(self.config.scale);
self.cache.scale_selected = Some(option); self.cache.scale_selected = Some(option);
self.config.scale = scale; self.config.scale = scale;
tasks.push(self.exec_randr(output, Randr::Scale(scale))); tasks.push(self.exec_randr(output, Randr::Scale(scale)));
tasks.push(self.set_dialog(revert_request, &request));
Task::batch(tasks) Task::batch(tasks)
} }
@ -1198,9 +1189,14 @@ pub fn display_configuration() -> Section<crate::pages::Message> {
), ),
widget::settings::item( widget::settings::item(
&descriptions[additional_scale_options], &descriptions[additional_scale_options],
widget::slider(0..=4, page.adjusted_scale / 5, Message::AdjustScale) widget::spin_button(
.on_release(Message::AdjustScaleApply) format!("{}%", page.adjusted_scale),
.breakpoints(ADJUSTED_SCALE_BREAKPOINTS), page.adjusted_scale,
5,
0,
20,
Message::AdjustScale,
),
), ),
widget::settings::item( widget::settings::item(
&descriptions[orientation], &descriptions[orientation],