2022-10-25 12:52:46 -06:00
|
|
|
// SPDX-License-Identifier: MIT OR Apache-2.0
|
|
|
|
|
|
2022-11-08 08:43:27 -07:00
|
|
|
#[cfg(not(feature = "std"))]
|
|
|
|
|
use alloc::vec::Vec;
|
|
|
|
|
|
2022-10-26 14:16:48 -06:00
|
|
|
use crate::{CacheKey, Color};
|
2022-10-25 12:52:46 -06:00
|
|
|
|
|
|
|
|
/// A laid out glyph
|
2022-10-27 10:29:19 -06:00
|
|
|
#[derive(Debug)]
|
2022-10-25 12:52:46 -06:00
|
|
|
pub struct LayoutGlyph {
|
|
|
|
|
/// Start index of cluster in original line
|
|
|
|
|
pub start: usize,
|
|
|
|
|
/// End index of cluster in original line
|
|
|
|
|
pub end: usize,
|
|
|
|
|
/// X offset of hitbox
|
|
|
|
|
pub x: f32,
|
|
|
|
|
/// width of hitbox
|
|
|
|
|
pub w: f32,
|
2022-12-20 13:00:29 -07:00
|
|
|
/// Unicode BiDi embedding level, character is left-to-right if `level` is divisible by 2
|
2022-12-16 16:49:29 -07:00
|
|
|
pub level: unicode_bidi::Level,
|
2022-10-25 12:52:46 -06:00
|
|
|
/// Cache key, see [CacheKey]
|
|
|
|
|
pub cache_key: CacheKey,
|
2022-12-16 19:36:43 +01:00
|
|
|
/// X offset in line
|
|
|
|
|
///
|
2022-12-16 19:39:24 +01:00
|
|
|
/// If you are dealing with physical coordinates, you will want to use [`Self::x_int`]
|
2022-12-16 19:36:43 +01:00
|
|
|
/// together with [`CacheKey::x_bin`] instead. This will ensure the best alignment of the
|
|
|
|
|
/// rasterized glyphs with the pixel grid.
|
|
|
|
|
///
|
|
|
|
|
/// This offset is useful when you are dealing with logical units and you do not care or
|
|
|
|
|
/// cannot guarantee pixel grid alignment. For instance, when you want to use the glyphs
|
|
|
|
|
/// for vectorial text, apply linear transformations to the layout, etc.
|
2022-12-15 05:04:39 +01:00
|
|
|
pub x_offset: f32,
|
2022-12-16 19:36:43 +01:00
|
|
|
/// Y offset in line
|
|
|
|
|
///
|
2022-12-16 19:39:24 +01:00
|
|
|
/// If you are dealing with physical coordinates, you will want to use [`Self::y_int`]
|
2022-12-16 19:36:43 +01:00
|
|
|
/// together with [`CacheKey::y_bin`] instead. This will ensure the best alignment of the
|
|
|
|
|
/// rasterized glyphs with the pixel grid.
|
|
|
|
|
///
|
|
|
|
|
/// This offset is useful when you are dealing with logical units and you do not care or
|
|
|
|
|
/// cannot guarantee pixel grid alignment. For instance, when you want to use the glyphs
|
|
|
|
|
/// for vectorial text, apply linear transformations to the layout, etc.
|
2022-12-15 05:04:39 +01:00
|
|
|
pub y_offset: f32,
|
2022-10-25 12:52:46 -06:00
|
|
|
/// Integer component of X offset in line
|
|
|
|
|
pub x_int: i32,
|
|
|
|
|
/// Integer component of Y offset in line
|
|
|
|
|
pub y_int: i32,
|
2022-10-26 14:16:48 -06:00
|
|
|
/// Optional color override
|
|
|
|
|
pub color_opt: Option<Color>,
|
2022-12-14 09:19:03 -07:00
|
|
|
/// Metadata from `Attrs`
|
|
|
|
|
pub metadata: usize,
|
2022-10-25 12:52:46 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// A line of laid out glyphs
|
|
|
|
|
pub struct LayoutLine {
|
2022-12-15 04:59:31 +01:00
|
|
|
/// Width of the line
|
|
|
|
|
pub w: f32,
|
2022-10-25 12:52:46 -06:00
|
|
|
/// Glyphs in line
|
|
|
|
|
pub glyphs: Vec<LayoutGlyph>,
|
|
|
|
|
}
|