Skip to content
Snippets Groups Projects
scroll_tracker.rs 609 B
const THRESHOLD: i8 = 50;

pub enum ScrollAction {
    Previous,
    Next,
    None,
}

pub struct ScrollTracker {
    tracker: i8,
}

impl ScrollTracker {
    pub fn new() -> Self {
        Self { tracker: 0 }
    }

    pub fn scroll(&mut self, scroll: i8) -> ScrollAction {
        self.tracker = self.tracker.saturating_add(scroll);

        if self.tracker < -THRESHOLD {
            self.tracker = 0;

            ScrollAction::Previous
        } else if self.tracker > 50 {
            self.tracker = 0;

            ScrollAction::Next
        } else {
            ScrollAction::None
        }
    }
}