diff --git a/crates/ui-egui/src/dialogs/form.rs b/crates/ui-egui/src/dialogs/form.rs index 333c9de1b..8bfcef3d3 100644 --- a/crates/ui-egui/src/dialogs/form.rs +++ b/crates/ui-egui/src/dialogs/form.rs @@ -790,7 +790,8 @@ pub(super) fn slider_rail_named( range: std::ops::RangeInclusive, track: &dyn Fn(f32) -> egui::Color32, ) { - let shown = crate::widgets::SliderValue::number(d.f64(key, 0.0), range.clone()); + // Whole numbers, as a drag sets them. + let shown = crate::widgets::SliderValue { decimals: Some(0), ..crate::widgets::SliderValue::number(d.f64(key, 0.0), range.clone()) }; slider_rail_valued(ui, d, key, name, range, Some(shown), track); } diff --git a/crates/ui-egui/src/dialogs/tests.rs b/crates/ui-egui/src/dialogs/tests.rs index 782b3de29..56e59c753 100644 --- a/crates/ui-egui/src/dialogs/tests.rs +++ b/crates/ui-egui/src/dialogs/tests.rs @@ -2098,6 +2098,17 @@ fn screen_readers_set_a_dialog_slider_number() { f.run(&mut app, vec![egui::Event::AccessKitActionRequest(request)]); let moved = app.ui.dialog.as_ref().expect("Transform Each is open").f64("moveH", f64::NAN); assert!((moved - 400.0 * 72.0 / 25.4).abs() < 1e-6, "{moved} pt"); + // A slider without a field's places, Roughen's Detail, sets whole numbers as a drag does. + app.ui.dialog = None; + app.run("effect.dialog", json!({"effect": "distort.roughen"})).unwrap(); + let mut f = Frames::new(); + f.run(&mut app, vec![]); + let out = f.run(&mut app, vec![]); + let (node, ..) = slider_node(&out, "Detail:"); + let request = + ActionRequest { action: Action::SetValue, target_node: node, target_tree: TreeId::ROOT, data: Some(ActionData::NumericValue(12.4)) }; + f.run(&mut app, vec![egui::Event::AccessKitActionRequest(request)]); + assert_eq!(app.ui.dialog.as_ref().expect("Roughen is open").f64("detail", f64::NAN), 12.0); } #[test]