librsmsx 0.4.1

a MSX emulator written in rust, a port from gomsx
Documentation
use std::collections::HashSet;

use sdl3::{mouse::MouseButton, render::FPoint};

fn pressed_mouse_button_set(e: &sdl3::EventPump) -> HashSet<MouseButton> {
    e.mouse_state().pressed_mouse_buttons().collect()
}

fn newly_pressed(old: &HashSet<MouseButton>, new: &HashSet<MouseButton>) -> HashSet<MouseButton> {
    new - old
    // sugar for: new.difference(old).collect()
}

pub struct MouseHelper {
    old: HashSet<MouseButton>,
    pressed: bool,
    pos: FPoint,
}

impl MouseHelper {
    pub fn new(e: &sdl3::EventPump) -> Self {
        let old = pressed_mouse_button_set(e);
        Self {
            old,
            pressed: false,
            pos: FPoint::new(-1.0, -1.0),
        }
    }
    pub fn process(&mut self, e: &sdl3::EventPump) {
        let current_mouse_pressed = pressed_mouse_button_set(e);
        let newly_pressed = newly_pressed(&self.old, &current_mouse_pressed);
        self.pressed = newly_pressed.contains(&MouseButton::Left);
        let x = e.mouse_state().x();
        let y = e.mouse_state().y();
        self.pos.x = x;
        self.pos.y = y;
        self.old = current_mouse_pressed;
    }
    pub fn is_left_button_pressed(&self) -> bool {
        self.pressed
    }
    pub fn get_mouse_pos(&self) -> &FPoint {
        &self.pos
    }
}