Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scroll wheel zoom has extreme overshoot (on macOS) #4664

Closed
kpreid opened this issue Jan 3, 2024 · 3 comments · Fixed by #4668
Closed

Scroll wheel zoom has extreme overshoot (on macOS) #4664

kpreid opened this issue Jan 3, 2024 · 3 comments · Fixed by #4668
Labels
😤 annoying Something in the UI / SDK is annoying to use 🪳 bug Something isn't working
Milestone

Comments

@kpreid
Copy link
Collaborator

kpreid commented Jan 3, 2024

Describe the annoyance
When zooming a 3D space view, it is easy to zoom in or out way too much — because the zoom continues for a very long time after I stop moving the scroll wheel. It feels like some layer of input processing is inappropriately applying touchpad-style flinging to my wheel input (which then works poorly because wheels don't report the end of quick motion like a touchpad would).

Also, both wheel-based and touchpad-based zooming have a behavior where the rate of change of the displayed zoom seems to be held constant until it (apparently) catches up to an invisible target value. This is bad for precise control, because it means I can't predict when I've hit the desired target and stop my physical input motion there; I have to wait until it stops and then adjust. (Note that typical flinging implementations convey the distance that will be covered via a gradually decreasing velocity.)

It might be that the fling-ish behavior would be much more controllable if the constant-rate behavior was removed, but the combination is definitely An Annoyance and if it were up to me, I'd remove both.

To Reproduce
Steps to reproduce the behavior:

  1. Get a macOS machine.
  2. Attach a conventional USB wheel mouse.
  3. Open a 3D space view.
  4. Try to zoom to a desired scale precisely and quickly.

Expected behavior
Zoom tracks the motion of the wheel proportionally.

Actual behavior: After a movement of more than about 5 steps, zooming continues for about a second, often reducing the scene to a point if zooming out.

Your goals
Quickly scale data to a convenient viewing size (when auto-fitting doesn't work).

Screenshots
In this recording, I am making only brief motions of the scroll wheel but, if they are not very small, zooming continues for around a second afterward, with no hint as to when it is going to stop:

Screen.Recording.2024-01-03.at.10.15.19.mp4

Desktop (please complete the following information):

  • OS: macOS Sonoma 14.2.1 (23C71)
  • Affects rerun versions from 0.11.0 to b4768f3
@kpreid kpreid added 👀 needs triage This issue needs to be triaged by the Rerun team 😤 annoying Something in the UI / SDK is annoying to use labels Jan 3, 2024
@emilk
Copy link
Member

emilk commented Jan 4, 2024

We apply a smoothing to the scroll input that causes this latency. I'll take a quick stab at fixing it.

@emilk
Copy link
Member

emilk commented Jan 4, 2024

Fix in #4668

@Wumpf Wumpf added 🪳 bug Something isn't working and removed 👀 needs triage This issue needs to be triaged by the Rerun team labels Jan 4, 2024
@Wumpf Wumpf added this to the 0.12 milestone Jan 4, 2024
Wumpf pushed a commit that referenced this issue Jan 4, 2024
### What
Switch from linear interpolation to exponential.

Now 90% of the scroll delta is applied within 0.1 seconds. This is long
enough to feel smooth, but short enough to feel responsive.

This feels great on my Mac

* Closes #4664

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested the web demo (if applicable):
* Using newly built examples:
[app.rerun.io](https://app.rerun.io/pr/4668/index.html)
* Using examples from latest `main` build:
[app.rerun.io](https://app.rerun.io/pr/4668/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json)
* Using full set of examples from `nightly` build:
[app.rerun.io](https://app.rerun.io/pr/4668/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json)
* [x] The PR title and labels are set such as to maximize their
usefulness for the next release's CHANGELOG

- [PR Build Summary](https://build.rerun.io/pr/4668)
- [Docs
preview](https://rerun.io/preview/6b5b07e83b24740b8b916fd9fc69ab86b54acef9/docs)
<!--DOCS-PREVIEW-->
- [Examples
preview](https://rerun.io/preview/6b5b07e83b24740b8b916fd9fc69ab86b54acef9/examples)
<!--EXAMPLES-PREVIEW-->
- [Recent benchmark results](https://build.rerun.io/graphs/crates.html)
- [Wasm size tracking](https://build.rerun.io/graphs/sizes.html)
@kpreid
Copy link
Collaborator Author

kpreid commented Jan 4, 2024

I'd personally prefer even more direct control, but it's much better now. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
😤 annoying Something in the UI / SDK is annoying to use 🪳 bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants