Skip to content

Make the UI fluid: async clip loading, animations, smoother clip switching#38

Merged
danielchalmers merged 12 commits into
mainfrom
claude/fluid-ui
Jun 18, 2026
Merged

Make the UI fluid: async clip loading, animations, smoother clip switching#38
danielchalmers merged 12 commits into
mainfrom
claude/fluid-ui

Conversation

@danielchalmers

@danielchalmers danielchalmers commented Jun 18, 2026

Copy link
Copy Markdown
Owner

What

A set of changes to make the app feel more fluid and responsive. (Squash-merge — the branch has an add-then-revert detour from exploring a video-overlay approach that didn't pan out; the net change is below.)

1. Load clips off the UI thread

LoadClips scanned the disk (CamStorage.Map) synchronously on the UI thread from both startup and the folder picker, freezing the window during the scan (174 clips ≈ 140 ms on a real archive; worse for larger ones). Now LoadClipsAsync runs the scan via Task.Run; the continuation resumes on the UI thread (WPF SynchronizationContext), so all view-model state is still mutated there. Sibling of the playback-load fix in #33.

2. Smoother clip switching (no loading-screen flash)

The video hosts now stay visible while a selected clip loads, so switching clips just shows the players briefly blank until the first frame decodes — instead of collapsing the video, flashing a full loading screen, and popping back. Less on-screen churn. The full-screen overlay is now reserved for the genuinely no-video states (scanning with no clip selected, errors, the empty state).

3. Fixed the sidebar flicker

RefreshClipState() re-notified FilteredClips on every clip change, rebuilding the list and retriggering its fade. It's now only notified when the list actually changes (folder load / filter text).

4. Subtle animations

  • Window fades in on launch (hardened so a missed Loaded can't leave it invisible).
  • Status overlay + About page fade in.
  • Buttons scale-down on press; camera-view tiles lift on hover.
  • The clip list fades in when its contents change (load/filter) — not per-item, so no flicker while scrolling.

Notes / constraints

  • WPF airspace: the Flyleaf video is a separate native surface that draws on top of WPF, so a WPF panel can't cover it. That's why a clip's load can't be hidden behind a loading screen — hence the "players show directly while loading" behavior above, which reads as cleaner anyway.
  • MainWindowViewModel.LoadClips is now LoadClipsAsync; callers already await it.

Verification

93 tests pass; build + dotnet format clean; smoke-launched on a real 174-clip archive (async scan, playback, animations) with no crashes. Animation/feel verified interactively by the maintainer.

@danielchalmers danielchalmers changed the title Make the UI fluid: async clip loading + animations Make the UI fluid: async clip loading, animations, smoother clip switching Jun 18, 2026
@danielchalmers danielchalmers merged commit 6023264 into main Jun 18, 2026
1 check passed
@danielchalmers danielchalmers deleted the claude/fluid-ui branch June 18, 2026 20:27
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.

1 participant