diff options
author | 2019-10-30 05:00:12 +0100 | |
---|---|---|
committer | 2019-10-30 05:00:12 +0100 | |
commit | fedcab6f4f5ffd3a6dfffe7dd41c58df2e314099 (patch) | |
tree | 171779a050b783dde926142027ae805a59366ab3 /native | |
parent | 63cd0fd8eb1eebae8de7d5141c846fc4ea55d702 (diff) | |
download | iced-fedcab6f4f5ffd3a6dfffe7dd41c58df2e314099.tar.gz iced-fedcab6f4f5ffd3a6dfffe7dd41c58df2e314099.tar.bz2 iced-fedcab6f4f5ffd3a6dfffe7dd41c58df2e314099.zip |
Handle some `TextInput` events
Diffstat (limited to 'native')
-rw-r--r-- | native/src/widget/text_input.rs | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 0cb949d1..976ca995 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -1,4 +1,5 @@ use crate::{ + input::{keyboard, mouse, ButtonState}, Element, Event, Hasher, Layout, Length, Node, Point, Rectangle, Style, Widget, }; @@ -27,12 +28,47 @@ where fn on_event( &mut self, - _event: Event, - _layout: Layout<'_>, - _cursor_position: Point, - _messages: &mut Vec<Message>, + event: Event, + layout: Layout<'_>, + cursor_position: Point, + messages: &mut Vec<Message>, _renderer: &Renderer, ) { + match event { + Event::Mouse(mouse::Event::Input { + button: mouse::Button::Left, + state: ButtonState::Pressed, + }) => { + self.state.is_focused = + layout.bounds().contains(cursor_position); + } + Event::Keyboard(keyboard::Event::CharacterReceived(c)) + if self.state.is_focused && !c.is_control() => + { + self.value.push(c); + + let message = (self.on_change)(self.value.clone()); + messages.push(message); + } + Event::Keyboard(keyboard::Event::Input { + key_code: keyboard::KeyCode::Backspace, + state: ButtonState::Pressed, + }) => { + let _ = self.value.pop(); + + let message = (self.on_change)(self.value.clone()); + messages.push(message); + } + Event::Keyboard(keyboard::Event::Input { + key_code: keyboard::KeyCode::Enter, + state: ButtonState::Pressed, + }) => { + if let Some(on_submit) = self.on_submit.clone() { + messages.push(on_submit); + } + } + _ => {} + } } fn draw( @@ -78,7 +114,9 @@ where Renderer: 'static + self::Renderer, Message: 'static + Clone + std::fmt::Debug, { - fn from(button: TextInput<'a, Message>) -> Element<'a, Message, Renderer> { - Element::new(button) + fn from( + text_input: TextInput<'a, Message>, + ) -> Element<'a, Message, Renderer> { + Element::new(text_input) } } |