ktrl 0.1.8

A Supercharged Keyboard Programming Daemon
use crate::keys::KeyCode;
use crate::layers::LayersManager;
use crate::layers::LockOwner::LkSticky;
use log::debug;
use std::collections::HashSet;

pub struct StickyState {
    pressed: HashSet<KeyCode>,
}

impl StickyState {
    pub fn new() -> Self {
        Self {
            pressed: HashSet::new(),
        }
    }

    pub fn update_pressed(&mut self, l_mgr: &mut LayersManager, key: KeyCode) {
        debug!("Activating sticky {:?}", key);
        self.pressed.insert(key);
        l_mgr.lock_all(LkSticky);
    }

    pub fn update_released(&mut self, l_mgr: &mut LayersManager, key: KeyCode) {
        debug!("Deactivating sticky {:?}", key);
        self.pressed.remove(&key);
        l_mgr.unlock_all(LkSticky);
    }

    pub fn is_pressed(&mut self, key: KeyCode) -> bool {
        self.pressed.contains(&key)
    }
}