-
-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Description
We have a super hacky UI implementation to handle floating popups/tooltips/draggable widgets/tabs using overlays (ui::Overlay/ui::OverlayManager) that makes things really tricky (and slow/GPU unfriendly) where we are saving the surface below to restore it just in time when we paint in the background of the overlay bounds (ui::OverlayManager::restoreOverlappedAreas).
Something similar happens with ui::move_region, where we try to blit/re-use a screen region to scroll it. A thing from the DOS/Allegro/CPU-based era that doesn't make any sense. A similar technique is used in the brush preview for certain cursors (Eraser border) where we get the pixels of the screen to restore them.
Recently I've found an issue where the cursor left a trail on macOS when the Color Management is enabled (and probably in other unknown cases yet, related to #1091?). Found the same issue reported by other users:
- https://www.reddit.com/r/aseprite/comments/1f0ah10/trail_following_cursor_dont_know_how_to_turn_off/
- https://bsky.app/profile/asifpx.bsky.social/post/3lc5hcc74c223
- [BUG] Select & gradient tools' selection boxes leave ghost trail #4802
We should remove all this code and replace it using a new kind of ui::Layer that can compose visible UI components at different levels without the need of restoring anything below.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status