From 1cd1582506810255394d2f9019597e9252bd8daa Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 17 Mar 2020 07:16:54 +0100 Subject: Add `modifiers` to `KeyPressEvent` in `pane_grid` --- examples/pane_grid/src/main.rs | 6 +++--- native/src/widget/pane_grid.rs | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/examples/pane_grid/src/main.rs b/examples/pane_grid/src/main.rs index 7ab68393..461ffc30 100644 --- a/examples/pane_grid/src/main.rs +++ b/examples/pane_grid/src/main.rs @@ -115,11 +115,11 @@ impl Sandbox for Example { } } -fn handle_hotkey(key_code: keyboard::KeyCode) -> Option { +fn handle_hotkey(event: pane_grid::KeyPressEvent) -> Option { use keyboard::KeyCode; use pane_grid::{Axis, Direction}; - let direction = match key_code { + let direction = match event.key_code { KeyCode::Up => Some(Direction::Up), KeyCode::Down => Some(Direction::Down), KeyCode::Left => Some(Direction::Left), @@ -127,7 +127,7 @@ fn handle_hotkey(key_code: keyboard::KeyCode) -> Option { _ => None, }; - match key_code { + match event.key_code { KeyCode::V => Some(Message::SplitFocused(Axis::Vertical)), KeyCode::H => Some(Message::SplitFocused(Axis::Horizontal)), KeyCode::W => Some(Message::CloseFocused), diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 8410f95c..5212a147 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -28,7 +28,7 @@ pub struct PaneGrid<'a, Message, Renderer> { modifier_keys: keyboard::ModifiersState, on_drag: Option Message>>, on_resize: Option Message>>, - on_key_press: Option Option>>, + on_key_press: Option Option>>, } impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer> { @@ -129,7 +129,7 @@ impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer> { pub fn on_key_press( mut self, - f: impl Fn(keyboard::KeyCode) -> Option + 'static, + f: impl Fn(KeyPressEvent) -> Option + 'static, ) -> Self { self.on_key_press = Some(Box::new(f)); self @@ -186,6 +186,12 @@ pub struct ResizeEvent { pub ratio: f32, } +#[derive(Debug, Clone, Copy)] +pub struct KeyPressEvent { + pub key_code: keyboard::KeyCode, + pub modifiers: keyboard::ModifiersState, +} + impl<'a, Message, Renderer> Widget for PaneGrid<'a, Message, Renderer> where @@ -369,7 +375,12 @@ where if state == ButtonState::Pressed { if let Some(_) = self.state.idle_pane() { if modifiers == self.modifier_keys { - if let Some(message) = on_key_press(key_code) { + if let Some(message) = + on_key_press(KeyPressEvent { + key_code, + modifiers, + }) + { messages.push(message); } } -- cgit