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}