diff options
Diffstat (limited to 'native/src/widget/text_input.rs')
-rw-r--r-- | native/src/widget/text_input.rs | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index f1a7a1a0..84d171be 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -268,41 +268,42 @@ where match click.kind() { click::Kind::Single => { - if target > 0.0 { + let position = if target > 0.0 { let value = if self.is_secure { self.value.secure() } else { self.value.clone() }; - let position = renderer.find_cursor_position( + renderer.find_cursor_position( text_layout.bounds(), self.font, self.size, &value, &self.state, target, - ); - - self.state.cursor.move_to(position); + ) } else { - self.state.cursor.move_to(0); - } + None + }; + self.state.cursor.move_to(position.unwrap_or(0)); self.state.is_dragging = true; } click::Kind::Double => { if self.is_secure { self.state.cursor.select_all(&self.value); } else { - let position = renderer.find_cursor_position( - text_layout.bounds(), - self.font, - self.size, - &self.value, - &self.state, - target, - ); + let position = renderer + .find_cursor_position( + text_layout.bounds(), + self.font, + self.size, + &self.value, + &self.state, + target, + ) + .unwrap_or(0); self.state.cursor.select_range( self.value.previous_start_of_word(position), @@ -341,14 +342,16 @@ where self.value.clone() }; - let position = renderer.find_cursor_position( - text_layout.bounds(), - self.font, - self.size, - &value, - &self.state, - target, - ); + let position = renderer + .find_cursor_position( + text_layout.bounds(), + self.font, + self.size, + &value, + &self.state, + target, + ) + .unwrap_or(0); self.state.cursor.select_range( self.state.cursor.start(&value), @@ -702,7 +705,7 @@ pub trait Renderer: text::Renderer + Sized { value: &Value, state: &State, x: f32, - ) -> usize { + ) -> Option<usize> { let size = size.unwrap_or(self.default_size()); let offset = self.offset(text_bounds, font, size, &value, &state); @@ -715,7 +718,7 @@ pub trait Renderer: text::Renderer + Sized { Point::new(x + offset, text_bounds.height / 2.0), true, ) - .cursor() + .map(text::Hit::cursor) } } |