use crate::alignment; use crate::{Color, Point, Rectangle, Size}; pub use iced_core::text::Hit; #[derive(Debug, Clone, Copy)] pub struct Text<'a, Font> { pub content: &'a str, pub bounds: Rectangle, pub size: f32, pub color: Color, pub font: Font, pub horizontal_alignment: alignment::Horizontal, pub vertical_alignment: alignment::Vertical, } pub trait Renderer: crate::Renderer { /// The font type used. type Font: Default + Copy; /// The icon font of the backend. const ICON_FONT: Self::Font; /// The `char` representing a ✔ icon in the [`ICON_FONT`]. /// /// [`ICON_FONT`]: Self::ICON_FONT const CHECKMARK_ICON: char; /// The `char` representing a ▼ icon in the built-in [`ICON_FONT`]. /// /// [`ICON_FONT`]: Self::ICON_FONT const ARROW_DOWN_ICON: char; /// Returns the default size of [`Text`]. fn default_size(&self) -> u16; /// Measures the text in the given bounds and returns the minimum boundaries /// that can fit the contents. fn measure( &self, content: &str, size: u16, font: Self::Font, bounds: Size, ) -> (f32, f32); fn measure_width(&self, content: &str, size: u16, font: Self::Font) -> f32 { let (width, _) = self.measure(content, size, font, Size::INFINITY); width } /// 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, ) -> Option; fn fill_text(&mut self, text: Text<'_, Self::Font>); }