summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/src/widget/text_input.rs11
-rw-r--r--native/src/widget/text_input.rs8
2 files changed, 19 insertions, 0 deletions
diff --git a/core/src/widget/text_input.rs b/core/src/widget/text_input.rs
index 9c7f4bc8..c4ca0abc 100644
--- a/core/src/widget/text_input.rs
+++ b/core/src/widget/text_input.rs
@@ -91,6 +91,13 @@ impl State {
Self::default()
}
+ pub fn focused(value: &str) -> Self {
+ Self {
+ is_focused: true,
+ cursor_position: Value::new(value).len(),
+ }
+ }
+
pub fn move_cursor_right(&mut self, value: &Value) {
let current = self.cursor_position(value);
@@ -107,6 +114,10 @@ impl State {
}
}
+ pub fn move_cursor_to_end(&mut self, value: &Value) {
+ self.cursor_position = value.len();
+ }
+
pub fn cursor_position(&self, value: &Value) -> usize {
self.cursor_position.min(value.len())
}
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs
index 7e81e257..35e10000 100644
--- a/native/src/widget/text_input.rs
+++ b/native/src/widget/text_input.rs
@@ -11,6 +11,10 @@ where
Renderer: self::Renderer,
Message: Clone + std::fmt::Debug,
{
+ fn width(&self) -> Length {
+ self.width
+ }
+
fn layout(
&self,
renderer: &Renderer,
@@ -46,6 +50,10 @@ where
}) => {
self.state.is_focused =
layout.bounds().contains(cursor_position);
+
+ if self.state.cursor_position(&self.value) == 0 {
+ self.state.move_cursor_to_end(&self.value);
+ }
}
Event::Keyboard(keyboard::Event::CharacterReceived(c))
if self.state.is_focused && !c.is_control() =>