pub struct Layout {
pub sections: Vec<Section>,
pub content_rect: Rect,
pub font_size: f32,
}Expand description
A laid-out piece of variable text.
use pdfrum_doc::geom;
use pdfrum_doc::vt::{Config, Metrics, layout};
// Every character ten thousandths wide: the stub the layout assertions
// in this crate are written against.
let width = |_code: u32| 10;
let metrics = Metrics { width: &width, ascent: 1000, descent: -200 };
let config = Config {
plate: geom::rect(0.0, 0.0, 100.0, 40.0),
font_size: 10.0,
multi_line: true,
..Config::default()
};
let laid_out = layout("Hi", &config, &metrics);
assert_eq!(laid_out.sections.len(), 1);
// The extent is y-down; `content_rect_pdf` flips it back.
let _ = laid_out.content_rect_pdf(config.plate);Fields§
§sections: Vec<Section>The paragraphs.
content_rect: RectThe union of their extents, y-down.
font_size: f32The size actually used, which automatic sizing may have chosen.
Implementations§
Source§impl Layout
impl Layout
Sourcepub fn to_pdf(plate: Rect, x: f32, y: f32) -> (f32, f32)
pub fn to_pdf(plate: Rect, x: f32, y: f32) -> (f32, f32)
Converts an internal point to PDF’s y-up space.
use pdfrum_doc::geom;
use pdfrum_doc::vt::{Config, Metrics, layout};
// Every character ten thousandths wide: the stub the layout assertions
// in this crate are written against.
let width = |_code: u32| 10;
let metrics = Metrics { width: &width, ascent: 1000, descent: -200 };
let config = Config {
plate: geom::rect(0.0, 0.0, 100.0, 40.0),
font_size: 10.0,
multi_line: true,
..Config::default()
};
let laid_out = layout("Hi", &config, &metrics);
use pdfrum_doc::vt::Layout;
// Internal space is y-down from the plate's top-left corner.
assert_eq!(Layout::to_pdf(config.plate, 0.0, 0.0), (0.0, 40.0));Sourcepub fn content_rect_pdf(&self, plate: Rect) -> Rect
pub fn content_rect_pdf(&self, plate: Rect) -> Rect
The content rectangle in PDF’s y-up space.
use pdfrum_doc::geom;
use pdfrum_doc::vt::{Config, Metrics, layout};
// Every character ten thousandths wide: the stub the layout assertions
// in this crate are written against.
let width = |_code: u32| 10;
let metrics = Metrics { width: &width, ascent: 1000, descent: -200 };
let config = Config {
plate: geom::rect(0.0, 0.0, 100.0, 40.0),
font_size: 10.0,
multi_line: true,
..Config::default()
};
let laid_out = layout("Hi", &config, &metrics);
let rect = laid_out.content_rect_pdf(config.plate);
// Back in PDF's y-up space, so the top edge is above the bottom.
assert!(geom::top(rect) >= geom::bottom(rect));Sourcepub fn words(&self) -> impl Iterator<Item = (usize, usize, &Word)>
pub fn words(&self) -> impl Iterator<Item = (usize, usize, &Word)>
Every word in reading order, paired with the line it belongs to.
use pdfrum_doc::geom;
use pdfrum_doc::vt::{Config, Metrics, layout};
// Every character ten thousandths wide: the stub the layout assertions
// in this crate are written against.
let width = |_code: u32| 10;
let metrics = Metrics { width: &width, ascent: 1000, descent: -200 };
let config = Config {
plate: geom::rect(0.0, 0.0, 100.0, 40.0),
font_size: 10.0,
multi_line: true,
..Config::default()
};
let laid_out = layout("Hi", &config, &metrics);
// Reading order, each character paired with its section and line.
let chars: Vec<u32> = laid_out.words().map(|(_, _, word)| word.ch).collect();
assert_eq!(chars, [u32::from('H'), u32::from('i')]);Trait Implementations§
impl StructuralPartialEq for Layout
Auto Trait Implementations§
impl Freeze for Layout
impl RefUnwindSafe for Layout
impl Send for Layout
impl Sync for Layout
impl Unpin for Layout
impl UnsafeUnpin for Layout
impl UnwindSafe for Layout
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more