Skip to main content

pot_head/
grab_mode.rs

1//! Grab mode functionality for parameter automation.
2//!
3//! When physical pot position doesn't match virtual parameter value
4//! (e.g., after automation or preset change), grab modes prevent jarring jumps.
5
6/// Grab mode determines how pot position synchronizes with virtual parameter value.
7#[derive(Debug, Clone, Copy, PartialEq, Default)]
8pub enum GrabMode {
9    /// Disabled - pot position immediately controls output (may cause jumps).
10    #[default]
11    None,
12
13    /// Pickup mode - catches when pot crosses virtual value from below.
14    /// Industry standard in professional audio equipment.
15    Pickup,
16
17    /// PassThrough mode - catches when pot crosses virtual value from either direction.
18    /// More intuitive UX - catches from whichever direction you approach.
19    PassThrough,
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn test_grab_mode_default() {
28        assert_eq!(GrabMode::default(), GrabMode::None);
29    }
30
31    #[test]
32    fn test_grab_mode_equality() {
33        assert_eq!(GrabMode::None, GrabMode::None);
34        assert_eq!(GrabMode::Pickup, GrabMode::Pickup);
35        assert_eq!(GrabMode::PassThrough, GrabMode::PassThrough);
36        assert_ne!(GrabMode::Pickup, GrabMode::PassThrough);
37    }
38}