Commit Graph

11463 Commits

Author SHA1 Message Date
fufesou
5a89aa8c58 Resolve DRM cursor density from the complete display mapping 2026-09-12 23:02:12 +08:00
fufesou
6e2d838bf1 Keep density-aware cursor IDs compatible with legacy Web clients 2026-09-12 22:56:13 +08:00
fufesou
1fabdd6a9c Preserve Windows cursor alpha during native image decoding 2026-09-12 22:52:36 +08:00
fufesou
afdd1d5c9d Preserve the macOS cursor wire alpha format for older controllers 2026-09-12 21:47:08 +08:00
fufesou
371e5e8f2d Fix native cursor display selection during local movement 2026-09-12 21:46:28 +08:00
fufesou
4d064a8445 docs(cursor): explain outline alignment and Linux density scope 2026-09-12 20:51:59 +08:00
fufesou
02e4f02815 docs(cursor): explain image decoding and Retina sampling 2026-09-12 20:51:58 +08:00
fufesou
bbf86259e9 fix(cursor): encode macOS cursor alpha correctly in Sciter 2026-09-12 20:10:57 +08:00
fufesou
8dfff101f8 fix(cursor): align painted and native minimum sizes 2026-09-12 20:01:26 +08:00
fufesou
6934b3cb14 fix(cursor): follow Linux video pixel scale 2026-09-12 19:56:55 +08:00
fufesou
8f3beba2d1 fix(cursor): decode legacy macOS alpha for native cursors 2026-09-12 18:40:27 +08:00
fufesou
be1f4e0a33 fix(cursor): isolate optional X11 density failures 2026-09-12 18:30:27 +08:00
fufesou
cb068ba5df fix(cursor): decode predefined PNG images with correct alpha
Use Flutter's PNG codec before native rasterization and retain the straight-alpha image cache. Cover both bundled assets through PNG and Windows BGRA registration.
2026-09-12 17:46:57 +08:00
fufesou
1d98d1a647 fix(cursor): keep DRM density lookup off the polling path
Read optional Wayland metadata from the cache without starting discovery or waiting on a refresh. Keep delivering cursor shapes with unknown density when metadata is unavailable, and cover lock contention and repeated empty-cache reads.
2026-09-12 16:56:48 +08:00
fufesou
944f93ba7b fix(cursor): use plugin with nonzero raster dimensions 2026-09-12 15:54:38 +08:00
fufesou
aea8e2a4a6 fix(cursor): preserve macOS alpha through Web decode and resize 2026-09-12 15:51:22 +08:00
fufesou
d65faca21f fix(cursor): preserve unzoomed Web size across browser DPRs 2026-09-12 15:42:47 +08:00
fufesou
85e7c72ccd test(cursor): clarify scale constraints and isolate DPR checks 2026-09-12 14:32:15 +08:00
fufesou
a3bfe075d5 test(cursor): reuse painting and web fixtures 2026-09-12 14:28:41 +08:00
fufesou
7e2e9b68da test(cursor): consolidate native DPI and bridge coverage 2026-09-12 14:26:00 +08:00
fufesou
6871ae130e docs(cursor): clarify optional capture metadata and rendering scope 2026-09-12 10:46:05 +08:00
fufesou
54881092b7 refactor(cursor): separate native capture from rendering fixes 2026-09-12 10:40:23 +08:00
fufesou
34ceb16b63 fix(cursor): align the remote cursor with scrollbar offsets 2026-09-12 06:57:15 +08:00
fufesou
d95c3f2ec9 fix(cursor): preserve full cursor IDs in Web clients 2026-09-12 03:43:32 +08:00
fufesou
daafa09318 fix(cursor): keep the Windows minimum in logical pixels 2026-09-12 03:33:38 +08:00
fufesou
96cd5cd1e2 fix(cursor): align Web hotspots with rounded cursor images 2026-09-12 03:29:27 +08:00
fufesou
d876ea0ce4 fix(cursor): report X11 and Wayland cursor density 2026-09-12 03:27:53 +08:00
fufesou
2a61a0955a fix(cursor): capture the physical Windows cursor across DPI changes 2026-09-12 03:26:52 +08:00
fufesou
db7c48e1a7 fix(cursor): normalize native cursor density in scaled views 2026-09-12 02:57:37 +08:00
fufesou
e72e7fb8ba fix(cursor): capture complete macOS Retina cursor images 2026-09-12 02:47:37 +08:00
fufesou
4f0f784532 feat(cursor): carry the remote bitmap pixel density 2026-09-12 02:47:37 +08:00
fufesou
844bf40703 fix(cursor): align the painted cursor with the remote image 2026-09-12 02:24:31 +08:00
fufesou
f8bfc4eb56 chore(cursor): pin plugin with legacy platform routing preserved 2026-09-12 02:06:41 +08:00
fufesou
1061670368 fix(cursor): delegate native image scaling to cursor plugin
Use the original Flutter image and source hotspot with explicit DPR, retaining the existing view and minimum-size policies. Pin the plugin implementation from rustdesk-org/flutter_custom_cursor#1.
2026-09-12 01:40:26 +08:00
fufesou
8da629c57d revert(cursor): return to f5b98b32 before splitting plugin changes 2026-09-12 00:32:58 +08:00
fufesou
650a6e21cc fix(web): preserve full precision in cursor identifiers 2026-09-12 00:20:47 +08:00
fufesou
5f4bb00007 fix(web): align cursor bitmap and hotspot rounding 2026-09-12 00:20:28 +08:00
fufesou
a7f1eb4c25 fix(cursor): address sizing and capture review findings 2026-09-12 00:19:10 +08:00
fufesou
be5fb304d4 fix(flutter): align painted cursor with the software image origin 2026-09-11 17:54:56 +08:00
fufesou
fdd67a875b test(flutter): cover local cursor sizing and mode switches 2026-09-11 16:02:52 +08:00
fufesou
39940b717a fix(flutter): size unzoomed remote cursors to the local system 2026-09-11 16:02:52 +08:00
fufesou
67b94c7906 feat(windows): measure the native system cursor size 2026-09-11 16:02:52 +08:00
fufesou
eeff9eb121 feat(linux): measure the active system cursor size 2026-09-11 16:02:52 +08:00
fufesou
c983d00437 feat(macos): expose the local system cursor size 2026-09-11 16:02:52 +08:00
fufesou
7bb3fe6b5a fix(flutter): preserve cursor minimum sizes and native hotspots 2026-09-11 13:51:24 +08:00
fufesou
d202a2fba4 fix(flutter): scale the remote cursor with its image 2026-09-11 13:51:24 +08:00
fufesou
72ea38ca4f fix(cursor): preserve native pixels and hotspots across display scales
Capture actual Mutter and DXGI cursor metadata, preserve Retina artwork, and invalidate cursor identities when physical pixels or DPI change. Keep straight-alpha colors during native cursor resizing and correct the Windows XOR outline offset.

Verified all six Mac/Linux/Windows directions with real pointer movement, arrow/I-beam/crosshair transitions, adaptive zoom off/on/off, Original view, and live DPI changes. Requested debug builds and focused native/Flutter regressions pass.
2026-09-11 11:49:04 +08:00
fufesou
f96d00d9d1 fix(flutter): correct cursor scaling and Linux cursor clipping
Keep Linux/macOS bitmap sizing and painted cursor DPI
conversion consistent, and derive hotspots from the actual scaled bitmap.

Pad tall Linux native cursor buffers with transparency to
preserve the lower half in the hardware cursor plane.
Cover bitmap sizing, hotspots, artwork preservation,
and painting with focused regression tests.
2026-09-10 21:56:25 +08:00
rustdesk
f5b98b32f2 fix(flutter): read the live DPR and clamp the painted cursor like the native one
CanvasModel caches devicePixelRatio and only refreshes it when the view
style changes, so after the window moves to a monitor with a different
DPR the unzoomed cursor kept the previous monitor's scale. Read it from
MediaQuery instead, which also rebuilds the cursor when it changes.

The native path clamps the scaled bitmap to kMinCursorSize; apply the
same clamp to the painted cursor so a small cursor does not change size
when the peer moves the mouse.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K8HSHTEHo27mDcJXVyVfSP
2026-09-10 14:25:51 +08:00
rustdesk
8aee2a442e fix(flutter): keep the painted cursor hotspot in place when zoom cursor is off
`CursorPaint` subtracted the hotspot in remote pixels and then scaled it
by the canvas scale, but drew the image at scale 1.0, so the hotspot
landed hotx * (1 - scale) logical pixels away from the remote cursor
position. Cursors with a centered hotspot (I-beam, crosshair) were off
by up to half their size in Adaptive view. Subtract the hotspot after
scaling the position instead.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K8HSHTEHo27mDcJXVyVfSP
2026-09-10 14:09:39 +08:00