Smooth scrolling (pixel-precise UI scrolling, eased wheel) and smooth camera zoom #727

Closed
opened 2026-10-12 17:57:20 +00:00 by sky_line · 1 comment
Owner

Today: the UI only understands whole wheel notches. The window passes integer clicks (handleScrollWheel(S32 clicks)), and every widget moves a fixed amount per click (scroll lists a line, scroll containers a step, text editors lines). Touchpads and free-spinning or high-resolution wheels can only produce discrete jumps. (45ac9a1723 made the stepping symmetric -- fractional deltas accumulate into whole steps -- but it is still stepped.)

Wanted: smooth scrolling

  1. Fractional deltas through the input chain: a float scroll path from LLWindowSDL through LLViewerWindow to LLView::handleScrollWheel. The integer path stays for widgets that only understand notches, and as the fallback.
  2. Pixel scrolling in the scrolling widgets: scroll containers, scroll lists, text editors / chat history, folder views (inventory), the web / media floater. Each moves by delta x line height in pixels, not whole lines; scrollbars follow.
  3. Eased motion for notched wheels: one notch animates over about 100 ms instead of jumping (browser-style), behind a setting, on by default if it feels right.

Wanted: smooth camera zoom

  • The mouse wheel's camera zoom (third person / orbit, and the mouselook FOV zoom if it uses the wheel) eases toward the target distance instead of stepping, and uses fractional deltas from touchpads and high-resolution wheels. Behind a setting, with a speed / smoothing control.
  • Coordinate with the camera options already in Move & View (the Beta 5 middle-mouse camera and speed-based FOV).

Testing: touchpad, free-spinning wheel, regular notched wheel; Linux (Wayland / X11) and Windows; long inventories, chat history, scroll lists, web floater; camera zoom in / out at various distances.

**Today:** the UI only understands whole wheel notches. The window passes integer clicks (`handleScrollWheel(S32 clicks)`), and every widget moves a fixed amount per click (scroll lists a line, scroll containers a step, text editors lines). Touchpads and free-spinning or high-resolution wheels can only produce discrete jumps. (45ac9a1723 made the stepping symmetric -- fractional deltas accumulate into whole steps -- but it is still stepped.) **Wanted: smooth scrolling** 1. **Fractional deltas through the input chain:** a float scroll path from LLWindowSDL through LLViewerWindow to `LLView::handleScrollWheel`. The integer path stays for widgets that only understand notches, and as the fallback. 2. **Pixel scrolling** in the scrolling widgets: scroll containers, scroll lists, text editors / chat history, folder views (inventory), the web / media floater. Each moves by delta x line height in pixels, not whole lines; scrollbars follow. 3. **Eased motion for notched wheels:** one notch animates over about 100 ms instead of jumping (browser-style), behind a setting, on by default if it feels right. **Wanted: smooth camera zoom** - The mouse wheel's camera zoom (third person / orbit, and the mouselook FOV zoom if it uses the wheel) eases toward the target distance instead of stepping, and uses fractional deltas from touchpads and high-resolution wheels. Behind a setting, with a speed / smoothing control. - Coordinate with the camera options already in Move & View (the Beta 5 middle-mouse camera and speed-based FOV). **Testing:** touchpad, free-spinning wheel, regular notched wheel; Linux (Wayland / X11) and Windows; long inventories, chat history, scroll lists, web floater; camera zoom in / out at various distances.
sky_line added this to the Slipstream project 2026-10-12 17:57:20 +00:00
Author
Owner

Fixed in 1.4.1 (cdcbb8c45f). Reopen if you still see it.

Fixed in 1.4.1 (cdcbb8c45f). Reopen if you still see it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#727
No description provided.