Animate from window frame#25
Conversation
The show/pick animations previously started or ended at the overlay's full bounds, so every tile flew in or out from the same big rectangle regardless of where the underlying window actually sat. Convert each tile's CGWindowList frame (top-left, global) into overlay content-view coordinates and use that as the source/target frame, so tiles fly to and from where their windows really live. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Show and dismiss now fly *all* tiles between their grid cells and the real window frames they snapshot, not just the focused one. The backdrop moves to its own CALayer so it can fade independently of the tiles, and both fades run in parallel with the tile movement at the same duration. Each tile's zPosition mirrors the WindowServer stacking order so overlapping tiles maintain the same overlap as the live windows at the start of show and end of dismiss. Easing switched to a symmetric ease-in-out so the slide feels even on both ends. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Calling raiseAXWindow and app.activate up front let WindowServer reorder the real windows behind the dim backdrop before the tile animation even started, which read as a flash. Move both calls into the dismiss transaction's completion block, with a small pause on either side: one so the slide reads as "done" before any real-window movement, and one to let WindowServer apply the reorder before the overlay disappears. setCompletionBlock fires after the actual last rendered frame instead of guessing from a delay. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The system paints a drop shadow on the real window the moment activation runs. Without one on the tile, you see the shadow pop in outside the tile's edges as the overlay disappears. Animate a matching shadow onto the picked tile during the dismiss so the handoff is seamless. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Letter-prefix typing dims non-matching tiles to 0.3 via applyTileLabels. When the final character resolved a unique match and triggered pick(), those dimmed tiles flew back to their source frames still at 0.3, so the animation looked ghostly compared to clicking. Snap every tile's opacity back to 1 at the start of pick() so the dismiss looks identical in both paths. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
I added the missing changeset in 9307dd7 on branch |
|
I added the animation speed config on top of this PR in |
|
Opened #26 as an updateable replacement with this PR's animation work plus the new animation speed setting, since this fork branch has maintainer edits disabled. |
No description provided.