mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
Wheel notches and the arrow keys over a focused number field step the value its text shows (widgets::step_value), and nothing there knew the field's bounds: the Stroke panel's Weight went on to -3 pt and its Limit to 0 x in the field, while the panel only clamped what it applied (the spinner's min, Limit's clamp to 1..500), so the next step went on from the out-of-range text. A label scrub (scrub::field) had the same gap. step_value and scrub::field now take the field's bounds and stop at them, so the field shows where they stopped and the value applied is the same. The fields that have bounds pass them: - spin_field / spin_field_auto / spin_plain: their `min` (the spinner and a typed value already stopped there); - range_field: its range; it now also takes a value that may be blank (None), as mixed_field does; - opt_field (dash and gap lengths): 0; - the Revolve dialog's values: their range. Fields that clamped only what they applied now say their range with range_field instead: the Stroke panel's Limit (1..500), the Transparency and Properties opacity (0..100), the Transform panel's polygon sides, and the dialogs' bounded counts, percentages and lengths (Blend Options, Envelope, Flattener, Liquify, Freehand, Live Paint, Path ops, Perspective Grid, PNG ppi, Print, Save for Web, Shape Builder, Slices, Swatch Options, Symbol options, Justification, Dimension, PDF page, the effect dialogs' number rows). docs/ui-parity.md's number-field row says so. Test: panels::stroke::tests::the_wheel_stops_weight_at_zero_and_limit_at_one (the Stroke panel in a headless frame; focus Weight at 1 pt and turn the wheel down four notches: the field shows 0 pt and the stroke is 0 pt; the same with Limit at 2 x: 1 x and a limit of 1). It fails without the change (the field showed -3 pt) and passes with it; the other numeric field, scrub and dialog tests still pass.