Skip to main content

jellyflow_runtime/io/tuning/
pan_inertia.rs

1use serde::{Deserialize, Serialize};
2
3/// Momentum configuration for canvas panning.
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5pub struct NodeGraphPanInertiaTuning {
6    /// Enables inertial panning after releasing the pan gesture.
7    #[serde(default)]
8    pub enabled: bool,
9
10    /// Exponential damping factor applied to velocity (1 / seconds).
11    #[serde(default = "default_pan_inertia_decay_per_s")]
12    pub decay_per_s: f32,
13
14    /// Minimum screen speed (px/s) required to keep inertia running.
15    #[serde(default = "default_pan_inertia_min_speed")]
16    pub min_speed: f32,
17
18    /// Maximum screen speed (px/s) at inertia start (clamp).
19    #[serde(default = "default_pan_inertia_max_speed")]
20    pub max_speed: f32,
21}
22
23fn default_pan_inertia_decay_per_s() -> f32 {
24    14.0
25}
26
27fn default_pan_inertia_min_speed() -> f32 {
28    36.0
29}
30
31fn default_pan_inertia_max_speed() -> f32 {
32    8000.0
33}
34
35impl Default for NodeGraphPanInertiaTuning {
36    fn default() -> Self {
37        Self {
38            enabled: false,
39            decay_per_s: default_pan_inertia_decay_per_s(),
40            min_speed: default_pan_inertia_min_speed(),
41            max_speed: default_pan_inertia_max_speed(),
42        }
43    }
44}