diff options
Diffstat (limited to 'native')
-rw-r--r-- | native/src/renderer/null.rs | 6 | ||||
-rw-r--r-- | native/src/widget/text.rs | 2 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 53 |
3 files changed, 32 insertions, 29 deletions
diff --git a/native/src/renderer/null.rs b/native/src/renderer/null.rs index b1a26c41..2c47ddf2 100644 --- a/native/src/renderer/null.rs +++ b/native/src/renderer/null.rs @@ -2,7 +2,7 @@ use crate::{ button, checkbox, column, container, pane_grid, progress_bar, radio, row, scrollable, slider, text, text_input, toggler, Color, Element, Font, HorizontalAlignment, Layout, Padding, Point, Rectangle, Renderer, Size, - Vector, VerticalAlignment, + VerticalAlignment, }; /// A renderer that does nothing. @@ -75,8 +75,8 @@ impl text::Renderer for Null { _bounds: Size, _point: Point, _nearest_only: bool, - ) -> text::Hit { - text::Hit::NearestCharOffset(0, Vector::new(0., 0.)) + ) -> Option<text::Hit> { + None } fn draw( diff --git a/native/src/widget/text.rs b/native/src/widget/text.rs index adf6a74f..d8bc0a00 100644 --- a/native/src/widget/text.rs +++ b/native/src/widget/text.rs @@ -196,7 +196,7 @@ pub trait Renderer: crate::Renderer { bounds: Size, point: Point, nearest_only: bool, - ) -> Hit; + ) -> Option<Hit>; /// Draws a [`Text`] fragment. /// 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) } } |