Loading screen, off-main scene build, and folder-as-tile rendering #2

Merged
bnied merged 0 commits from refs/pull/2/head into main 2026-06-07 18:28:31 +00:00
bnied commented 2026-06-07 18:27:11 +00:00 (Migrated from codeberg.org)

Performance and UX overhaul for opening large folders, plus assorted
scene/layout polish.

Rendering performance (fixes the freeze on big folders like ~/Code):

  • Subfolders now render as a single tile (folder glyph + name) instead of
    a platform hosting every nested file. A level's node count is bounded by
    its direct item count instead of exploding with tree depth/density.
  • Build the level node tree off the main thread (Task.detached), then GPU
    prepare it (SCNView.prepare) on a background thread before attaching, so
    neither construction nor first-render texture upload blocks the UI.
  • Texture rendering (labels, SF symbols) made thread-safe via an
    NSBitmapImageRep-backed context (2x scale) instead of NSImage.lockFocus.
  • Only full-size root slabs/tiles cast shadows; mini/icon/label planes
    don't, cutting shadow-map cost.

Loading screen:

  • Full-canvas scanning overlay (scope motif, folder name, amber scan bar)
    shown during scan AND scene build; held until SceneKit draws the first
    frame (render delegate) so there's no black gap or scan->freeze->pop-in.
  • Empty state and overlay are mutually exclusive (no blend on first open).

Sidebar dismiss:

  • Sidebar toggle lives in the in-scene TopBar (the window toolbar is nil'd
    to suppress the macOS 26 fullscreen stripe, which also removes the native
    NavigationSplitView toggle).

Scene/layout:

  • Larger file slabs and icons, more grid spacing, longer file labels.
  • Closer default overview framing (tighter fit than the bounding sphere).
  • Folder plates use Theme.folder blue, consistent with the sidebar.

Cleanup:

  • Removed dead code: gridCellHalfExtent, labelMaxWorldWidth, gridStep stash,
    makeMiniSubdirNode, makeContentLabel, subdirPlatformWidth, focus-in-place
    machinery, and the mini-grid constants.
Performance and UX overhaul for opening large folders, plus assorted scene/layout polish. Rendering performance (fixes the freeze on big folders like ~/Code): - Subfolders now render as a single tile (folder glyph + name) instead of a platform hosting every nested file. A level's node count is bounded by its direct item count instead of exploding with tree depth/density. - Build the level node tree off the main thread (Task.detached), then GPU prepare it (SCNView.prepare) on a background thread before attaching, so neither construction nor first-render texture upload blocks the UI. - Texture rendering (labels, SF symbols) made thread-safe via an NSBitmapImageRep-backed context (2x scale) instead of NSImage.lockFocus. - Only full-size root slabs/tiles cast shadows; mini/icon/label planes don't, cutting shadow-map cost. Loading screen: - Full-canvas scanning overlay (scope motif, folder name, amber scan bar) shown during scan AND scene build; held until SceneKit draws the first frame (render delegate) so there's no black gap or scan->freeze->pop-in. - Empty state and overlay are mutually exclusive (no blend on first open). Sidebar dismiss: - Sidebar toggle lives in the in-scene TopBar (the window toolbar is nil'd to suppress the macOS 26 fullscreen stripe, which also removes the native NavigationSplitView toggle). Scene/layout: - Larger file slabs and icons, more grid spacing, longer file labels. - Closer default overview framing (tighter fit than the bounding sphere). - Folder plates use Theme.folder blue, consistent with the sidebar. Cleanup: - Removed dead code: gridCellHalfExtent, labelMaxWorldWidth, gridStep stash, makeMiniSubdirNode, makeContentLabel, subdirPlatformWidth, focus-in-place machinery, and the mini-grid constants.
Sign in to join this conversation.
No reviewers
No labels
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
spaceduck/neofsn!2
No description provided.