Merge pull request #507 from Heap-Hop/csf
mobile three fingers vertical drag -> mouse scroll
This commit is contained in:
commit
614be61ca1
flutter
src/lang
Binary file not shown.
@ -691,11 +691,9 @@ class FFI {
|
|||||||
sendMouse('up', button);
|
sendMouse('up', button);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void scroll(double y) {
|
static void scroll(int y) {
|
||||||
var y2 = y.round();
|
|
||||||
if (y2 == 0) return;
|
|
||||||
setByName('send_mouse',
|
setByName('send_mouse',
|
||||||
json.encode(modify({'type': 'wheel', 'y': y2.toString()})));
|
json.encode(modify({'type': 'wheel', 'y': y.toString()})));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reconnect() {
|
static void reconnect() {
|
||||||
|
@ -32,6 +32,7 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
double _bottom = 0;
|
double _bottom = 0;
|
||||||
String _value = '';
|
String _value = '';
|
||||||
double _scale = 1;
|
double _scale = 1;
|
||||||
|
double _mouseScrollIntegral = 0; // mouse scroll speed controller
|
||||||
|
|
||||||
var _more = true;
|
var _more = true;
|
||||||
var _fn = false;
|
var _fn = false;
|
||||||
@ -541,10 +542,17 @@ class _RemotePageState extends State<RemotePage> {
|
|||||||
_scale = 1;
|
_scale = 1;
|
||||||
FFI.setByName('peer_option', '{"name": "view-style", "value": ""}');
|
FFI.setByName('peer_option', '{"name": "view-style", "value": ""}');
|
||||||
},
|
},
|
||||||
onTwoFingerVerticalDragUpdate: FFI.ffiModel.isPeerAndroid
|
onThreeFingerVerticalDragUpdate: FFI.ffiModel.isPeerAndroid
|
||||||
? null
|
? null
|
||||||
: (d) {
|
: (d) {
|
||||||
FFI.scroll(d.delta.dy / 2);
|
_mouseScrollIntegral += d.delta.dy / 4;
|
||||||
|
if (_mouseScrollIntegral > 1) {
|
||||||
|
FFI.scroll(1);
|
||||||
|
_mouseScrollIntegral = 0;
|
||||||
|
} else if (_mouseScrollIntegral < -1) {
|
||||||
|
FFI.scroll(-1);
|
||||||
|
_mouseScrollIntegral = 0;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,8 @@ class GestureIcons {
|
|||||||
IconData(0xe68f, fontFamily: _family);
|
IconData(0xe68f, fontFamily: _family);
|
||||||
static const IconData icon_gesture_f_double_tap =
|
static const IconData icon_gesture_f_double_tap =
|
||||||
IconData(0xe691, fontFamily: _family);
|
IconData(0xe691, fontFamily: _family);
|
||||||
|
static const IconData icon_gesture_f_three_fingers =
|
||||||
|
IconData(0xe687, fontFamily: _family);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef OnTouchModeChange = void Function(bool);
|
typedef OnTouchModeChange = void Function(bool);
|
||||||
@ -118,8 +120,8 @@ class _GestureHelpState extends State<GestureHelp> {
|
|||||||
translate("Mouse Drag")),
|
translate("Mouse Drag")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
GestureIcons.icon_gesture_f_drag_up_down_,
|
GestureIcons.icon_gesture_f_three_fingers,
|
||||||
translate("Two-Finger vertically"),
|
translate("Three-Finger vertically"),
|
||||||
translate("Mouse Wheel")),
|
translate("Mouse Wheel")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
@ -140,8 +142,8 @@ class _GestureHelpState extends State<GestureHelp> {
|
|||||||
translate("Left Mouse")),
|
translate("Left Mouse")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
GestureIcons.icon_gesture_f_tap_,
|
GestureIcons.icon_gesture_press_hold,
|
||||||
translate("Two-Finger Tap"),
|
translate("One-Long Tap"),
|
||||||
translate("Right Mouse")),
|
translate("Right Mouse")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
@ -150,8 +152,8 @@ class _GestureHelpState extends State<GestureHelp> {
|
|||||||
translate("Mouse Drag")),
|
translate("Mouse Drag")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
GestureIcons.icon_gesture_f_drag_up_down_,
|
GestureIcons.icon_gesture_f_three_fingers,
|
||||||
translate("Two-Finger vertically"),
|
translate("Three-Finger vertically"),
|
||||||
translate("Mouse Wheel")),
|
translate("Mouse Wheel")),
|
||||||
GestureInfo(
|
GestureInfo(
|
||||||
width,
|
width,
|
||||||
|
@ -6,13 +6,9 @@ enum CustomTouchGestureState {
|
|||||||
none,
|
none,
|
||||||
oneFingerPan,
|
oneFingerPan,
|
||||||
twoFingerScale,
|
twoFingerScale,
|
||||||
twoFingerVerticalDrag,
|
threeFingerVerticalDrag
|
||||||
twoFingerHorizontalDrag,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adjust Carefully! balance vertical and pan
|
|
||||||
const kScaleSlop = kPrecisePointerPanSlop / 28;
|
|
||||||
|
|
||||||
class CustomTouchGestureRecognizer extends ScaleGestureRecognizer {
|
class CustomTouchGestureRecognizer extends ScaleGestureRecognizer {
|
||||||
CustomTouchGestureRecognizer({
|
CustomTouchGestureRecognizer({
|
||||||
Object? debugOwner,
|
Object? debugOwner,
|
||||||
@ -34,39 +30,56 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer {
|
|||||||
GestureScaleUpdateCallback? onTwoFingerScaleUpdate;
|
GestureScaleUpdateCallback? onTwoFingerScaleUpdate;
|
||||||
GestureScaleEndCallback? onTwoFingerScaleEnd;
|
GestureScaleEndCallback? onTwoFingerScaleEnd;
|
||||||
|
|
||||||
// twoFingerVerticalDrag
|
// threeFingerVerticalDrag
|
||||||
GestureDragStartCallback? onTwoFingerVerticalDragStart;
|
GestureDragStartCallback? onThreeFingerVerticalDragStart;
|
||||||
GestureDragUpdateCallback? onTwoFingerVerticalDragUpdate;
|
GestureDragUpdateCallback? onThreeFingerVerticalDragUpdate;
|
||||||
GestureDragEndCallback? onTwoFingerVerticalDragEnd;
|
GestureDragEndCallback? onThreeFingerVerticalDragEnd;
|
||||||
|
|
||||||
// twoFingerHorizontalDrag
|
var _currentState = CustomTouchGestureState.none;
|
||||||
GestureDragStartCallback? onTwoFingerHorizontalDragStart;
|
Timer? _startEventDebounceTimer;
|
||||||
GestureDragUpdateCallback? onTwoFingerHorizontalDragUpdate;
|
|
||||||
GestureDragEndCallback? onTwoFingerHorizontalDragEnd;
|
|
||||||
|
|
||||||
void _init() {
|
void _init() {
|
||||||
debugPrint("CustomTouchGestureRecognizer init");
|
debugPrint("CustomTouchGestureRecognizer init");
|
||||||
onStart = (d) {
|
onStart = (d) {
|
||||||
|
_startEventDebounceTimer?.cancel();
|
||||||
if (d.pointerCount == 1) {
|
if (d.pointerCount == 1) {
|
||||||
_currentState = CustomTouchGestureState.oneFingerPan;
|
_currentState = CustomTouchGestureState.oneFingerPan;
|
||||||
if (onOneFingerPanStart != null) {
|
if (onOneFingerPanStart != null) {
|
||||||
onOneFingerPanStart!(DragStartDetails(
|
onOneFingerPanStart!(DragStartDetails(
|
||||||
localPosition: d.localFocalPoint, globalPosition: d.focalPoint));
|
localPosition: d.localFocalPoint, globalPosition: d.focalPoint));
|
||||||
}
|
}
|
||||||
debugPrint("start pan");
|
debugPrint("start oneFingerPan");
|
||||||
} else if (d.pointerCount == 2) {
|
} else if (d.pointerCount == 2) {
|
||||||
_currentState = CustomTouchGestureState.none;
|
if (_currentState == CustomTouchGestureState.threeFingerVerticalDrag) {
|
||||||
startWatchTimer();
|
// 3 -> 2 debounce
|
||||||
} else {
|
_startEventDebounceTimer = Timer(Duration(milliseconds: 200), () {
|
||||||
_currentState = CustomTouchGestureState.none;
|
_currentState = CustomTouchGestureState.twoFingerScale;
|
||||||
_reset();
|
if (onTwoFingerScaleStart != null) {
|
||||||
|
onTwoFingerScaleStart!(ScaleStartDetails(
|
||||||
|
localFocalPoint: d.localFocalPoint,
|
||||||
|
focalPoint: d.focalPoint));
|
||||||
|
}
|
||||||
|
debugPrint("debounce start twoFingerScale success");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_currentState = CustomTouchGestureState.twoFingerScale;
|
||||||
|
// startWatchTimer();
|
||||||
|
if (onTwoFingerScaleStart != null) {
|
||||||
|
onTwoFingerScaleStart!(ScaleStartDetails(
|
||||||
|
localFocalPoint: d.localFocalPoint, focalPoint: d.focalPoint));
|
||||||
|
}
|
||||||
|
debugPrint("start twoFingerScale");
|
||||||
|
} else if (d.pointerCount == 3) {
|
||||||
|
_currentState = CustomTouchGestureState.threeFingerVerticalDrag;
|
||||||
|
if (onThreeFingerVerticalDragStart != null) {
|
||||||
|
onThreeFingerVerticalDragStart!(
|
||||||
|
DragStartDetails(globalPosition: d.localFocalPoint));
|
||||||
|
}
|
||||||
|
debugPrint("start threeFingerScale");
|
||||||
|
// _reset();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
onUpdate = (d) {
|
onUpdate = (d) {
|
||||||
if (_isWatch) {
|
|
||||||
_updateCompute(d);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (_currentState != CustomTouchGestureState.none) {
|
if (_currentState != CustomTouchGestureState.none) {
|
||||||
switch (_currentState) {
|
switch (_currentState) {
|
||||||
case CustomTouchGestureState.oneFingerPan:
|
case CustomTouchGestureState.oneFingerPan:
|
||||||
@ -79,14 +92,9 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer {
|
|||||||
onTwoFingerScaleUpdate!(d);
|
onTwoFingerScaleUpdate!(d);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CustomTouchGestureState.twoFingerHorizontalDrag:
|
case CustomTouchGestureState.threeFingerVerticalDrag:
|
||||||
if (onTwoFingerHorizontalDragUpdate != null) {
|
if (onThreeFingerVerticalDragUpdate != null) {
|
||||||
onTwoFingerHorizontalDragUpdate!(_getDragUpdateDetails(d));
|
onThreeFingerVerticalDragUpdate!(_getDragUpdateDetails(d));
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CustomTouchGestureState.twoFingerVerticalDrag:
|
|
||||||
if (onTwoFingerVerticalDragUpdate != null) {
|
|
||||||
onTwoFingerVerticalDragUpdate!(_getDragUpdateDetails(d));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -111,85 +119,19 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer {
|
|||||||
onTwoFingerScaleEnd!(d);
|
onTwoFingerScaleEnd!(d);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CustomTouchGestureState.twoFingerHorizontalDrag:
|
case CustomTouchGestureState.threeFingerVerticalDrag:
|
||||||
debugPrint("TwoFingerState.horizontal onEnd");
|
debugPrint("ThreeFingerState.vertical onEnd");
|
||||||
if (onTwoFingerHorizontalDragEnd != null) {
|
if (onThreeFingerVerticalDragEnd != null) {
|
||||||
onTwoFingerHorizontalDragEnd!(_getDragEndDetails(d));
|
onThreeFingerVerticalDragEnd!(_getDragEndDetails(d));
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CustomTouchGestureState.twoFingerVerticalDrag:
|
|
||||||
debugPrint("TwoFingerState.vertical onEnd");
|
|
||||||
if (onTwoFingerVerticalDragEnd != null) {
|
|
||||||
onTwoFingerVerticalDragEnd!(_getDragEndDetails(d));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_currentState = CustomTouchGestureState.none;
|
_currentState = CustomTouchGestureState.none;
|
||||||
_reset();
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var _currentState = CustomTouchGestureState.none;
|
|
||||||
var _isWatch = false;
|
|
||||||
|
|
||||||
Timer? _timer;
|
|
||||||
double _sumScale = 0;
|
|
||||||
double _sumVertical = 0;
|
|
||||||
double _sumHorizontal = 0;
|
|
||||||
|
|
||||||
void _clearSum() {
|
|
||||||
_sumScale = 0;
|
|
||||||
_sumVertical = 0;
|
|
||||||
_sumHorizontal = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _reset() {
|
|
||||||
_isWatch = false;
|
|
||||||
_clearSum();
|
|
||||||
if (_timer != null) _timer!.cancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _updateCompute(ScaleUpdateDetails d) {
|
|
||||||
_sumScale += d.scale - 1;
|
|
||||||
_sumHorizontal += d.focalPointDelta.dx;
|
|
||||||
_sumVertical += d.focalPointDelta.dy;
|
|
||||||
// start , order is important
|
|
||||||
if (onTwoFingerScaleUpdate != null && _sumScale.abs() > kScaleSlop) {
|
|
||||||
debugPrint("start Scale");
|
|
||||||
_currentState = CustomTouchGestureState.twoFingerScale;
|
|
||||||
if (onTwoFingerScaleStart != null) {
|
|
||||||
onTwoFingerScaleStart!(ScaleStartDetails(
|
|
||||||
localFocalPoint: d.localFocalPoint, focalPoint: d.focalPoint));
|
|
||||||
}
|
|
||||||
_reset();
|
|
||||||
} else if (onTwoFingerVerticalDragUpdate != null &&
|
|
||||||
_sumVertical.abs() > kPrecisePointerPanSlop &&
|
|
||||||
_sumHorizontal.abs() < kPrecisePointerPanSlop) {
|
|
||||||
debugPrint("start Vertical");
|
|
||||||
if (onTwoFingerVerticalDragStart != null) {
|
|
||||||
onTwoFingerVerticalDragStart!(_getDragStartDetails(d));
|
|
||||||
}
|
|
||||||
_currentState = CustomTouchGestureState.twoFingerVerticalDrag;
|
|
||||||
_reset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void startWatchTimer() {
|
|
||||||
debugPrint("startWatchTimer");
|
|
||||||
_isWatch = true;
|
|
||||||
_clearSum();
|
|
||||||
if (_timer != null) _timer!.cancel();
|
|
||||||
_timer = Timer(const Duration(milliseconds: 200), _reset);
|
|
||||||
}
|
|
||||||
|
|
||||||
DragStartDetails _getDragStartDetails(ScaleUpdateDetails d) =>
|
|
||||||
DragStartDetails(
|
|
||||||
globalPosition: d.focalPoint,
|
|
||||||
localPosition: d.localFocalPoint,
|
|
||||||
);
|
|
||||||
|
|
||||||
DragUpdateDetails _getDragUpdateDetails(ScaleUpdateDetails d) =>
|
DragUpdateDetails _getDragUpdateDetails(ScaleUpdateDetails d) =>
|
||||||
DragUpdateDetails(
|
DragUpdateDetails(
|
||||||
globalPosition: d.focalPoint,
|
globalPosition: d.focalPoint,
|
||||||
@ -344,13 +286,16 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _reject(_TapTracker tracker) {
|
void _reject(_TapTracker tracker) {
|
||||||
_checkCancel();
|
try {
|
||||||
|
_checkCancel();
|
||||||
_isStart = false;
|
_isStart = false;
|
||||||
_trackers.remove(tracker.pointer);
|
_trackers.remove(tracker.pointer);
|
||||||
tracker.entry.resolve(GestureDisposition.rejected);
|
tracker.entry.resolve(GestureDisposition.rejected);
|
||||||
_freezeTracker(tracker);
|
_freezeTracker(tracker);
|
||||||
_reset();
|
_reset();
|
||||||
|
} catch (e) {
|
||||||
|
debugPrint("Failed to _reject:$e");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -729,10 +674,7 @@ RawGestureDetector getMixinGestureDetector({
|
|||||||
GestureDragEndCallback? onOneFingerPanEnd,
|
GestureDragEndCallback? onOneFingerPanEnd,
|
||||||
GestureScaleUpdateCallback? onTwoFingerScaleUpdate,
|
GestureScaleUpdateCallback? onTwoFingerScaleUpdate,
|
||||||
GestureScaleEndCallback? onTwoFingerScaleEnd,
|
GestureScaleEndCallback? onTwoFingerScaleEnd,
|
||||||
GestureDragUpdateCallback? onTwoFingerHorizontalDragUpdate,
|
GestureDragUpdateCallback? onThreeFingerVerticalDragUpdate,
|
||||||
GestureDragUpdateCallback? onTwoFingerVerticalDragUpdate,
|
|
||||||
GestureDragStartCallback? onTwoFingerPanStart,
|
|
||||||
GestureDragUpdateCallback? onTwoFingerPanUpdate,
|
|
||||||
}) {
|
}) {
|
||||||
return RawGestureDetector(
|
return RawGestureDetector(
|
||||||
child: child,
|
child: child,
|
||||||
@ -782,8 +724,7 @@ RawGestureDetector getMixinGestureDetector({
|
|||||||
..onOneFingerPanEnd = onOneFingerPanEnd
|
..onOneFingerPanEnd = onOneFingerPanEnd
|
||||||
..onTwoFingerScaleUpdate = onTwoFingerScaleUpdate
|
..onTwoFingerScaleUpdate = onTwoFingerScaleUpdate
|
||||||
..onTwoFingerScaleEnd = onTwoFingerScaleEnd
|
..onTwoFingerScaleEnd = onTwoFingerScaleEnd
|
||||||
..onTwoFingerHorizontalDragUpdate = onTwoFingerHorizontalDragUpdate
|
..onThreeFingerVerticalDragUpdate = onThreeFingerVerticalDragUpdate;
|
||||||
..onTwoFingerVerticalDragUpdate = onTwoFingerVerticalDragUpdate;
|
}),
|
||||||
})
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "单指移动"),
|
("One-Finger Move", "单指移动"),
|
||||||
("Double Tap & Move", "双击并移动"),
|
("Double Tap & Move", "双击并移动"),
|
||||||
("Mouse Drag", "鼠标选中拖动"),
|
("Mouse Drag", "鼠标选中拖动"),
|
||||||
("Two-Finger vertically", "双指垂直滑动"),
|
("Three-Finger vertically", "三指垂直滑动"),
|
||||||
("Mouse Wheel", "鼠标滚轮"),
|
("Mouse Wheel", "鼠标滚轮"),
|
||||||
("Two-Finger Move", "双指移动"),
|
("Two-Finger Move", "双指移动"),
|
||||||
("Canvas Move", "移动画布"),
|
("Canvas Move", "移动画布"),
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Eine Fingerbewegung"),
|
("One-Finger Move", "Eine Fingerbewegung"),
|
||||||
("Double Tap & Move", "Doppeltippen und verschieben"),
|
("Double Tap & Move", "Doppeltippen und verschieben"),
|
||||||
("Mouse Drag", "Maus ziehen"),
|
("Mouse Drag", "Maus ziehen"),
|
||||||
("Two-Finger vertically", "Zwei Finger vertikal"),
|
("Three-Finger vertically", "Drei Finger vertikal"),
|
||||||
("Mouse Wheel", "Mausrad"),
|
("Mouse Wheel", "Mausrad"),
|
||||||
("Two-Finger Move", "Zwei Finger Bewegung"),
|
("Two-Finger Move", "Zwei Finger Bewegung"),
|
||||||
("Canvas Move", "Leinwand bewegen"),
|
("Canvas Move", "Leinwand bewegen"),
|
||||||
@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_start_service_tip", "Tippen Sie auf [Dienst starten] oder ÖFFNEN Sie die Berechtigung [Bildschirmaufnahme], um den Bildschirmfreigabedienst zu starten."),
|
("android_start_service_tip", "Tippen Sie auf [Dienst starten] oder ÖFFNEN Sie die Berechtigung [Bildschirmaufnahme], um den Bildschirmfreigabedienst zu starten."),
|
||||||
("Account", "Konto"),
|
("Account", "Konto"),
|
||||||
("Quit", "Ausgang"),
|
("Quit", "Ausgang"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Hilfe"),
|
("Help", "Hilfe"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", ""),
|
("One-Finger Move", ""),
|
||||||
("Double Tap & Move", ""),
|
("Double Tap & Move", ""),
|
||||||
("Mouse Drag", ""),
|
("Mouse Drag", ""),
|
||||||
("Two-Finger vertically", ""),
|
("Three-Finger vertically", ""),
|
||||||
("Mouse Wheel", ""),
|
("Mouse Wheel", ""),
|
||||||
("Two-Finger Move", ""),
|
("Two-Finger Move", ""),
|
||||||
("Canvas Move", ""),
|
("Canvas Move", ""),
|
||||||
@ -265,5 +265,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_version_audio_tip", ""),
|
("android_version_audio_tip", ""),
|
||||||
("android_start_service_tip", ""),
|
("android_start_service_tip", ""),
|
||||||
("Account", ""),
|
("Account", ""),
|
||||||
|
("Quit", ""),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
|
("Help", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Mouvement à un doigt"),
|
("One-Finger Move", "Mouvement à un doigt"),
|
||||||
("Double Tap & Move", "Appuyez deux fois et déplacez"),
|
("Double Tap & Move", "Appuyez deux fois et déplacez"),
|
||||||
("Mouse Drag", "Glissement de la souris"),
|
("Mouse Drag", "Glissement de la souris"),
|
||||||
("Two-Finger vertically", "Deux doigts verticalement"),
|
("Three-Finger vertically", "Trois doigts verticalement"),
|
||||||
("Mouse Wheel", "Roulette de la souris"),
|
("Mouse Wheel", "Roulette de la souris"),
|
||||||
("Two-Finger Move", "Mouvement à deux doigts"),
|
("Two-Finger Move", "Mouvement à deux doigts"),
|
||||||
("Canvas Move", "Déplacement de la toile"),
|
("Canvas Move", "Déplacement de la toile"),
|
||||||
@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_start_service_tip", "Appuyez sur [Démarrer le service] ou sur l'autorisation OUVRIR [Capture d'écran] pour démarrer le service de partage d'écran."),
|
("android_start_service_tip", "Appuyez sur [Démarrer le service] ou sur l'autorisation OUVRIR [Capture d'écran] pour démarrer le service de partage d'écran."),
|
||||||
("Account", "Compte"),
|
("Account", "Compte"),
|
||||||
("Quit", "Quitter"),
|
("Quit", "Quitter"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Aider"),
|
("Help", "Aider"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Gerakan Satu Jari"),
|
("One-Finger Move", "Gerakan Satu Jari"),
|
||||||
("Double Tap & Move", "Ketuk Dua Kali & Pindah"),
|
("Double Tap & Move", "Ketuk Dua Kali & Pindah"),
|
||||||
("Mouse Drag", "Geser Mouse"),
|
("Mouse Drag", "Geser Mouse"),
|
||||||
("Two-Finger vertically", "Dua Jari secara vertikal"),
|
("Three-Finger vertically", "Tiga Jari secara vertikal"),
|
||||||
("Mouse Wheel", "Roda mouse"),
|
("Mouse Wheel", "Roda mouse"),
|
||||||
("Two-Finger Move", "Gerakan Dua Jari"),
|
("Two-Finger Move", "Gerakan Dua Jari"),
|
||||||
("Canvas Move", "Gerakan Kanvas"),
|
("Canvas Move", "Gerakan Kanvas"),
|
||||||
@ -264,10 +264,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_stop_service_tip", "Menutup layanan akan secara otomatis menutup semua koneksi yang dibuat."),
|
("android_stop_service_tip", "Menutup layanan akan secara otomatis menutup semua koneksi yang dibuat."),
|
||||||
("android_version_audio_tip", "Versi Android saat ini tidak mendukung pengambilan audio, harap tingkatkan ke Android 10 atau lebih tinggi."),
|
("android_version_audio_tip", "Versi Android saat ini tidak mendukung pengambilan audio, harap tingkatkan ke Android 10 atau lebih tinggi."),
|
||||||
("android_start_service_tip", "Ketuk izin [Mulai Layanan] atau BUKA [Tangkapan Layar] untuk memulai layanan berbagi layar."),
|
("android_start_service_tip", "Ketuk izin [Mulai Layanan] atau BUKA [Tangkapan Layar] untuk memulai layanan berbagi layar."),
|
||||||
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
|
||||||
("doc_fix_wayland", "https://rustdesk.com/docs/en/manual/linux/#x11-required"),
|
|
||||||
("Account", "Akun"),
|
("Account", "Akun"),
|
||||||
("Quit", "Keluar"),
|
("Quit", "Keluar"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Bantuan"),
|
("Help", "Bantuan"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Movimento con un dito"),
|
("One-Finger Move", "Movimento con un dito"),
|
||||||
("Double Tap & Move", "Tocca due volte e sposta"),
|
("Double Tap & Move", "Tocca due volte e sposta"),
|
||||||
("Mouse Drag", "Trascina il mouse"),
|
("Mouse Drag", "Trascina il mouse"),
|
||||||
("Two-Finger vertically", "Due dita in verticale"),
|
("Three-Finger vertically", "Tre dita in verticale"),
|
||||||
("Mouse Wheel", "Rotellina del mouse"),
|
("Mouse Wheel", "Rotellina del mouse"),
|
||||||
("Two-Finger Move", "Movimento con due dita"),
|
("Two-Finger Move", "Movimento con due dita"),
|
||||||
("Canvas Move", "Sposta tela"),
|
("Canvas Move", "Sposta tela"),
|
||||||
@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_start_service_tip", "Toccare [Avvia servizio] o APRI l'autorizzazione [Cattura schermo] per avviare il servizio di condivisione dello schermo."),
|
("android_start_service_tip", "Toccare [Avvia servizio] o APRI l'autorizzazione [Cattura schermo] per avviare il servizio di condivisione dello schermo."),
|
||||||
("Account", "Account"),
|
("Account", "Account"),
|
||||||
("Quit", "Esci"),
|
("Quit", "Esci"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Aiuto"),
|
("Help", "Aiuto"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Mover com um dedo"),
|
("One-Finger Move", "Mover com um dedo"),
|
||||||
("Double Tap & Move", "Toque duplo & mover"),
|
("Double Tap & Move", "Toque duplo & mover"),
|
||||||
("Mouse Drag", "Arrastar com o mouse"),
|
("Mouse Drag", "Arrastar com o mouse"),
|
||||||
("Two-Finger vertically", "Dois dedos verticalmente"),
|
("Three-Finger vertically", "Três dedos verticalmente"),
|
||||||
("Mouse Wheel", "Roda do Mouse"),
|
("Mouse Wheel", "Roda do Mouse"),
|
||||||
("Two-Finger Move", "Mover com dois dedos"),
|
("Two-Finger Move", "Mover com dois dedos"),
|
||||||
("Canvas Move", "Mover Tela"),
|
("Canvas Move", "Mover Tela"),
|
||||||
@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_start_service_tip", "Toque [Iniciar Serviço] ou ABRA a permissão [Captura de Tela] para iniciar o serviço de compartilhamento de tela."),
|
("android_start_service_tip", "Toque [Iniciar Serviço] ou ABRA a permissão [Captura de Tela] para iniciar o serviço de compartilhamento de tela."),
|
||||||
("Account", "Conta"),
|
("Account", "Conta"),
|
||||||
("Quit", "Saída"),
|
("Quit", "Saída"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Ajuda"),
|
("Help", "Ajuda"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "Движение одним пальцем"),
|
("One-Finger Move", "Движение одним пальцем"),
|
||||||
("Double Tap & Move", "Двойное нажатие и перемещение"),
|
("Double Tap & Move", "Двойное нажатие и перемещение"),
|
||||||
("Mouse Drag", "Перетаскивание мышью"),
|
("Mouse Drag", "Перетаскивание мышью"),
|
||||||
("Two-Finger vertically", "Двумя пальцами по вертикали"),
|
("Three-Finger vertically", "Три пальца по вертикали"),
|
||||||
("Mouse Wheel", "Колесико мыши"),
|
("Mouse Wheel", "Колесико мыши"),
|
||||||
("Two-Finger Move", "Движение двумя пальцами"),
|
("Two-Finger Move", "Движение двумя пальцами"),
|
||||||
("Canvas Move", "Перемещение холста"),
|
("Canvas Move", "Перемещение холста"),
|
||||||
@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_start_service_tip", "Коснитесь [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Скриншот], чтобы запустить службу демонстрации экрана."),
|
("android_start_service_tip", "Коснитесь [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Скриншот], чтобы запустить службу демонстрации экрана."),
|
||||||
("Account", "Аккаунт"),
|
("Account", "Аккаунт"),
|
||||||
("Quit", "Выйти"),
|
("Quit", "Выйти"),
|
||||||
|
("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"),
|
||||||
("Help", "Помощь"),
|
("Help", "Помощь"),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", ""),
|
("One-Finger Move", ""),
|
||||||
("Double Tap & Move", ""),
|
("Double Tap & Move", ""),
|
||||||
("Mouse Drag", ""),
|
("Mouse Drag", ""),
|
||||||
("Two-Finger vertically", ""),
|
("Three-Finger vertically", ""),
|
||||||
("Mouse Wheel", ""),
|
("Mouse Wheel", ""),
|
||||||
("Two-Finger Move", ""),
|
("Two-Finger Move", ""),
|
||||||
("Canvas Move", ""),
|
("Canvas Move", ""),
|
||||||
@ -265,5 +265,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("android_version_audio_tip", ""),
|
("android_version_audio_tip", ""),
|
||||||
("android_start_service_tip", ""),
|
("android_start_service_tip", ""),
|
||||||
("Account", ""),
|
("Account", ""),
|
||||||
|
("Quit", ""),
|
||||||
|
("doc_mac_permission", ""),
|
||||||
|
("Help", ""),
|
||||||
].iter().cloned().collect();
|
].iter().cloned().collect();
|
||||||
}
|
}
|
||||||
|
@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
|||||||
("One-Finger Move", "單指移動"),
|
("One-Finger Move", "單指移動"),
|
||||||
("Double Tap & Move", "雙擊並移動"),
|
("Double Tap & Move", "雙擊並移動"),
|
||||||
("Mouse Drag", "鼠標選中拖動"),
|
("Mouse Drag", "鼠標選中拖動"),
|
||||||
("Two-Finger vertically", "雙指垂直滑動"),
|
("Three-Finger vertically", "三指垂直滑動"),
|
||||||
("Mouse Wheel", "鼠標滾輪"),
|
("Mouse Wheel", "鼠標滾輪"),
|
||||||
("Two-Finger Move", "雙指移動"),
|
("Two-Finger Move", "雙指移動"),
|
||||||
("Canvas Move", "移動畫布"),
|
("Canvas Move", "移動畫布"),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user