I'm not convinced that sticking with wlr_output_cursor or even wlr_cursor is a good idea. I think the direction we need to take is to make simple and effective helpers instead of creating this framework we call wlr_cursor. I have refactored tinywl to demonstrate the scale of changes needed to be made to compositors to support this.
TODO: Support hw cursors
Advantages over upstream:
- Fixes #3436 (closed)
- Supports cursor subsurfaces
- Reduces complexity
- We no longer need to rely on the extremely complex and error prone wlr_cursor infrastructure that duplicates work across it and scene/compositors.
- Although tinywl does gain some lines of code, these lines of code are mostly boilerplate and actually has a lot in common with the existing keyboard management.
- Increase code reuse. This implementation relies on scene to send enter/leave output events.
- Leverage fractional scaling support that scene gives us
- Implements a reusable xcursor scene helper that automatically handles scaling for us
- Fixes blurry cursor with (!3418). Tinywl would always use scale 1 for its default cursor