Merge pull request #507 from Heap-Hop/csf
mobile three fingers vertical drag -> mouse scroll
This commit is contained in:
commit
614be61ca1
Binary file not shown.
@ -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() {
|
||||
|
@ -32,6 +32,7 @@ class _RemotePageState extends State<RemotePage> {
|
||||
double _bottom = 0;
|
||||
String _value = '';
|
||||
double _scale = 1;
|
||||
double _mouseScrollIntegral = 0; // mouse scroll speed controller
|
||||
|
||||
var _more = true;
|
||||
var _fn = false;
|
||||
@ -541,10 +542,17 @@ class _RemotePageState extends State<RemotePage> {
|
||||
_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);
|
||||
_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);
|
||||
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<GestureHelp> {
|
||||
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<GestureHelp> {
|
||||
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<GestureHelp> {
|
||||
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,
|
||||
|
@ -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;
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
@ -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", "移动画布"),
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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", "移動畫布"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user