From 3a66d52c2db86d4d0b00707aee708e78b78bfd59 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 12 May 2022 17:30:39 +0800 Subject: [PATCH 1/3] add three fingers vertical drag -> scroll --- flutter/lib/pages/remote_page.dart | 2 +- flutter/lib/widgets/gestures.dart | 171 ++++++++++------------------- 2 files changed, 57 insertions(+), 116 deletions(-) diff --git a/flutter/lib/pages/remote_page.dart b/flutter/lib/pages/remote_page.dart index 30e827134..ff8268ed0 100644 --- a/flutter/lib/pages/remote_page.dart +++ b/flutter/lib/pages/remote_page.dart @@ -541,7 +541,7 @@ class _RemotePageState extends State { _scale = 1; FFI.setByName('peer_option', '{"name": "view-style", "value": ""}'); }, - onTwoFingerVerticalDragUpdate: FFI.ffiModel.isPeerAndroid + onThreeFingerVerticalDragUpdate: FFI.ffiModel.isPeerAndroid ? null : (d) { FFI.scroll(d.delta.dy / 2); diff --git a/flutter/lib/widgets/gestures.dart b/flutter/lib/widgets/gestures.dart index 639b000f4..8d690c734 100644 --- a/flutter/lib/widgets/gestures.dart +++ b/flutter/lib/widgets/gestures.dart @@ -6,13 +6,9 @@ enum CustomTouchGestureState { none, oneFingerPan, twoFingerScale, - twoFingerVerticalDrag, - twoFingerHorizontalDrag, + threeFingerVerticalDrag } -// Adjust Carefully! balance vertical and pan -const kScaleSlop = kPrecisePointerPanSlop / 28; - class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { CustomTouchGestureRecognizer({ Object? debugOwner, @@ -34,39 +30,56 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { GestureScaleUpdateCallback? onTwoFingerScaleUpdate; GestureScaleEndCallback? onTwoFingerScaleEnd; - // twoFingerVerticalDrag - GestureDragStartCallback? onTwoFingerVerticalDragStart; - GestureDragUpdateCallback? onTwoFingerVerticalDragUpdate; - GestureDragEndCallback? onTwoFingerVerticalDragEnd; + // threeFingerVerticalDrag + GestureDragStartCallback? onThreeFingerVerticalDragStart; + GestureDragUpdateCallback? onThreeFingerVerticalDragUpdate; + GestureDragEndCallback? onThreeFingerVerticalDragEnd; - // twoFingerHorizontalDrag - GestureDragStartCallback? onTwoFingerHorizontalDragStart; - GestureDragUpdateCallback? onTwoFingerHorizontalDragUpdate; - GestureDragEndCallback? onTwoFingerHorizontalDragEnd; + var _currentState = CustomTouchGestureState.none; + Timer? _startEventDebounceTimer; void _init() { debugPrint("CustomTouchGestureRecognizer init"); onStart = (d) { + _startEventDebounceTimer?.cancel(); if (d.pointerCount == 1) { _currentState = CustomTouchGestureState.oneFingerPan; if (onOneFingerPanStart != null) { onOneFingerPanStart!(DragStartDetails( localPosition: d.localFocalPoint, globalPosition: d.focalPoint)); } - debugPrint("start pan"); + debugPrint("start oneFingerPan"); } else if (d.pointerCount == 2) { - _currentState = CustomTouchGestureState.none; - startWatchTimer(); - } else { - _currentState = CustomTouchGestureState.none; - _reset(); + if (_currentState == CustomTouchGestureState.threeFingerVerticalDrag) { + // 3 -> 2 debounce + _startEventDebounceTimer = Timer(Duration(milliseconds: 200), () { + _currentState = CustomTouchGestureState.twoFingerScale; + 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) { - if (_isWatch) { - _updateCompute(d); - return; - } if (_currentState != CustomTouchGestureState.none) { switch (_currentState) { case CustomTouchGestureState.oneFingerPan: @@ -79,14 +92,9 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { onTwoFingerScaleUpdate!(d); } break; - case CustomTouchGestureState.twoFingerHorizontalDrag: - if (onTwoFingerHorizontalDragUpdate != null) { - onTwoFingerHorizontalDragUpdate!(_getDragUpdateDetails(d)); - } - break; - case CustomTouchGestureState.twoFingerVerticalDrag: - if (onTwoFingerVerticalDragUpdate != null) { - onTwoFingerVerticalDragUpdate!(_getDragUpdateDetails(d)); + case CustomTouchGestureState.threeFingerVerticalDrag: + if (onThreeFingerVerticalDragUpdate != null) { + onThreeFingerVerticalDragUpdate!(_getDragUpdateDetails(d)); } break; default: @@ -111,85 +119,19 @@ class CustomTouchGestureRecognizer extends ScaleGestureRecognizer { onTwoFingerScaleEnd!(d); } break; - case CustomTouchGestureState.twoFingerHorizontalDrag: - debugPrint("TwoFingerState.horizontal onEnd"); - if (onTwoFingerHorizontalDragEnd != null) { - onTwoFingerHorizontalDragEnd!(_getDragEndDetails(d)); - } - break; - case CustomTouchGestureState.twoFingerVerticalDrag: - debugPrint("TwoFingerState.vertical onEnd"); - if (onTwoFingerVerticalDragEnd != null) { - onTwoFingerVerticalDragEnd!(_getDragEndDetails(d)); + case CustomTouchGestureState.threeFingerVerticalDrag: + debugPrint("ThreeFingerState.vertical onEnd"); + if (onThreeFingerVerticalDragEnd != null) { + onThreeFingerVerticalDragEnd!(_getDragEndDetails(d)); } break; default: break; } _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( globalPosition: d.focalPoint, @@ -344,13 +286,16 @@ class HoldTapMoveGestureRecognizer extends GestureRecognizer { } void _reject(_TapTracker tracker) { - _checkCancel(); - - _isStart = false; - _trackers.remove(tracker.pointer); - tracker.entry.resolve(GestureDisposition.rejected); - _freezeTracker(tracker); - _reset(); + try { + _checkCancel(); + _isStart = false; + _trackers.remove(tracker.pointer); + tracker.entry.resolve(GestureDisposition.rejected); + _freezeTracker(tracker); + _reset(); + } catch (e) { + debugPrint("Failed to _reject:$e"); + } } @override @@ -729,10 +674,7 @@ RawGestureDetector getMixinGestureDetector({ GestureDragEndCallback? onOneFingerPanEnd, GestureScaleUpdateCallback? onTwoFingerScaleUpdate, GestureScaleEndCallback? onTwoFingerScaleEnd, - GestureDragUpdateCallback? onTwoFingerHorizontalDragUpdate, - GestureDragUpdateCallback? onTwoFingerVerticalDragUpdate, - GestureDragStartCallback? onTwoFingerPanStart, - GestureDragUpdateCallback? onTwoFingerPanUpdate, + GestureDragUpdateCallback? onThreeFingerVerticalDragUpdate, }) { return RawGestureDetector( child: child, @@ -782,8 +724,7 @@ RawGestureDetector getMixinGestureDetector({ ..onOneFingerPanEnd = onOneFingerPanEnd ..onTwoFingerScaleUpdate = onTwoFingerScaleUpdate ..onTwoFingerScaleEnd = onTwoFingerScaleEnd - ..onTwoFingerHorizontalDragUpdate = onTwoFingerHorizontalDragUpdate - ..onTwoFingerVerticalDragUpdate = onTwoFingerVerticalDragUpdate; - }) + ..onThreeFingerVerticalDragUpdate = onThreeFingerVerticalDragUpdate; + }), }); } From cfd4fd492be54654a20b312f3052a2f2154617b0 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 12 May 2022 20:05:59 +0800 Subject: [PATCH 2/3] update mobile mouse scroll --- flutter/lib/models/model.dart | 6 ++---- flutter/lib/pages/remote_page.dart | 10 +++++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 3a4c9b987..bb5ce7325 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -691,11 +691,9 @@ class FFI { sendMouse('up', button); } - static void scroll(double y) { - var y2 = y.round(); - if (y2 == 0) return; + static void scroll(int y) { setByName('send_mouse', - json.encode(modify({'type': 'wheel', 'y': y2.toString()}))); + json.encode(modify({'type': 'wheel', 'y': y.toString()}))); } static void reconnect() { diff --git a/flutter/lib/pages/remote_page.dart b/flutter/lib/pages/remote_page.dart index ff8268ed0..e323f1ecb 100644 --- a/flutter/lib/pages/remote_page.dart +++ b/flutter/lib/pages/remote_page.dart @@ -32,6 +32,7 @@ class _RemotePageState extends State { double _bottom = 0; String _value = ''; double _scale = 1; + double _mouseScrollIntegral = 0; // mouse scroll speed controller var _more = true; var _fn = false; @@ -544,7 +545,14 @@ class _RemotePageState extends State { onThreeFingerVerticalDragUpdate: FFI.ffiModel.isPeerAndroid ? null : (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; + } }); } From 5ebf22a880af07696c517c16031bac9c32d45e28 Mon Sep 17 00:00:00 2001 From: csf Date: Thu, 12 May 2022 22:09:45 +0800 Subject: [PATCH 3/3] update tips and translate --- flutter/assets/gestures.ttf | Bin 7600 -> 8068 bytes flutter/lib/widgets/gesture_help.dart | 14 ++++++++------ src/lang/cn.rs | 2 +- src/lang/de.rs | 3 ++- src/lang/eo.rs | 5 ++++- src/lang/fr.rs | 3 ++- src/lang/id.rs | 5 ++--- src/lang/it.rs | 3 ++- src/lang/ptbr.rs | 3 ++- src/lang/ru.rs | 3 ++- src/lang/template.rs | 5 ++++- src/lang/tw.rs | 2 +- 12 files changed, 30 insertions(+), 18 deletions(-) diff --git a/flutter/assets/gestures.ttf b/flutter/assets/gestures.ttf index b6cebbf43f45e2f4619fa3dd4d34622804d328e8..aabec8ac9e67bc0c79be3b4b15224c8c99ed5b16 100644 GIT binary patch delta 1028 zcmXw0O>7fK6n=02#`b#co!H)8$63eNjw8n;X=2BQ5@bLi!GQyuI8=(<{5WbI96=&N zim;HNT&hxJsp^4KdqY%BRnZdyaYVGV;>3xf9#%r42PC+J#_k)hI-_si&wlT{Z+3PL zU9W%hQRnOzzug0n@`RJk*5#FdoTqC5%2xpP*6MO&DYNvG3;?eP)m2KczvQpUe?Z8u zu5D}`fPNnU-%xy@)n05&9Lv3+`WD6MwZ_&uX5e4??ogaL-&k8Vf0*9^7*S|mbG?1h z*!b{f{5#@O0a~{ov-_!39&=!rHc6wdLC}Cv zg+kRjguwt+@KNhNmUg>;O2JN;m;m<%C(w857Ok(u!%PBHVxB}D*r*J%1s}yosHdiTRH5bX%5`4TMHq-2m zWzSeP?L@gUNKRqZ8bwOfkyom-Rw7m_`wlPLu|Y<*YgK#JwwT5=Dyw6)R>j#mCdzZR zHCwGrV<8(wEpEkxbw;j|*N-4$-c0}U@ z<0P3>X+-0Oc7$;Po=#__AKhZKvU4}2u8ta hE??Z(ys*5mGP!i2(VW~|pImBRIzKtneLM09;Xl1U!pr~w delta 526 zcmX|-PbdUY9LK+JX3Vl{vlrT=-7Sua+U3BO94K;dkc*YZ-;G_n#bKSKaI>tDgOhS{ zvvH%OTscurIOrAaRfHPfnHTT%nfLqt=J)Tt^`4XNo%YqQkI{QTi;=Fm%*yP5)i(wh z1)%;eJ!4Hr_s`=1o=In#4&Rf$Mf-xZq_fL~1RMtt73xGLH)TaCE$hrrQ8#6+LS97i z!~bFG*rJu42^}R*fW{&Ao6F~xg3D%kcaX7X4EQcxH1`A{Xp;BxXL+J7`Hp}=2k_W^ ze*AYjjx%KleT}*rn(O6q^MZCnJlmSq(RSczU=O-ywes{c=l}-Nj0|z>fK17Z%*joA zR*N?`Ak6Jn^096eOw@Q;0n{>!eS~>*rHNIB)Dqy(`+7?9$}Vm*Ij>+D$OQ!pLS_^! z4VhE03FL-??I1T5-f%_Q#2s92D-b|0WQl^fW4zudI3Zqd75{HCB8IhoebPu8FXoW1 b)mN#0sCo3iowl3fVG*>8kwyXgI&%37eW7)B diff --git a/flutter/lib/widgets/gesture_help.dart b/flutter/lib/widgets/gesture_help.dart index b2a2141c5..e907890b0 100644 --- a/flutter/lib/widgets/gesture_help.dart +++ b/flutter/lib/widgets/gesture_help.dart @@ -32,6 +32,8 @@ class GestureIcons { IconData(0xe68f, fontFamily: _family); static const IconData icon_gesture_f_double_tap = IconData(0xe691, fontFamily: _family); + static const IconData icon_gesture_f_three_fingers = + IconData(0xe687, fontFamily: _family); } typedef OnTouchModeChange = void Function(bool); @@ -118,8 +120,8 @@ class _GestureHelpState extends State { translate("Mouse Drag")), GestureInfo( width, - GestureIcons.icon_gesture_f_drag_up_down_, - translate("Two-Finger vertically"), + GestureIcons.icon_gesture_f_three_fingers, + translate("Three-Finger vertically"), translate("Mouse Wheel")), GestureInfo( width, @@ -140,8 +142,8 @@ class _GestureHelpState extends State { translate("Left Mouse")), GestureInfo( width, - GestureIcons.icon_gesture_f_tap_, - translate("Two-Finger Tap"), + GestureIcons.icon_gesture_press_hold, + translate("One-Long Tap"), translate("Right Mouse")), GestureInfo( width, @@ -150,8 +152,8 @@ class _GestureHelpState extends State { translate("Mouse Drag")), GestureInfo( width, - GestureIcons.icon_gesture_f_drag_up_down_, - translate("Two-Finger vertically"), + GestureIcons.icon_gesture_f_three_fingers, + translate("Three-Finger vertically"), translate("Mouse Wheel")), GestureInfo( width, diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 04e334097..545b52a24 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "单指移动"), ("Double Tap & Move", "双击并移动"), ("Mouse Drag", "鼠标选中拖动"), - ("Two-Finger vertically", "双指垂直滑动"), + ("Three-Finger vertically", "三指垂直滑动"), ("Mouse Wheel", "鼠标滚轮"), ("Two-Finger Move", "双指移动"), ("Canvas Move", "移动画布"), diff --git a/src/lang/de.rs b/src/lang/de.rs index 16c79ef2a..684178a96 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Eine Fingerbewegung"), ("Double Tap & Move", "Doppeltippen und verschieben"), ("Mouse Drag", "Maus ziehen"), - ("Two-Finger vertically", "Zwei Finger vertikal"), + ("Three-Finger vertically", "Drei Finger vertikal"), ("Mouse Wheel", "Mausrad"), ("Two-Finger Move", "Zwei Finger Bewegung"), ("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."), ("Account", "Konto"), ("Quit", "Ausgang"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Hilfe"), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index d652e8914..3cd417c29 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", ""), ("Double Tap & Move", ""), ("Mouse Drag", ""), - ("Two-Finger vertically", ""), + ("Three-Finger vertically", ""), ("Mouse Wheel", ""), ("Two-Finger Move", ""), ("Canvas Move", ""), @@ -265,5 +265,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_version_audio_tip", ""), ("android_start_service_tip", ""), ("Account", ""), + ("Quit", ""), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), + ("Help", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 8e2707a04..87cdf4c64 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Mouvement à un doigt"), ("Double Tap & Move", "Appuyez deux fois et déplacez"), ("Mouse Drag", "Glissement de la souris"), - ("Two-Finger vertically", "Deux doigts verticalement"), + ("Three-Finger vertically", "Trois doigts verticalement"), ("Mouse Wheel", "Roulette de la souris"), ("Two-Finger Move", "Mouvement à deux doigts"), ("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."), ("Account", "Compte"), ("Quit", "Quitter"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Aider"), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index fc56f134f..94f3d7d7d 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Gerakan Satu Jari"), ("Double Tap & Move", "Ketuk Dua Kali & Pindah"), ("Mouse Drag", "Geser Mouse"), - ("Two-Finger vertically", "Dua Jari secara vertikal"), + ("Three-Finger vertically", "Tiga Jari secara vertikal"), ("Mouse Wheel", "Roda mouse"), ("Two-Finger Move", "Gerakan Dua Jari"), ("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_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."), - ("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"), ("Quit", "Keluar"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Bantuan"), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index c2aba104f..d63395e87 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Movimento con un dito"), ("Double Tap & Move", "Tocca due volte e sposta"), ("Mouse Drag", "Trascina il mouse"), - ("Two-Finger vertically", "Due dita in verticale"), + ("Three-Finger vertically", "Tre dita in verticale"), ("Mouse Wheel", "Rotellina del mouse"), ("Two-Finger Move", "Movimento con due dita"), ("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."), ("Account", "Account"), ("Quit", "Esci"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Aiuto"), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index b69a2408a..1ec3f6c11 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Mover com um dedo"), ("Double Tap & Move", "Toque duplo & mover"), ("Mouse Drag", "Arrastar com o mouse"), - ("Two-Finger vertically", "Dois dedos verticalmente"), + ("Three-Finger vertically", "Três dedos verticalmente"), ("Mouse Wheel", "Roda do Mouse"), ("Two-Finger Move", "Mover com dois dedos"), ("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."), ("Account", "Conta"), ("Quit", "Saída"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Ajuda"), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index bc66b55ac..6bdf0aa29 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "Движение одним пальцем"), ("Double Tap & Move", "Двойное нажатие и перемещение"), ("Mouse Drag", "Перетаскивание мышью"), - ("Two-Finger vertically", "Двумя пальцами по вертикали"), + ("Three-Finger vertically", "Три пальца по вертикали"), ("Mouse Wheel", "Колесико мыши"), ("Two-Finger Move", "Движение двумя пальцами"), ("Canvas Move", "Перемещение холста"), @@ -266,6 +266,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_start_service_tip", "Коснитесь [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Скриншот], чтобы запустить службу демонстрации экрана."), ("Account", "Аккаунт"), ("Quit", "Выйти"), + ("doc_mac_permission", "https://rustdesk.com/docs/en/manual/mac/#enable-permissions"), ("Help", "Помощь"), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 17adea637..9cfed1283 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", ""), ("Double Tap & Move", ""), ("Mouse Drag", ""), - ("Two-Finger vertically", ""), + ("Three-Finger vertically", ""), ("Mouse Wheel", ""), ("Two-Finger Move", ""), ("Canvas Move", ""), @@ -265,5 +265,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("android_version_audio_tip", ""), ("android_start_service_tip", ""), ("Account", ""), + ("Quit", ""), + ("doc_mac_permission", ""), + ("Help", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index c03c8629a..335c0fd43 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -231,7 +231,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("One-Finger Move", "單指移動"), ("Double Tap & Move", "雙擊並移動"), ("Mouse Drag", "鼠標選中拖動"), - ("Two-Finger vertically", "雙指垂直滑動"), + ("Three-Finger vertically", "三指垂直滑動"), ("Mouse Wheel", "鼠標滾輪"), ("Two-Finger Move", "雙指移動"), ("Canvas Move", "移動畫布"),