1
1
import socket
2
2
import threading
3
3
import time
4
+ import queue
4
5
5
- from queue import Queue
6
6
from typing import Callable
7
7
from pynput import mouse , keyboard
8
8
from scrcpy_client import key_scancode_map
@@ -111,7 +111,7 @@ def keyboard_release_callback(k: keyboard.Key | keyboard.KeyCode, is_redirecting
111
111
send_data (mouse_init .serialize ())
112
112
last_mouse_point : tuple [int , int ] | None = None
113
113
mouse_button_state = MouseButtonStateStore ()
114
- movement_queue : Queue [tuple [int , int ]] = Queue (maxsize = 5 )
114
+ movement_queue : queue . Queue [tuple [int , int ]] = queue . Queue (maxsize = 5 )
115
115
wakeup_counter = 0
116
116
117
117
def mouse_movement_sender ():
@@ -187,7 +187,8 @@ def compute_mouse_pointer_diff(cur_x: int, cur_y: int) -> tuple[int, int] | None
187
187
speed = (diff_x ** 2 + diff_y ** 2 ) ** 0.5
188
188
speed_factor = get_config ().mouse_speed
189
189
# check speed to prevent divide-by-zero error
190
- adjusted_scale = 1 if speed == 0 else min (1 , speed_factor / (speed ** 0.5 ))
190
+ min_scale = max (1 , speed_factor / 2.5 )
191
+ adjusted_scale = 1 if speed == 0 else min (min_scale , speed_factor / (speed ** 0.6 ))
191
192
diff_x = int (diff_x * adjusted_scale )
192
193
diff_y = int (diff_y * adjusted_scale )
193
194
return diff_x , diff_y
@@ -204,7 +205,8 @@ def mouse_move_callback(cur_x: int, cur_y: int, is_redirecting: bool) -> Callbac
204
205
return None
205
206
res = compute_mouse_pointer_diff (cur_x , cur_y )
206
207
if res is None : return None
207
- movement_queue .put (res )
208
+ try : movement_queue .put (res , block = False )
209
+ except queue .Full : movement_queue .get () # if the queue is full, remove the oldest element
208
210
209
211
def mouse_click_callback (_cur_x : int , _cur_y : int , button : mouse .Button , pressed : bool , is_redirecting : bool ) -> CallbackResult :
210
212
nonlocal last_mouse_point
0 commit comments