From ec8f43e79cb8a182c0dc73d103e632fac96293b6 Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Sat, 4 May 2024 02:21:01 -0400 Subject: Added command queue access to event handlers --- Cargo.toml | 2 +- src/lib.rs | 3 ++- src/resources.rs | 5 +++-- src/systems.rs | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 81d1710..0ac7802 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "grex_terminal_display" -version = "0.1.1" +version = "0.1.2" edition = "2021" [dependencies] diff --git a/src/lib.rs b/src/lib.rs index ac093de..3d5b144 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,7 @@ use bevy::{ prelude::*, utils::tracing::level_filters::LevelFilter, }; use crossterm::{ - event::DisableMouseCapture, + event::{DisableMouseCapture, PopKeyboardEnhancementFlags}, terminal::{disable_raw_mode, LeaveAlternateScreen}, ExecutableCommand, }; @@ -66,6 +66,7 @@ impl Plugin for TerminalDisplayPlugin { impl Drop for TerminalDisplayPlugin { fn drop(&mut self) { let mut stdout = stdout(); + let _ = stdout.execute(PopKeyboardEnhancementFlags); let _ = stdout.execute(DisableMouseCapture); let _ = stdout.execute(LeaveAlternateScreen); let _ = disable_raw_mode(); diff --git a/src/resources.rs b/src/resources.rs index e8fb946..917f957 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -1,7 +1,7 @@ use std::{sync::{Arc, Mutex}, io::{stdout, Stdout}, fs::{File, OpenOptions}}; use bevy::{prelude::*, utils::{HashSet, Uuid, HashMap, tracing::{subscriber, level_filters::LevelFilter}}, log::tracing_subscriber}; -use crossterm::{event::{Event, KeyCode, EnableMouseCapture}, terminal::{EnterAlternateScreen, enable_raw_mode}, ExecutableCommand}; +use crossterm::{event::{Event, KeyCode, EnableMouseCapture, PushKeyboardEnhancementFlags, KeyboardEnhancementFlags}, terminal::{EnterAlternateScreen, enable_raw_mode}, ExecutableCommand}; use ratatui::{backend::CrosstermBackend, Frame, layout::Rect}; use crate::events::TerminalInputEvent; @@ -47,6 +47,7 @@ impl Default for Terminal { fn default() -> Self { stdout().execute(EnterAlternateScreen).unwrap(); stdout().execute(EnableMouseCapture).unwrap(); + stdout().execute(PushKeyboardEnhancementFlags(KeyboardEnhancementFlags::REPORT_EVENT_TYPES)).unwrap(); enable_raw_mode().unwrap(); let mut terminal = ratatui::Terminal::new(CrosstermBackend::new(stdout())).expect("Failed to create terminal"); terminal.clear().expect("Failed to clear terminal"); @@ -85,6 +86,6 @@ pub trait TerminalWidget { fn init(&mut self) {} fn update(&mut self) {} fn render(&mut self, frame: &mut Frame, rect: Rect); - fn handle_events(&mut self, _event: &TerminalInputEvent) {} + fn handle_events(&mut self, _event: &TerminalInputEvent, commands: &mut Commands) {} fn depth(&self) -> u32 { 0 } } diff --git a/src/systems.rs b/src/systems.rs index e1a9bef..b0055b9 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -119,10 +119,11 @@ fn braille_char(mask: u8) -> char { pub fn widget_input_handling( mut terminal_ui: ResMut, mut event_reader: EventReader, + mut commands: Commands, ) { for event in event_reader.read() { for widget in terminal_ui.widgets().iter_mut() { - widget.handle_events(event); + widget.handle_events(event, &mut commands); } } } -- cgit v1.2.3