From ceb8146f0c1ae338d668a4f37fc77792da44b27c Mon Sep 17 00:00:00 2001 From: fufesou Date: Fri, 9 May 2025 13:26:24 +0800 Subject: [PATCH] feat: trackpad speed Signed-off-by: fufesou --- src/config.rs | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/config.rs b/src/config.rs index 38facc1..c9fb570 100644 --- a/src/config.rs +++ b/src/config.rs @@ -312,6 +312,12 @@ pub struct PeerConfig { skip_serializing_if = "String::is_empty" )] pub use_all_my_displays_for_the_remote_session: String, + #[serde( + rename = "trackpad-speed", + default = "PeerConfig::default_trackpad_speed", + deserialize_with = "PeerConfig::deserialize_trackpad_speed" + )] + pub trackpad_speed: i32, #[serde( default, @@ -365,6 +371,7 @@ impl Default for PeerConfig { displays_as_individual_windows: Self::default_displays_as_individual_windows(), use_all_my_displays_for_the_remote_session: Self::default_use_all_my_displays_for_the_remote_session(), + trackpad_speed: Self::default_trackpad_speed(), custom_resolutions: Default::default(), options: Self::default_options(), ui_flutter: Default::default(), @@ -1518,6 +1525,24 @@ impl PeerConfig { }); mp } + + fn default_trackpad_speed() -> i32 { + UserDefaultConfig::read(keys::OPTION_TRACKPAD_SPEED) + .parse() + .unwrap_or(100) + } + + fn deserialize_trackpad_speed<'de, D>(deserializer: D) -> Result + where + D: de::Deserializer<'de>, + { + let v: i32 = de::Deserialize::deserialize(deserializer)?; + if v >= 10 && v <= 1000 { + Ok(v) + } else { + Ok(Self::default_trackpad_speed()) + } + } } serde_field_bool!( @@ -1842,11 +1867,10 @@ impl UserDefaultConfig { keys::OPTION_CODEC_PREFERENCE => { self.get_string(key, "auto", vec!["vp8", "vp9", "av1", "h264", "h265"]) } - keys::OPTION_CUSTOM_IMAGE_QUALITY => { - self.get_double_string(key, 50.0, 10.0, 0xFFF as f64) - } - keys::OPTION_CUSTOM_FPS => self.get_double_string(key, 30.0, 5.0, 120.0), + keys::OPTION_CUSTOM_IMAGE_QUALITY => self.get_num_string(key, 50.0, 10.0, 0xFFF as f64), + keys::OPTION_CUSTOM_FPS => self.get_num_string(key, 30.0, 5.0, 120.0), keys::OPTION_ENABLE_FILE_COPY_PASTE => self.get_string(key, "Y", vec!["", "N"]), + keys::OPTION_TRACKPAD_SPEED => self.get_num_string(key, 100, 10, 1000), _ => self .get_after(key) .map(|v| v.to_string()) @@ -1886,10 +1910,13 @@ impl UserDefaultConfig { } #[inline] - fn get_double_string(&self, key: &str, default: f64, min: f64, max: f64) -> String { + fn get_num_string(&self, key: &str, default: T, min: T, max: T) -> String + where + T: ToString + std::str::FromStr + std::cmp::PartialOrd + std::marker::Copy, + { match self.get_after(key) { Some(option) => { - let v: f64 = option.parse().unwrap_or(default); + let v: T = option.parse().unwrap_or(default); if v >= min && v <= max { v.to_string() } else { @@ -2383,6 +2410,7 @@ pub mod keys { "enable-android-software-encoding-half-scale"; pub const OPTION_ENABLE_TRUSTED_DEVICES: &str = "enable-trusted-devices"; pub const OPTION_AV1_TEST: &str = "av1-test"; + pub const OPTION_TRACKPAD_SPEED: &str = "trackpad-speed"; // buildin options pub const OPTION_DISPLAY_NAME: &str = "display-name"; @@ -2469,6 +2497,7 @@ pub mod keys { OPTION_CUSTOM_FPS, OPTION_CODEC_PREFERENCE, OPTION_SYNC_INIT_CLIPBOARD, + OPTION_TRACKPAD_SPEED, ]; // DEFAULT_LOCAL_SETTINGS, OVERWRITE_LOCAL_SETTINGS pub const KEYS_LOCAL_SETTINGS: &[&str] = &[