Skip to content

Sharper on low-res screens, native scroll perf, event handling efficency#943

Merged
kevinaboos merged 16 commits into
project-robius:mainfrom
kevinaboos:gradient_sampling_fixes
Jul 14, 2026
Merged

Sharper on low-res screens, native scroll perf, event handling efficency#943
kevinaboos merged 16 commits into
project-robius:mainfrom
kevinaboos:gradient_sampling_fixes

Conversation

@kevinaboos

@kevinaboos kevinaboos commented Jun 23, 2026

Copy link
Copy Markdown
Member

This updates Robrix with my massive improvements to makepad, see makepad/makepad#1127. That includes loads of scroll perf improvements across all platforms.

  • Make lots of things faster and more efficient, like image loading, event handling for key widgets like the RoomScreen and Message.
  • Entirely re-work back pagination to be based solely on when the portallist reaches the top item (or top 1-2 items), not upon scroll position. Now that we've added that functionality to makepad's portallist, we can use it!
  • Use new_batch: true for certain major widgets that should have their own drawlist
  • Make the unreadbadge look a lot better on low-res screens with a cool glow effect that fades to white.
  • Make the dock tab gradient a bit darker for more contrast
  • Fully utilize makepad's async image loading/decoding and caching.
  • improve a lot of icons to alias/rasterize better on low-res screens
  • make matrix pill widgets more efficient to draw and update

Fixes #926

See: <makepad/makepad#1127>

Also make the dock tab gradient a bit darker for more contrast

Fixes project-robius#926
tweak icons to look better with the new SVG rendering functionality
that we added to makepad
now uses Makepad's built-in image cache when showing avatars,
and they're cached using their MxcUri as the cache key

Aslo, update makepad to get our improvements to Windows performance
…eyword

Apparently `half` is a reserved keyword in the Metal shader language.

Further update makepad to get our improvements to UI-wide scrolling
both for drag/touch scrolling and trackpad-driven scrolling.
* we recently fixed `load_image`'s dependencies in makepad to accept
  `Arc<AsRef<[u8]>>` but forgot to leverage that to avoid deep copies
  of the image data in Robrix. Now we do that.
* We also make sure that SVG data is detected in that new load path
  like it was with the previous non-async image load paths.
* Windows: fix frame pacing, paste crash, and wheel input backlog
* Image: don't build unused mip chains; fix stale images in recycled widgets
* Widgets: avoid needless caption redraws; cheaper PortalList height tracking
* Text: cache layouts of long texts; stop cloning glyph outlines every frame
* Html: fix stale links/spans in recycled widgets and <details> renumbering
* Linux: fixed-distance wheel scrolling; Wayland frame-callback pacing
* Text: bigger layout cache budget, reclaimed at the end of each frame
* Don't start duplicate pagination requests while one is in flight.
* Cache decoded media items such that thumbnails and full images are different.
* Show avatar as text until the avatar image is actually decoded
Improve RoomsListEntry to avoid unnecessary redraws and make it faster overall
by removing the unnecessary `script_apply_eval` calls, which are slow.

Add scroll bounce at the top and the end of the roomslist, and at the end of
the timeline in the RoomScreen.

Since we fixed stuff in the portallist and scrollable view behavior,
we no longer need the `was_scrolling` hack, so that's gone now too. w00t

When transitioning from desktop to mobile view mode, clear the focused room
so that a random room doesn't appear highlighted after the switch.
Rework pagination to be based on whether we hit the top few items in the portal list, rather than checking on EVERY scroll.

Cache widget references that are used on every event handler,
which vastly improves per-event handling latency (it was already small, but still).

DOn't redraw matrix link pills all the time, only when they are waiting on data to come in.

Clear the selected room in mobile view mode
@kevinaboos
kevinaboos marked this pull request as ready for review July 14, 2026 17:30
@kevinaboos kevinaboos changed the title Fix sharpness, sampling, gradients, etc on low-res screens Sharper on low-res screens, native scroll perf, event handling efficency Jul 14, 2026
@kevinaboos
kevinaboos merged commit 1bdf88e into project-robius:main Jul 14, 2026
11 checks passed
@kevinaboos
kevinaboos deleted the gradient_sampling_fixes branch July 14, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Some graphics are rendered "ugly" (gradient on room tabs, reaction symbols, room icons).

1 participant