diff options
| author | Martin <mhaug@live.de> | 2021-06-18 13:01:55 +0200 |
|---|---|---|
| committer | Martin <mhaug@live.de> | 2021-06-18 13:01:55 +0200 |
| commit | 80a9b300d1acb8821ac0600aad3d2135ad9587bd (patch) | |
| tree | 6626ba8891fa4db4e3a1cb13f7f4b27fc05989bf /src/export | |
| parent | 7db78d83bedf62adea0d715c9a2a179ce23a1a48 (diff) | |
Ref count the frames
Diffstat (limited to 'src/export')
| -rw-r--r-- | src/export/pdf.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/export/pdf.rs b/src/export/pdf.rs index f939d8ab..0439702f 100644 --- a/src/export/pdf.rs +++ b/src/export/pdf.rs @@ -3,6 +3,7 @@ use std::cmp::Eq; use std::collections::HashMap; use std::hash::Hash; +use std::rc::Rc; use image::{DynamicImage, GenericImageView, ImageFormat, ImageResult, Rgba}; use miniz_oxide::deflate; @@ -26,13 +27,13 @@ use crate::layout::{Element, Fill, Frame, Shape}; /// can be included in the PDF. /// /// Returns the raw bytes making up the PDF document. -pub fn pdf(cache: &Cache, frames: &[Frame]) -> Vec<u8> { +pub fn pdf(cache: &Cache, frames: &[Rc<Frame>]) -> Vec<u8> { PdfExporter::new(cache, frames).write() } struct PdfExporter<'a> { writer: PdfWriter, - frames: &'a [Frame], + frames: &'a [Rc<Frame>], cache: &'a Cache, refs: Refs, fonts: Remapper<FaceId>, @@ -40,7 +41,7 @@ struct PdfExporter<'a> { } impl<'a> PdfExporter<'a> { - fn new(cache: &'a Cache, frames: &'a [Frame]) -> Self { + fn new(cache: &'a Cache, frames: &'a [Rc<Frame>]) -> Self { let mut writer = PdfWriter::new(1, 7); writer.set_indent(2); @@ -49,7 +50,7 @@ impl<'a> PdfExporter<'a> { let mut alpha_masks = 0; for frame in frames { - for (_, element) in &frame.elements { + for (_, element) in frame.elements() { match *element { Element::Text(ref shaped) => fonts.insert(shaped.face_id), Element::Geometry(_, _) => {} @@ -143,7 +144,7 @@ impl<'a> PdfExporter<'a> { let mut size = Length::zero(); let mut fill: Option<Fill> = None; - for (pos, element) in &page.elements { + for (pos, element) in page.elements() { let x = pos.x.to_pt() as f32; let y = (page.size.height - pos.y).to_pt() as f32; @@ -496,12 +497,12 @@ struct FontRefs { impl Refs { const OBJECTS_PER_FONT: usize = 5; - fn new(frames: usize, fonts: usize, images: usize, alpha_masks: usize) -> Self { + fn new(pages: usize, fonts: usize, images: usize, alpha_masks: usize) -> Self { let catalog = 1; let page_tree = catalog + 1; let pages_start = page_tree + 1; - let contents_start = pages_start + frames as i32; - let fonts_start = contents_start + frames as i32; + let contents_start = pages_start + pages as i32; + let fonts_start = contents_start + pages as i32; let images_start = fonts_start + (Self::OBJECTS_PER_FONT * fonts) as i32; let alpha_masks_start = images_start + images as i32; let end = alpha_masks_start + alpha_masks as i32; |
