Introduce first-class text module in iced_native
This commit is contained in:
parent
0aafcde0ef
commit
b3a01973c6
16 changed files with 87 additions and 88 deletions
|
|
@ -1,5 +1,5 @@
|
|||
use crate::renderer::{self, Renderer};
|
||||
use crate::widget::text;
|
||||
use crate::text::{self, Text};
|
||||
use crate::{Font, Point, Rectangle, Size, Vector};
|
||||
|
||||
/// A renderer that does nothing.
|
||||
|
|
@ -30,7 +30,7 @@ impl Renderer for Null {
|
|||
fn fill_rectangle(&mut self, _quad: renderer::Quad) {}
|
||||
}
|
||||
|
||||
impl renderer::Text for Null {
|
||||
impl text::Renderer for Null {
|
||||
type Font = Font;
|
||||
|
||||
const ICON_FONT: Font = Font::Default;
|
||||
|
|
@ -63,5 +63,5 @@ impl renderer::Text for Null {
|
|||
None
|
||||
}
|
||||
|
||||
fn fill_text(&mut self, _text: renderer::text::Section<'_, Self::Font>) {}
|
||||
fn fill_text(&mut self, _text: Text<'_, Self::Font>) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,71 +0,0 @@
|
|||
use crate::alignment;
|
||||
use crate::{Color, Point, Rectangle, Renderer, Size};
|
||||
|
||||
pub use crate::widget::text::Hit;
|
||||
|
||||
pub trait Text: 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<Hit>;
|
||||
|
||||
fn fill_text(&mut self, section: Section<'_, Self::Font>);
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct Section<'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,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue