Implement textual hit testing

This commit is contained in:
Tom 2021-08-21 10:31:26 -07:00
parent 8333b8f88c
commit aa63841e2c
13 changed files with 341 additions and 75 deletions

View file

@ -1,7 +1,7 @@
//! Write some text for your users to read.
use crate::{
layout, Color, Element, Hasher, HorizontalAlignment, Layout, Length, Point,
Rectangle, Size, VerticalAlignment, Widget,
layout, Color, Element, Hasher, HitTestResult, HorizontalAlignment, Layout,
Length, Point, Rectangle, Size, VerticalAlignment, Widget,
};
use std::hash::Hash;
@ -179,6 +179,23 @@ pub trait Renderer: crate::Renderer {
bounds: Size,
) -> (f32, f32);
/// Tests whether the provided point is within the boundaries of [`Text`]
/// laid out with the given parameters, returning information about
/// the nearest character.
///
/// If nearest_only is true, the hit test does not consider whether the
/// the point is interior to any glyph bounds, returning only the character
/// with the nearest centeroid.
fn hit_test(
&self,
contents: &str,
size: f32,
font: Self::Font,
bounds: Size,
point: Point,
nearest_only: bool,
) -> HitTestResult;
/// Draws a [`Text`] fragment.
///
/// It receives: