45 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.6 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);
 | |
| resetSystemCursor() {}
 | |
| 
 | |
| 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);
 | |
|   }
 | |
| }
 |