summaryrefslogtreecommitdiffstats
path: root/native/src/text.rs
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/text.rs')
-rw-r--r--native/src/text.rs31
1 files changed, 28 insertions, 3 deletions
diff --git a/native/src/text.rs b/native/src/text.rs
index f112a8f3..81419481 100644
--- a/native/src/text.rs
+++ b/native/src/text.rs
@@ -1,7 +1,5 @@
use crate::alignment;
-use crate::{Color, Point, Rectangle, Size};
-
-pub use iced_core::text::Hit;
+use crate::{Color, Point, Rectangle, Size, Vector};
#[derive(Debug, Clone, Copy)]
pub struct Text<'a, Font> {
@@ -14,6 +12,33 @@ pub struct Text<'a, Font> {
pub vertical_alignment: alignment::Vertical,
}
+/// The result of hit testing on text.
+#[derive(Debug, Clone, Copy, PartialEq)]
+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 {
+ /// Computes the cursor position corresponding to this [`HitTestResult`] .
+ pub fn cursor(self) -> usize {
+ match self {
+ Self::CharOffset(i) => i,
+ Self::NearestCharOffset(i, delta) => {
+ if delta.x > f32::EPSILON {
+ i + 1
+ } else {
+ i
+ }
+ }
+ }
+ }
+}
+
pub trait Renderer: crate::Renderer {
/// The font type used.
type Font: Default + Copy;