diff options
author | 2021-09-15 15:50:10 +0700 | |
---|---|---|
committer | 2021-09-15 15:50:10 +0700 | |
commit | 5870cbb312ec5de1219b6983e09e460419d95912 (patch) | |
tree | add25c986ba0582628d921e45c2eae4006e19ee4 /native/src/widget/text_input.rs | |
parent | 93fec8d273ef8305e1c2456abe0c8ecd7a9d9407 (diff) | |
parent | c914b2a05be2c33ec936f63efd25daaf2b4c4739 (diff) | |
download | iced-5870cbb312ec5de1219b6983e09e460419d95912.tar.gz iced-5870cbb312ec5de1219b6983e09e460419d95912.tar.bz2 iced-5870cbb312ec5de1219b6983e09e460419d95912.zip |
Merge pull request #1046 from iced-rs/fix/empty-text-hit-test
Use `Option` to encode empty text case in hit test methods
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) } } |