use super::{outline_to_path, PathContourStart};
use crate::{
model::glyph::outline::PathSink,
tables::glyf::{PointCoord, PointFlags, PHANTOM_POINT_COUNT},
types::Point,
};
#[derive(Clone, Debug)]
pub struct OutlineRef<'a, C: PointCoord> {
pub(super) points: &'a [Point<C>],
pub(super) flags: &'a [PointFlags],
pub(super) contours: &'a [u16],
pub(super) phantom: [Point<C>; PHANTOM_POINT_COUNT],
}
impl<C: PointCoord> OutlineRef<'_, C> {
pub fn points(&self) -> &[Point<C>] {
self.points
}
pub fn flags(&self) -> &[PointFlags] {
self.flags
}
pub fn contours(&self) -> &[u16] {
self.contours
}
pub fn phantom_points(&self) -> &[Point<C>; PHANTOM_POINT_COUNT] {
&self.phantom
}
pub fn adjusted_lsb(&self) -> C {
self.phantom[0].x
}
pub fn adjusted_advance_width(&self) -> C {
self.phantom[1].x - self.phantom[0].x
}
#[must_use]
pub fn to_path(&self, start: PathContourStart, sink: &mut impl PathSink) -> bool {
outline_to_path(self.points, self.flags, self.contours, start, sink)
}
}