@@ -881,17 +881,18 @@ static int send_touch(uint8_t action, int x, int y, int pressed) {
881881 return send_control (message , sizeof (message ));
882882}
883883
884- /* hscroll/vscroll are one wheel click each, encoded as scrcpy i16
885- * fixed-point where 32767 is 1.0. Positive vscroll scrolls up. */
884+ /* hscroll/vscroll are one wheel click each. scrcpy's i16 fixed-point spans
885+ * [-16, 16] clicks full-scale (the server multiplies the [-1, 1] decode by
886+ * 16), so one click is 32768 / 16 = 2048. Positive vscroll scrolls up. */
886887static int send_scroll (int x , int y , int hscroll , int vscroll ) {
887888 uint8_t message [21 ] = {0 };
888889 message [0 ] = SCRCPY_MSG_INJECT_SCROLL ;
889890 AV_WB32 (message + 1 , (uint32_t ) x );
890891 AV_WB32 (message + 5 , (uint32_t ) y );
891892 AV_WB16 (message + 9 , (uint16_t ) video_width );
892893 AV_WB16 (message + 11 , (uint16_t ) video_height );
893- AV_WB16 (message + 13 , (uint16_t ) (int16_t ) (hscroll * 32767 ));
894- AV_WB16 (message + 15 , (uint16_t ) (int16_t ) (vscroll * 32767 ));
894+ AV_WB16 (message + 13 , (uint16_t ) (int16_t ) (hscroll * 2048 ));
895+ AV_WB16 (message + 15 , (uint16_t ) (int16_t ) (vscroll * 2048 ));
895896 AV_WB32 (message + 17 , 0 );
896897 return send_control (message , sizeof (message ));
897898}
0 commit comments