fix(input): refuse a non-finite wheel amount instead of zeroing it
Zeroing an unusable wheel amount turned it into a zero-notch zoom: the factor was exactly one, the range did not change, but the zoom body still ran through set_x_range/set_y_range, which clear auto_scale unconditionally. One garbage wheel therefore disarmed auto-fit on every axis. on_wheel now rejects an unusable amount before the event can mutate anything, keeping the position fallback. The tests that should have caught it are strengthened: the wheel case now asserts auto scale is still armed (it was passing either way), and the invalid-position case checks a pan measured from the last real position with the drag alive, rather than a range nothing could have moved.
This commit is contained in:
1 parent
b5b9b42be1
commit
dc0a977c86
4 files changed
+41
-6
No files matched your search
@@ -322,7 +322,12 @@ PLOT_TEST(non_finite_wheel_does_not_break_a_range) {
|
||||
PLOT_CHECK(std::fabs(p.x_range(ax).min) < 1e6 && std::fabs(p.x_range(ax).max) < 1e6);
|
||||
PLOT_CHECK(p.x_range(ax).span() < span_before);
|
||||
|
||||
// A non-finite amount is no zoom at all.
|
||||
// A non-finite amount is no zoom at all -- and, just as important, it must not
|
||||
// touch the axes. A *zeroed* amount would be a zero-notch zoom (a factor of
|
||||
// exactly one): the range would survive, but the range setters it runs through
|
||||
// clear auto scale, so one garbage wheel would quietly disarm auto-fit.
|
||||
p.set_x_auto_scale(ax, true);
|
||||
p.set_y_auto_scale(ay, true);
|
||||
const plot::Range xr = p.x_range(ax);
|
||||
const plot::Range yr = p.y_range(ay);
|
||||
c.on_wheel({400.0f, 200.0f, 0.0f, nan, 0});
|
||||
@@ -330,6 +335,8 @@ PLOT_TEST(non_finite_wheel_does_not_break_a_range) {
|
||||
PLOT_CHECK_NEAR(p.x_range(ax).min, xr.min, 1e-12);
|
||||
PLOT_CHECK_NEAR(p.x_range(ax).max, xr.max, 1e-12);
|
||||
PLOT_CHECK_NEAR(p.y_range(ay).min, yr.min, 1e-12);
|
||||
PLOT_CHECK(p.x_axis(ax).auto_scale);
|
||||
PLOT_CHECK(p.y_axis(ay).auto_scale);
|
||||
}
|
||||
|
||||
PLOT_TEST(key_f_auto_fits_traces) {
|
||||
|
||||
Reference in new issue
Block a user