mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-08 11:52:10 +00:00
Accessibility: a set-value request without a number leaves a dialog slider as it is
This commit is contained in:
@@ -2056,6 +2056,9 @@ fn screen_readers_set_a_dialog_slider_number() {
|
||||
assert_eq!(angle(&app), -90.0, "not a number");
|
||||
f.run(&mut app, vec![set(30.0), set(f64::INFINITY)]);
|
||||
assert_eq!(angle(&app), -90.0, "the last request is not a finite number");
|
||||
let empty = ActionRequest { action: Action::SetValue, target_node: node, target_tree: TreeId::ROOT, data: None };
|
||||
f.run(&mut app, vec![set(30.0), egui::Event::AccessKitActionRequest(empty)]);
|
||||
assert_eq!(angle(&app), -90.0, "the last request has no number");
|
||||
// A field past its rail's end extends the range screen readers get, and a set value can go
|
||||
// that far: Transform Each's Horizontal Scale at 300% on a rail that ends at 200%.
|
||||
app.ui.dialog = None;
|
||||
|
||||
@@ -249,14 +249,10 @@ fn rail_step(ui: &Ui, id: egui::Id, focused: bool, s: &SliderValue) -> Option<f6
|
||||
let n = i.num_accesskit_action_requests(id, Action::Increment) as f64 - i.num_accesskit_action_requests(id, Action::Decrement) as f64;
|
||||
v = by(v, n).clamp(lo, hi);
|
||||
// The last set-value request this frame.
|
||||
let set = i
|
||||
.accesskit_action_requests(id, Action::SetValue)
|
||||
.filter_map(|request| match request.data {
|
||||
Some(ActionData::NumericValue(value)) => Some(value),
|
||||
_ => None,
|
||||
})
|
||||
.last()
|
||||
.filter(|value| value.is_finite());
|
||||
let set = i.accesskit_action_requests(id, Action::SetValue).last().and_then(|request| match request.data {
|
||||
Some(ActionData::NumericValue(value)) if value.is_finite() => Some(value),
|
||||
_ => None,
|
||||
});
|
||||
if let Some(value) = set {
|
||||
// The number the field would show, as `SliderValue::field` reads it.
|
||||
let shown = s.decimals.map_or(value, |d| field_text(value, "", d).parse().unwrap_or(value));
|
||||
|
||||
Reference in New Issue
Block a user