mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-16 12:39:06 +08:00
44 lines
1.5 KiB
Dart
44 lines
1.5 KiB
Dart
|
import 'package:flutter_custom_cursor/cursor_manager.dart'
|
||
|
as custom_cursor_manager;
|
||
|
import 'package:flutter_custom_cursor/flutter_custom_cursor.dart';
|
||
|
|
||
|
import 'package:flutter/foundation.dart';
|
||
|
import 'package:flutter/services.dart';
|
||
|
|
||
|
import 'package:flutter_hbb/models/model.dart';
|
||
|
|
||
|
deleteCustomCursor(String key) =>
|
||
|
custom_cursor_manager.CursorManager.instance.deleteCursor(key);
|
||
|
|
||
|
MouseCursor buildCursorOfCache(
|
||
|
CursorModel cursor, double scale, CursorData? cache) {
|
||
|
if (cache == null) {
|
||
|
return MouseCursor.defer;
|
||
|
} else {
|
||
|
final key = cache.updateGetKey(scale);
|
||
|
if (!cursor.cachedKeys.contains(key)) {
|
||
|
// data should be checked here, because it may be changed after `updateGetKey()`
|
||
|
final data = cache.data;
|
||
|
if (data == null) {
|
||
|
return MouseCursor.defer;
|
||
|
}
|
||
|
debugPrint(
|
||
|
"Register custom cursor with key $key (${cache.hotx},${cache.hoty})");
|
||
|
// [Safety]
|
||
|
// It's ok to call async registerCursor in current synchronous context,
|
||
|
// because activating the cursor is also an async call and will always
|
||
|
// be executed after this.
|
||
|
custom_cursor_manager.CursorManager.instance
|
||
|
.registerCursor(custom_cursor_manager.CursorData()
|
||
|
..name = key
|
||
|
..buffer = data
|
||
|
..width = (cache.width * cache.scale).toInt()
|
||
|
..height = (cache.height * cache.scale).toInt()
|
||
|
..hotX = cache.hotx
|
||
|
..hotY = cache.hoty);
|
||
|
cursor.addKey(key);
|
||
|
}
|
||
|
return FlutterCustomMemoryImageCursor(key: key);
|
||
|
}
|
||
|
}
|