diff options
| author | 2019-10-31 03:50:40 +0100 | |
|---|---|---|
| committer | 2019-10-31 03:50:40 +0100 | |
| commit | 51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0 (patch) | |
| tree | d6532ec8c98b80fa72e3b78a556ccf1b26b33c02 /native/src | |
| parent | 374b54c3ecbe39a24cfa6b8eccb9b2a2098f65c7 (diff) | |
| download | iced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.tar.gz iced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.tar.bz2 iced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.zip  | |
Implement cursor movement in `TextInput`
Diffstat (limited to '')
| -rw-r--r-- | native/src/widget/text_input.rs | 57 | 
1 files changed, 42 insertions, 15 deletions
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 976ca995..d9837b61 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -45,28 +45,55 @@ where              Event::Keyboard(keyboard::Event::CharacterReceived(c))                  if self.state.is_focused && !c.is_control() =>              { -                self.value.push(c); +                let cursor_position = self.state.cursor_position(&self.value); -                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(); +                self.value.insert(cursor_position, c); +                self.state.move_cursor_right(&self.value); -                let message = (self.on_change)(self.value.clone()); +                let message = (self.on_change)(self.value.to_string());                  messages.push(message);              }              Event::Keyboard(keyboard::Event::Input { -                key_code: keyboard::KeyCode::Enter, +                key_code,                  state: ButtonState::Pressed, -            }) => { -                if let Some(on_submit) = self.on_submit.clone() { -                    messages.push(on_submit); +            }) if self.state.is_focused => match key_code { +                keyboard::KeyCode::Enter => { +                    if let Some(on_submit) = self.on_submit.clone() { +                        messages.push(on_submit); +                    }                  } -            } +                keyboard::KeyCode::Backspace => { +                    let cursor_position = +                        self.state.cursor_position(&self.value); + +                    if cursor_position > 0 { +                        self.state.move_cursor_left(&self.value); + +                        let _ = self.value.remove(cursor_position - 1); + +                        let message = (self.on_change)(self.value.to_string()); +                        messages.push(message); +                    } +                } +                keyboard::KeyCode::Delete => { +                    let cursor_position = +                        self.state.cursor_position(&self.value); + +                    if cursor_position < self.value.len() { +                        let _ = self.value.remove(cursor_position); + +                        let message = (self.on_change)(self.value.to_string()); +                        messages.push(message); +                    } +                } +                keyboard::KeyCode::Left => { +                    self.state.move_cursor_left(&self.value); +                } +                keyboard::KeyCode::Right => { +                    self.state.move_cursor_right(&self.value); +                } +                _ => {} +            },              _ => {}          }      }  | 
