summaryrefslogtreecommitdiffstats
path: root/core/src/text.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/text.rs')
-rw-r--r--core/src/text.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/core/src/text.rs b/core/src/text.rs
new file mode 100644
index 00000000..ded22eef
--- /dev/null
+++ b/core/src/text.rs
@@ -0,0 +1,29 @@
+//! Draw and interact with text.
+use crate::Vector;
+
+/// 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
+ }
+ }
+ }
+ }
+}