From fea9047abe9e53bdb61d8b79d718e44d3c3237fc Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Mon, 18 Sep 2023 13:20:45 +0200 Subject: [PATCH] Fix moving slider with arrow keys (#3354) It would sometimes get stuck on the same value due to "smart-aim" --- crates/egui/src/widgets/slider.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/egui/src/widgets/slider.rs b/crates/egui/src/widgets/slider.rs index 6dfb1df6605..1d4c5f8d998 100644 --- a/crates/egui/src/widgets/slider.rs +++ b/crates/egui/src/widgets/slider.rs @@ -605,13 +605,14 @@ impl<'a> Slider<'a> { let kb_step = increment as f32 - decrement as f32; if kb_step != 0.0 { + let ui_point_per_step = 1.0; // move this many ui points for each kb_step let prev_value = self.get_value(); let prev_position = self.position_from_value(prev_value, position_range); - let new_position = prev_position + kb_step; + let new_position = prev_position + ui_point_per_step * kb_step; let new_value = match self.step { Some(step) => prev_value + (kb_step as f64 * step), None if self.smart_aim => { - let aim_radius = ui.input(|i| i.aim_radius()); + let aim_radius = 0.49 * ui_point_per_step; // Chosen so we don't include `prev_value` in the search. emath::smart_aim::best_in_range_f64( self.value_from_position(new_position - aim_radius, position_range), self.value_from_position(new_position + aim_radius, position_range),