From 8984d16c75d661235aa8b568b7c95e2e2cb7ba7d Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 8 Nov 2022 12:01:51 +0800 Subject: [PATCH] desktop get mouse control by big distance Signed-off-by: fufesou --- flutter/lib/models/input_model.dart | 19 +++++++++++++++++-- flutter/lib/models/model.dart | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/flutter/lib/models/input_model.dart b/flutter/lib/models/input_model.dart index 280c72e79..ed7e5309a 100644 --- a/flutter/lib/models/input_model.dart +++ b/flutter/lib/models/input_model.dart @@ -42,6 +42,7 @@ class InputModel { // mouse final isPhysicalMouse = false.obs; int _lastMouseDownButtons = 0; + Offset last_mouse_pos = Offset.zero; get id => parent.target?.id ?? ""; @@ -303,6 +304,22 @@ class InputModel { } void handleMouse(Map evt) { + double x = evt['x']; + double y = max(0.0, evt['y']); + final cursorModel = parent.target!.cursorModel; + + if (!cursorModel.got_mouse_control) { + bool self_get_control = (x - last_mouse_pos.dx).abs() > 12 || + (y - last_mouse_pos.dy).abs() > 12; + if (self_get_control) { + cursorModel.got_mouse_control = true; + } else { + last_mouse_pos = ui.Offset(x, y); + return; + } + } + last_mouse_pos = ui.Offset(x, y); + var type = ''; var isMove = false; switch (evt['type']) { @@ -319,8 +336,6 @@ class InputModel { return; } evt['type'] = type; - double x = evt['x']; - double y = max(0.0, evt['y']); if (isDesktop) { y = y - stateGlobal.tabBarHeight; } diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index d8fdca2bc..41b3d056e 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -740,6 +740,7 @@ class CursorModel with ChangeNotifier { double _hoty = 0; double _displayOriginX = 0; double _displayOriginY = 0; + bool got_mouse_control = true; String id = ''; WeakReference parent; @@ -748,13 +749,11 @@ class CursorModel with ChangeNotifier { CursorData? get defaultCache => _getDefaultCache(); double get x => _x - _displayOriginX; - double get y => _y - _displayOriginY; Offset get offset => Offset(_x, _y); double get hotx => _hotx; - double get hoty => _hoty; CursorModel(this.parent); @@ -981,6 +980,7 @@ class CursorModel with ChangeNotifier { /// Update the cursor position. updateCursorPosition(Map evt, String id) async { + got_mouse_control = false; _x = double.parse(evt['x']); _y = double.parse(evt['y']); try {