hayro_interpret/
device.rs

1use crate::font::Glyph;
2use crate::soft_mask::SoftMask;
3use crate::{ClipPath, Image};
4use crate::{GlyphDrawMode, Paint, PathDrawMode};
5use kurbo::{Affine, BezPath};
6
7/// A trait for a device that can be used to process PDF drawing instructions.
8pub trait Device<'a> {
9    /// Set the properties for future stroking operations.
10    /// Set a soft mask to be used for future drawing instructions.
11    fn set_soft_mask(&mut self, mask: Option<SoftMask<'a>>);
12    /// Draw a path.
13    fn draw_path(
14        &mut self,
15        path: &BezPath,
16        transform: Affine,
17        paint: &Paint<'a>,
18        draw_mode: &PathDrawMode,
19    );
20    /// Push a new clip path to the clip stack.
21    fn push_clip_path(&mut self, clip_path: &ClipPath);
22    /// Push a new transparency group to the blend stack.
23    fn push_transparency_group(&mut self, opacity: f32, mask: Option<SoftMask<'a>>);
24    /// Draw a glyph.
25    fn draw_glyph(
26        &mut self,
27        glyph: &Glyph<'a>,
28        transform: Affine,
29        glyph_transform: Affine,
30        paint: &Paint<'a>,
31        // TODO: Move this into outline glyph.
32        draw_mode: &GlyphDrawMode,
33    );
34    /// Draw an image.
35    fn draw_image(&mut self, image: Image<'a, '_>, transform: Affine);
36    /// Pop the last clip path from the clip stack.
37    fn pop_clip_path(&mut self);
38    /// Pop the last transparency group from the blend stack.
39    fn pop_transparency_group(&mut self);
40}