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