Track most recent mouse button in fj-viewer

This commit is contained in:
Hanno Braun 2024-11-18 19:58:38 +01:00
parent c5692f37a2
commit 743fa8aedc

View File

@ -4,8 +4,8 @@ use tracing::warn;
use crate::{ use crate::{
camera::{Camera, FocusPoint}, camera::{Camera, FocusPoint},
graphics::{DrawConfig, Renderer}, graphics::{DrawConfig, Renderer},
InputEvent, NormalizedScreenPosition, RendererInitError, Screen, InputEvent, MouseButton, NormalizedScreenPosition, RendererInitError,
ScreenSize, Screen, ScreenSize,
}; };
/// The Fornjot model viewer /// The Fornjot model viewer
@ -13,6 +13,8 @@ pub struct Viewer {
current_screen_size: ScreenSize, current_screen_size: ScreenSize,
new_screen_size: Option<ScreenSize>, new_screen_size: Option<ScreenSize>,
most_recent_mouse_button: Option<MouseButton>,
camera: Camera, camera: Camera,
cursor: Option<NormalizedScreenPosition>, cursor: Option<NormalizedScreenPosition>,
draw_config: DrawConfig, draw_config: DrawConfig,
@ -29,6 +31,7 @@ impl Viewer {
Ok(Self { Ok(Self {
current_screen_size: screen.size(), current_screen_size: screen.size(),
new_screen_size: None, new_screen_size: None,
most_recent_mouse_button: None,
camera: Camera::default(), camera: Camera::default(),
cursor: None, cursor: None,
draw_config: DrawConfig::default(), draw_config: DrawConfig::default(),
@ -98,6 +101,18 @@ impl Viewer {
self.cursor = Some(cursor_new); self.cursor = Some(cursor_new);
} }
/// # Handle a mouse button being pressed
pub fn on_mouse_button_pressed(&mut self, button: MouseButton) {
self.most_recent_mouse_button = Some(button);
}
/// # Handle a mouse button being pressed
pub fn on_mouse_button_released(&mut self, button: MouseButton) {
if self.most_recent_mouse_button == Some(button) {
self.most_recent_mouse_button = None;
}
}
/// Handle the screen being resized /// Handle the screen being resized
pub fn on_screen_resize(&mut self, new_size: ScreenSize) { pub fn on_screen_resize(&mut self, new_size: ScreenSize) {
self.current_screen_size = new_size; self.current_screen_size = new_size;