summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-31 03:50:40 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2019-10-31 03:50:40 +0100
commit51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0 (patch)
treed6532ec8c98b80fa72e3b78a556ccf1b26b33c02 /native
parent374b54c3ecbe39a24cfa6b8eccb9b2a2098f65c7 (diff)
downloadiced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.tar.gz
iced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.tar.bz2
iced-51a0e99097f9ecb63eeb7f2ea7c38089977eb4d0.zip
Implement cursor movement in `TextInput`
Diffstat (limited to 'native')
-rw-r--r--native/src/widget/text_input.rs57
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);
+ }
+ _ => {}
+ },
_ => {}
}
}