editor: Paint block cursor text upon arrival during animation (#64521)
Follow-up to #63195.
# Objective
When `cursor_animation` is enabled, moving a block cursor (e.g. in Vim
mode) leaves the character underneath hidden until the spring animation
fully finishes, after which the letter pops in.
This happens because `CursorLayout::paint` returned early while
animating, skipping `block_text`.
## Solution
Paint `block_text` upon the animated cursor's arrival at the target
cell, rather than waiting for the entire spring settling phase to
complete:
- Check if any animated corner has reached the target bounds
(`bounds.dilate(...)`).
- If the cursor is still in mid-air, return early so we don't draw the
destination letter prematurely.
- Once it touches the target cell, fall through and paint `block_text`
over the cursor polygon.
## Self-Review Checklist:
- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content adheres to Zed's UI standards
([UX/UI](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
and
[icon](https://github.com/zed-industries/zed/blob/main/crates/icons/README.md)
guidelines)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
## Showcase
Left: before, Right: after
https://github.com/user-attachments/assets/7057f40a-64a7-4035-b8e2-7c0b7dc40069
---
Release Notes:
- Fixed an issue where the block cursor hid the character underneath
until cursor animation completed.
---------
Co-authored-by: Christopher Biscardi <chris@christopherbiscardi.com>
b54cc1d0aclinyisu committed on 9/22/2026, 3:48:24 AM· committed by GitHubparentf25434f