From c983d00437f6c8c0cab0136ffb5b8a7087c2611e Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 11 Sep 2026 16:02:52 +0800 Subject: [PATCH] feat(macos): expose the local system cursor size --- flutter/macos/Runner/MainFlutterWindow.swift | 39 ++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/flutter/macos/Runner/MainFlutterWindow.swift b/flutter/macos/Runner/MainFlutterWindow.swift index 336d94f1d..8e379e8a6 100644 --- a/flutter/macos/Runner/MainFlutterWindow.swift +++ b/flutter/macos/Runner/MainFlutterWindow.swift @@ -198,7 +198,46 @@ class MainFlutterWindow: NSWindow { } } + private func registerCursorSizeChannel(registrar: FlutterPluginRegistrar) { + let channel = FlutterMethodChannel(name: "org.rustdesk.rustdesk/cursor", binaryMessenger: registrar.messenger) + channel.setMethodCallHandler { call, result in + guard call.method == "getSystemCursorSize" else { + result(FlutterMethodNotImplemented) + return + } + guard let size = self.systemCursorSize() else { + result(FlutterError(code: "cursor_size", message: "Could not measure the local system cursor", details: nil)) + return + } + result(size) + } + } + + private func systemCursorSize() -> Double? { + let image = NSCursor.arrow.image + guard let data = image.tiffRepresentation, + let bitmap = NSBitmapImageRep(data: data), + bitmap.pixelsWide > 0, bitmap.pixelsHigh > 0 else { return nil } + var left = bitmap.pixelsWide, top = bitmap.pixelsHigh + var right = -1, bottom = -1 + for y in 0..= left else { return nil } + let width = Double(right - left + 1) * image.size.width / Double(bitmap.pixelsWide) + let height = Double(bottom - top + 1) * image.size.height / Double(bitmap.pixelsHigh) + return max(width, height) + } + public func setMethodHandler(registrar: FlutterPluginRegistrar) { + registerCursorSizeChannel(registrar: registrar) let channel = FlutterMethodChannel(name: "org.rustdesk.rustdesk/host", binaryMessenger: registrar.messenger) channel.setMethodCallHandler({ (call, result) -> Void in