initialize send mouse and max/min scale
This commit is contained in:
		
							parent
							
								
									982df980bd
								
							
						
					
					
						commit
						b776f1339a
					
				@ -1,6 +1,7 @@
 | 
				
			|||||||
import 'package:ffi/ffi.dart';
 | 
					import 'package:ffi/ffi.dart';
 | 
				
			||||||
import 'package:path_provider/path_provider.dart';
 | 
					import 'package:path_provider/path_provider.dart';
 | 
				
			||||||
import 'dart:io';
 | 
					import 'dart:io';
 | 
				
			||||||
 | 
					import 'dart:math';
 | 
				
			||||||
import 'dart:ffi';
 | 
					import 'dart:ffi';
 | 
				
			||||||
import 'dart:convert';
 | 
					import 'dart:convert';
 | 
				
			||||||
import 'dart:typed_data';
 | 
					import 'dart:typed_data';
 | 
				
			||||||
@ -89,6 +90,10 @@ class FfiModel with ChangeNotifier {
 | 
				
			|||||||
      if (rgba != null) {
 | 
					      if (rgba != null) {
 | 
				
			||||||
        if (_waitForImage) {
 | 
					        if (_waitForImage) {
 | 
				
			||||||
          _waitForImage = false;
 | 
					          _waitForImage = false;
 | 
				
			||||||
 | 
					          final size = MediaQueryData.fromWindow(ui.window).size;
 | 
				
			||||||
 | 
					          final xscale = size.width / _display.width.toDouble();
 | 
				
			||||||
 | 
					          final yscale = size.height / _display.height.toDouble();
 | 
				
			||||||
 | 
					          FFI.canvasModel.scale = max(xscale, yscale);
 | 
				
			||||||
          dismissLoading();
 | 
					          dismissLoading();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        _decoding = true;
 | 
					        _decoding = true;
 | 
				
			||||||
@ -153,6 +158,22 @@ class ImageModel with ChangeNotifier {
 | 
				
			|||||||
    _image = image;
 | 
					    _image = image;
 | 
				
			||||||
    if (image != null) notifyListeners();
 | 
					    if (image != null) notifyListeners();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  double get maxScale {
 | 
				
			||||||
 | 
					    if (_image == null) return 1.0;
 | 
				
			||||||
 | 
					    final size = MediaQueryData.fromWindow(ui.window).size;
 | 
				
			||||||
 | 
					    final xscale = size.width / _image.width;
 | 
				
			||||||
 | 
					    final yscale = size.height / _image.height;
 | 
				
			||||||
 | 
					    return max(1.0, max(xscale, yscale));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  double get minScale {
 | 
				
			||||||
 | 
					    if (_image == null) return 1.0;
 | 
				
			||||||
 | 
					    final size = MediaQueryData.fromWindow(ui.window).size;
 | 
				
			||||||
 | 
					    final xscale = size.width / _image.width;
 | 
				
			||||||
 | 
					    final yscale = size.height / _image.height;
 | 
				
			||||||
 | 
					    return min(xscale, yscale);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CanvasModel with ChangeNotifier {
 | 
					class CanvasModel with ChangeNotifier {
 | 
				
			||||||
@ -170,6 +191,11 @@ class CanvasModel with ChangeNotifier {
 | 
				
			|||||||
  double get y => _y;
 | 
					  double get y => _y;
 | 
				
			||||||
  double get scale => _scale;
 | 
					  double get scale => _scale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set scale(v) {
 | 
				
			||||||
 | 
					    _scale = v;
 | 
				
			||||||
 | 
					    notifyListeners();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void startPan() {
 | 
					  void startPan() {
 | 
				
			||||||
    _xPan = 0;
 | 
					    _xPan = 0;
 | 
				
			||||||
    _yPan = 0;
 | 
					    _yPan = 0;
 | 
				
			||||||
@ -200,7 +226,10 @@ class CanvasModel with ChangeNotifier {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  void updateScale(double v) {
 | 
					  void updateScale(double v) {
 | 
				
			||||||
    _scale *= v;
 | 
					    _scale *= v;
 | 
				
			||||||
    if (_scale > 1) _scale = 1;
 | 
					    final maxs = FFI.imageModel.maxScale;
 | 
				
			||||||
 | 
					    final mins = FFI.imageModel.minScale;
 | 
				
			||||||
 | 
					    if (_scale > maxs) _scale = maxs;
 | 
				
			||||||
 | 
					    if (_scale < mins) _scale = mins;
 | 
				
			||||||
    notifyListeners();
 | 
					    notifyListeners();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -302,6 +331,16 @@ class FFI {
 | 
				
			|||||||
    return getByName('remote_id');
 | 
					    return getByName('remote_id');
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void tap() {
 | 
				
			||||||
 | 
					    FFI.sendMouse('down', 'left');
 | 
				
			||||||
 | 
					    FFI.sendMouse('up', 'left');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void sendMouse(String type, String buttons) {
 | 
				
			||||||
 | 
					    FFI.setByName(
 | 
				
			||||||
 | 
					        'send_mouse', json.encode({'type': type, 'buttons': buttons}));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static List<Peer> peers() {
 | 
					  static List<Peer> peers() {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      List<dynamic> peers = json.decode(getByName('peers'));
 | 
					      List<dynamic> peers = json.decode(getByName('peers'));
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,8 @@ class _RemotePageState extends State<RemotePage> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    print('${MediaQueryData.fromWindow(ui.window).size}');
 | 
					    final size = MediaQueryData.fromWindow(ui.window).size;
 | 
				
			||||||
 | 
					    print('$size');
 | 
				
			||||||
    print('${MediaQuery.of(context).size}');
 | 
					    print('${MediaQuery.of(context).size}');
 | 
				
			||||||
    EasyLoading.instance.loadingStyle = EasyLoadingStyle.light;
 | 
					    EasyLoading.instance.loadingStyle = EasyLoadingStyle.light;
 | 
				
			||||||
    return WillPopScope(
 | 
					    return WillPopScope(
 | 
				
			||||||
@ -170,7 +171,7 @@ class _RemotePageState extends State<RemotePage> {
 | 
				
			|||||||
                }();
 | 
					                }();
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                print('tap');
 | 
					                FFI.tap();
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              onScaleStart: (details) {
 | 
					              onScaleStart: (details) {
 | 
				
			||||||
                _scale = 1;
 | 
					                _scale = 1;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user