remember cursor, canvas offset and scale
This commit is contained in:
		
							parent
							
								
									1acb64c35d
								
							
						
					
					
						commit
						5e17a995e6
					
				| @ -2,6 +2,7 @@ import 'package:ffi/ffi.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| import 'package:flutter/gestures.dart'; | ||||
| import 'package:path_provider/path_provider.dart'; | ||||
| import 'package:shared_preferences/shared_preferences.dart'; | ||||
| import 'package:device_info/device_info.dart'; | ||||
| import 'dart:io'; | ||||
| import 'dart:math'; | ||||
| @ -38,6 +39,7 @@ class FfiModel with ChangeNotifier { | ||||
| 
 | ||||
|   get permissions => _permissions; | ||||
|   get initialized => _initialized; | ||||
|   get display => _display; | ||||
|   get secure => _secure; | ||||
|   get direct => _direct; | ||||
|   get pi => _pi; | ||||
| @ -187,7 +189,7 @@ class FfiModel with ChangeNotifier { | ||||
|     } | ||||
|     if (_pi.currentDisplay < _pi.displays.length) { | ||||
|       _display = _pi.displays[_pi.currentDisplay]; | ||||
|       FFI.cursorModel.updateDisplayOrigin(_display.x, _display.y); | ||||
|       initializeCursorAndCanvas(); | ||||
|     } | ||||
|     if (displays.length > 0) { | ||||
|       showLoading('Waiting for image...', context); | ||||
| @ -243,6 +245,13 @@ class CanvasModel with ChangeNotifier { | ||||
|   double get y => _y; | ||||
|   double get scale => _scale; | ||||
| 
 | ||||
|   void update(double x, double y, double scale) { | ||||
|     _x = x; | ||||
|     _y = y; | ||||
|     _scale = scale; | ||||
|     notifyListeners(); | ||||
|   } | ||||
| 
 | ||||
|   set scale(v) { | ||||
|     _scale = v; | ||||
|     notifyListeners(); | ||||
| @ -443,6 +452,16 @@ class CursorModel with ChangeNotifier { | ||||
|     notifyListeners(); | ||||
|   } | ||||
| 
 | ||||
|   void updateDisplayOriginWithCursor( | ||||
|       double x, double y, double xCursor, double yCursor) { | ||||
|     _displayOriginX = x; | ||||
|     _displayOriginY = y; | ||||
|     _x = xCursor; | ||||
|     _y = yCursor; | ||||
|     FFI.moveMouse(x, y); | ||||
|     notifyListeners(); | ||||
|   } | ||||
| 
 | ||||
|   void clear() { | ||||
|     _x = -10000; | ||||
|     _x = -10000; | ||||
| @ -573,6 +592,8 @@ class FFI { | ||||
|   } | ||||
| 
 | ||||
|   static void close() { | ||||
|     savePreference(id, cursorModel.x, cursorModel.y, canvasModel.x, | ||||
|         canvasModel.y, canvasModel.scale, ffiModel.pi.currentDisplay); | ||||
|     id = ""; | ||||
|     setByName('close', ''); | ||||
|     imageModel.update(null); | ||||
| @ -647,3 +668,45 @@ class PeerInfo { | ||||
|   int currentDisplay; | ||||
|   List<Display> displays; | ||||
| } | ||||
| 
 | ||||
| void savePreference(String id, double xCursor, double yCursor, double xCanvas, | ||||
|     double yCanvas, double scale, int currentDisplay) async { | ||||
|   SharedPreferences prefs = await SharedPreferences.getInstance(); | ||||
|   final p = Map<String, dynamic>(); | ||||
|   p['xCursor'] = xCursor; | ||||
|   p['yCursor'] = yCursor; | ||||
|   p['xCanvas'] = xCanvas; | ||||
|   p['yCanvas'] = yCanvas; | ||||
|   p['scale'] = scale; | ||||
|   p['currentDisplay'] = currentDisplay; | ||||
|   prefs.setString('peer' + id, json.encode(p)); | ||||
| } | ||||
| 
 | ||||
| Future<Map<String, dynamic>> getPreference(String id) async { | ||||
|   SharedPreferences prefs = await SharedPreferences.getInstance(); | ||||
|   var p = prefs.getString('peer' + id); | ||||
|   if (p == null) return null; | ||||
|   Map<String, dynamic> m = json.decode(p); | ||||
|   return m; | ||||
| } | ||||
| 
 | ||||
| void initializeCursorAndCanvas() async { | ||||
|   var p = await getPreference(FFI.id); | ||||
|   int currentDisplay = 0; | ||||
|   if (p != null) { | ||||
|     currentDisplay = p['currentDisplay']; | ||||
|   } | ||||
|   if (p == null || currentDisplay != FFI.ffiModel.pi.currentDisplay) { | ||||
|     FFI.cursorModel | ||||
|         .updateDisplayOrigin(FFI.ffiModel.display.x, FFI.ffiModel.display.y); | ||||
|     return; | ||||
|   } | ||||
|   double xCursor = p['xCursor']; | ||||
|   double yCursor = p['yCursor']; | ||||
|   double xCanvas = p['xCanvas']; | ||||
|   double yCanvas = p['yCanvas']; | ||||
|   double scale = p['scale']; | ||||
|   FFI.cursorModel.updateDisplayOriginWithCursor( | ||||
|       FFI.ffiModel.display.x, FFI.ffiModel.display.y, xCursor, yCursor); | ||||
|   FFI.canvasModel.update(xCanvas, yCanvas, scale); | ||||
| } | ||||
|  | ||||
| @ -21,42 +21,42 @@ packages: | ||||
|       name: async | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.5.0-nullsafety.1" | ||||
|     version: "2.5.0-nullsafety.3" | ||||
|   boolean_selector: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: boolean_selector | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.1.0-nullsafety.1" | ||||
|     version: "2.1.0-nullsafety.3" | ||||
|   characters: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: characters | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.1.0-nullsafety.3" | ||||
|     version: "1.1.0-nullsafety.5" | ||||
|   charcode: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: charcode | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.2.0-nullsafety.1" | ||||
|     version: "1.2.0-nullsafety.3" | ||||
|   clock: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: clock | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.1.0-nullsafety.1" | ||||
|     version: "1.1.0-nullsafety.3" | ||||
|   collection: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: collection | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.15.0-nullsafety.3" | ||||
|     version: "1.15.0-nullsafety.5" | ||||
|   convert: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -84,7 +84,7 @@ packages: | ||||
|       name: cupertino_icons | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.0.0" | ||||
|     version: "1.0.2" | ||||
|   device_info: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -105,7 +105,7 @@ packages: | ||||
|       name: fake_async | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.2.0-nullsafety.1" | ||||
|     version: "1.2.0-nullsafety.3" | ||||
|   ffi: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -126,14 +126,14 @@ packages: | ||||
|       name: firebase | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "7.3.2" | ||||
|     version: "7.3.3" | ||||
|   firebase_analytics: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: firebase_analytics | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "6.2.0" | ||||
|     version: "6.3.0" | ||||
|   firebase_analytics_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -154,7 +154,7 @@ packages: | ||||
|       name: firebase_core | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.5.2+1" | ||||
|     version: "0.5.3" | ||||
|   firebase_core_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -255,21 +255,21 @@ packages: | ||||
|       name: js | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.6.2" | ||||
|     version: "0.6.3-nullsafety.3" | ||||
|   matcher: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: matcher | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.12.10-nullsafety.1" | ||||
|     version: "0.12.10-nullsafety.3" | ||||
|   meta: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: meta | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.3.0-nullsafety.3" | ||||
|     version: "1.3.0-nullsafety.6" | ||||
|   nested: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -290,7 +290,7 @@ packages: | ||||
|       name: path | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.8.0-nullsafety.1" | ||||
|     version: "1.8.0-nullsafety.3" | ||||
|   path_provider: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -367,7 +367,7 @@ packages: | ||||
|       name: provider | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "4.3.2+2" | ||||
|     version: "4.3.2+3" | ||||
|   quiver: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @ -375,6 +375,48 @@ packages: | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.1.5" | ||||
|   shared_preferences: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: shared_preferences | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.5.12+4" | ||||
|   shared_preferences_linux: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_linux | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.0.2+4" | ||||
|   shared_preferences_macos: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_macos | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.0.1+11" | ||||
|   shared_preferences_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_platform_interface | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.0.4" | ||||
|   shared_preferences_web: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_web | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.1.2+7" | ||||
|   shared_preferences_windows: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: shared_preferences_windows | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.0.1+3" | ||||
|   sky_engine: | ||||
|     dependency: transitive | ||||
|     description: flutter | ||||
| @ -386,42 +428,42 @@ packages: | ||||
|       name: source_span | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.8.0-nullsafety.2" | ||||
|     version: "1.8.0-nullsafety.4" | ||||
|   stack_trace: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: stack_trace | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.10.0-nullsafety.1" | ||||
|     version: "1.10.0-nullsafety.6" | ||||
|   stream_channel: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: stream_channel | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.1.0-nullsafety.1" | ||||
|     version: "2.1.0-nullsafety.3" | ||||
|   string_scanner: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: string_scanner | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.1.0-nullsafety.1" | ||||
|     version: "1.1.0-nullsafety.3" | ||||
|   term_glyph: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: term_glyph | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.2.0-nullsafety.1" | ||||
|     version: "1.2.0-nullsafety.3" | ||||
|   test_api: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: test_api | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "0.2.19-nullsafety.2" | ||||
|     version: "0.2.19-nullsafety.6" | ||||
|   tuple: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -435,7 +477,7 @@ packages: | ||||
|       name: typed_data | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "1.3.0-nullsafety.3" | ||||
|     version: "1.3.0-nullsafety.5" | ||||
|   url_launcher: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -484,7 +526,7 @@ packages: | ||||
|       name: vector_math | ||||
|       url: "https://pub.dartlang.org" | ||||
|     source: hosted | ||||
|     version: "2.1.0-nullsafety.3" | ||||
|     version: "2.1.0-nullsafety.5" | ||||
|   wakelock: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @ -535,5 +577,5 @@ packages: | ||||
|     source: hosted | ||||
|     version: "2.2.1" | ||||
| sdks: | ||||
|   dart: ">=2.10.0-110 <2.11.0" | ||||
|   dart: ">=2.12.0-0.0 <3.0.0" | ||||
|   flutter: ">=1.22.0 <2.0.0" | ||||
|  | ||||
| @ -41,6 +41,7 @@ dependencies: | ||||
|   firebase_analytics: ^6.2.0 | ||||
|   package_info: ^0.4.3+2 | ||||
|   url_launcher: ^5.7.10 | ||||
|   shared_preferences: ^0.5.12+4 | ||||
| 
 | ||||
| dev_dependencies: | ||||
|   flutter_launcher_icons: "^0.8.0" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user