Merge pull request #2715 from fufesou/fix/mouse_events
fix https://github.com/rustdesk/rustdesk/issues/2713
This commit is contained in:
commit
7b59fade08
@ -17,6 +17,10 @@ import './state_model.dart';
|
|||||||
/// Mouse button enum.
|
/// Mouse button enum.
|
||||||
enum MouseButtons { left, right, wheel }
|
enum MouseButtons { left, right, wheel }
|
||||||
|
|
||||||
|
const _kMouseEventDown = 'mousedown';
|
||||||
|
const _kMouseEventUp = 'mouseup';
|
||||||
|
const _kMouseEventMove = 'mousemove';
|
||||||
|
|
||||||
extension ToString on MouseButtons {
|
extension ToString on MouseButtons {
|
||||||
String get value {
|
String get value {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
@ -183,20 +187,42 @@ class InputModel {
|
|||||||
|
|
||||||
Map<String, dynamic> getEvent(PointerEvent evt, String type) {
|
Map<String, dynamic> getEvent(PointerEvent evt, String type) {
|
||||||
final Map<String, dynamic> out = {};
|
final Map<String, dynamic> out = {};
|
||||||
out['type'] = type;
|
|
||||||
out['x'] = evt.position.dx;
|
out['x'] = evt.position.dx;
|
||||||
out['y'] = evt.position.dy;
|
out['y'] = evt.position.dy;
|
||||||
if (alt) out['alt'] = 'true';
|
if (alt) out['alt'] = 'true';
|
||||||
if (shift) out['shift'] = 'true';
|
if (shift) out['shift'] = 'true';
|
||||||
if (ctrl) out['ctrl'] = 'true';
|
if (ctrl) out['ctrl'] = 'true';
|
||||||
if (command) out['command'] = 'true';
|
if (command) out['command'] = 'true';
|
||||||
out['buttons'] = evt
|
|
||||||
.buttons; // left button: 1, right button: 2, middle button: 4, 1 | 2 = 3 (left + right)
|
// Check update event type and set buttons to be sent.
|
||||||
if (evt.buttons != 0) {
|
int buttons = _lastMouseDownButtons;
|
||||||
_lastMouseDownButtons = evt.buttons;
|
if (type == _kMouseEventMove) {
|
||||||
|
// flutter may emit move event if one button is pressed and anoter button
|
||||||
|
// is pressing or releasing.
|
||||||
|
if (evt.buttons != _lastMouseDownButtons) {
|
||||||
|
// For simplicity
|
||||||
|
// Just consider 3 - 1 ((Left + Right buttons) - Left button)
|
||||||
|
// Do not consider 2 - 1 (Right button - Left button)
|
||||||
|
// or 6 - 5 ((Right + Mid buttons) - (Left + Mid buttons))
|
||||||
|
// and so on
|
||||||
|
buttons = evt.buttons - _lastMouseDownButtons;
|
||||||
|
if (buttons > 0) {
|
||||||
|
type = _kMouseEventDown;
|
||||||
|
} else {
|
||||||
|
type = _kMouseEventUp;
|
||||||
|
buttons = -buttons;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
out['buttons'] = _lastMouseDownButtons;
|
if (evt.buttons != 0) {
|
||||||
|
buttons = evt.buttons;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
_lastMouseDownButtons = evt.buttons;
|
||||||
|
|
||||||
|
out['buttons'] = buttons;
|
||||||
|
out['type'] = type;
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +286,7 @@ class InputModel {
|
|||||||
isPhysicalMouse.value = true;
|
isPhysicalMouse.value = true;
|
||||||
}
|
}
|
||||||
if (isPhysicalMouse.value) {
|
if (isPhysicalMouse.value) {
|
||||||
handleMouse(getEvent(e, 'mousemove'));
|
handleMouse(getEvent(e, _kMouseEventMove));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,21 +351,21 @@ class InputModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isPhysicalMouse.value) {
|
if (isPhysicalMouse.value) {
|
||||||
handleMouse(getEvent(e, 'mousedown'));
|
handleMouse(getEvent(e, _kMouseEventDown));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onPointUpImage(PointerUpEvent e) {
|
void onPointUpImage(PointerUpEvent e) {
|
||||||
if (e.kind != ui.PointerDeviceKind.mouse) return;
|
if (e.kind != ui.PointerDeviceKind.mouse) return;
|
||||||
if (isPhysicalMouse.value) {
|
if (isPhysicalMouse.value) {
|
||||||
handleMouse(getEvent(e, 'mouseup'));
|
handleMouse(getEvent(e, _kMouseEventUp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void onPointMoveImage(PointerMoveEvent e) {
|
void onPointMoveImage(PointerMoveEvent e) {
|
||||||
if (e.kind != ui.PointerDeviceKind.mouse) return;
|
if (e.kind != ui.PointerDeviceKind.mouse) return;
|
||||||
if (isPhysicalMouse.value) {
|
if (isPhysicalMouse.value) {
|
||||||
handleMouse(getEvent(e, 'mousemove'));
|
handleMouse(getEvent(e, _kMouseEventMove));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,13 +414,13 @@ class InputModel {
|
|||||||
var type = '';
|
var type = '';
|
||||||
var isMove = false;
|
var isMove = false;
|
||||||
switch (evt['type']) {
|
switch (evt['type']) {
|
||||||
case 'mousedown':
|
case _kMouseEventDown:
|
||||||
type = 'down';
|
type = 'down';
|
||||||
break;
|
break;
|
||||||
case 'mouseup':
|
case _kMouseEventUp:
|
||||||
type = 'up';
|
type = 'up';
|
||||||
break;
|
break;
|
||||||
case 'mousemove':
|
case _kMouseEventMove:
|
||||||
isMove = true;
|
isMove = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user