diff options
Diffstat (limited to '')
| -rw-r--r-- | native/src/text.rs | 13 | ||||
| -rw-r--r-- | native/src/widget/text_input.rs | 15 | 
2 files changed, 13 insertions, 15 deletions
| diff --git a/native/src/text.rs b/native/src/text.rs index 1bbd36cc..4c72abc3 100644 --- a/native/src/text.rs +++ b/native/src/text.rs @@ -1,6 +1,6 @@  //! Draw and interact with text.  use crate::alignment; -use crate::{Color, Point, Rectangle, Size, Vector}; +use crate::{Color, Point, Rectangle, Size};  use std::borrow::Cow; @@ -34,10 +34,6 @@ pub struct Text<'a, Font> {  pub enum Hit {      /// The point was within the bounds of the returned character index.      CharOffset(usize), -    /// The provided point was not within the bounds of a glyph. The index -    /// of the character with the closest centeroid position is returned, -    /// as well as its delta. -    NearestCharOffset(usize, Vector),  }  impl Hit { @@ -45,13 +41,6 @@ impl Hit {      pub fn cursor(self) -> usize {          match self {              Self::CharOffset(i) => i, -            Self::NearestCharOffset(i, delta) => { -                if delta.x > f32::EPSILON { -                    i + 1 -                } else { -                    i -                } -            }          }      }  } diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index f51416e1..65a9bd3b 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -1193,17 +1193,26 @@ where      let size = size.unwrap_or_else(|| renderer.default_size());      let offset = offset(renderer, text_bounds, font, size, value, state); +    let value = value.to_string(); -    renderer +    let char_offset = renderer          .hit_test( -            &value.to_string(), +            &value,              size,              font,              Size::INFINITY,              Point::new(x + offset, text_bounds.height / 2.0),              true,          ) -        .map(text::Hit::cursor) +        .map(text::Hit::cursor)?; + +    Some( +        unicode_segmentation::UnicodeSegmentation::graphemes( +            &value[..char_offset], +            true, +        ) +        .count(), +    )  }  const CURSOR_BLINK_INTERVAL_MILLIS: u128 = 500; | 
