initial PDF support

This commit is contained in:
Sebastian K 2020-07-04 18:08:04 +03:00
parent 3785fcf413
commit fa47d5a181
3 changed files with 19 additions and 20 deletions

19
Cargo.lock generated
View File

@ -950,7 +950,7 @@ checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
[[package]]
name = "font"
version = "0.1.0"
source = "git+https://github.com/pdf-rs/font/#6047031ce86dd5fb075c4225f7deeaaeb596918f"
source = "git+https://github.com/pdf-rs/font/#17d3c1d19d937440c760c79be373798326f02bcb"
dependencies = [
"brotli-decompressor",
"decorum",
@ -960,7 +960,6 @@ dependencies = [
"itertools 0.8.2",
"log",
"nom",
"pathfinder_builder",
"pathfinder_color",
"pathfinder_content",
"pathfinder_geometry",
@ -2011,15 +2010,6 @@ dependencies = [
"pathfinder_gpu",
]
[[package]]
name = "pathfinder_builder"
version = "0.1.0"
source = "git+https://github.com/s3bk/pathfinder/#6197446b8c7816227ebcd6d81009df357b9f0c0b"
dependencies = [
"pathfinder_content",
"pathfinder_geometry",
]
[[package]]
name = "pathfinder_c"
version = "0.1.0"
@ -2323,7 +2313,7 @@ dependencies = [
[[package]]
name = "pdf"
version = "0.7.0"
source = "git+https://github.com/pdf-rs/pdf#f7b0acb4ac8c37cb0eb37dfa3ebeedb5b431cc8c"
source = "git+https://github.com/pdf-rs/pdf#2beb20e6396722a1a6771d0caabc4fe6e05b671c"
dependencies = [
"byteorder",
"chrono",
@ -2345,7 +2335,7 @@ dependencies = [
[[package]]
name = "pdf_derive"
version = "0.1.19"
source = "git+https://github.com/pdf-rs/pdf#f7b0acb4ac8c37cb0eb37dfa3ebeedb5b431cc8c"
source = "git+https://github.com/pdf-rs/pdf#2beb20e6396722a1a6771d0caabc4fe6e05b671c"
dependencies = [
"quote 1.0.7",
"syn 1.0.33",
@ -2354,13 +2344,12 @@ dependencies = [
[[package]]
name = "pdf_render"
version = "0.1.0"
source = "git+https://github.com/pdf-rs/pdf#f7b0acb4ac8c37cb0eb37dfa3ebeedb5b431cc8c"
source = "git+https://github.com/pdf-rs/pdf#2beb20e6396722a1a6771d0caabc4fe6e05b671c"
dependencies = [
"encoding",
"font",
"itertools 0.9.0",
"log",
"pathfinder_builder",
"pathfinder_color",
"pathfinder_content",
"pathfinder_geometry",

View File

@ -69,3 +69,10 @@ default-members = [
[patch.crates-io]
pathfinder_geometry = { path = "geometry" }
pathfinder_simd = { path = "simd" }
[patch."https://github.com/servo/pathfinder"]
pathfinder_content = { path = "content" }
pathfinder_color = { path = "color" }
pathfinder_geometry = { path = "geometry" }
pathfinder_renderer = { path = "renderer" }
pathfinder_simd = { path = "simd" }

View File

@ -85,7 +85,11 @@ mod ui;
enum Content {
Svg(SvgTree),
Pdf(PdfFile<Vec<u8>>, PdfRenderCache, u32)
Pdf {
file: PdfFile<Vec<u8>>,
cache: PdfRenderCache,
page_nr: u32
}
}
pub struct DemoApp<W> where W: Window {
@ -765,7 +769,7 @@ impl Content {
let message = get_svg_building_message(&built_svg);
(built_svg.scene, message)
}
Content::Pdf(ref file, ref mut cache, page_nr) => {
Content::Pdf { ref file, ref mut cache, page_nr } => {
let page = file.get_page(page_nr).expect("no such page");
let (scene, _) = cache.render_page(file, &page).unwrap();
(scene, String::new())
@ -785,9 +789,8 @@ fn load_scene(resource_loader: &dyn ResourceLoader,
if let Ok(tree) = SvgTree::from_data(&data, &UsvgOptions::default()) {
Content::Svg(tree)
}
else if let Ok(pdf) = PdfFile::from_data(data) {
Content::Pdf(pdf, PdfRenderCache::new(), 0)
} else if let Ok(file) = PdfFile::from_data(data) {
Content::Pdf { file, cache: PdfRenderCache::new(), page_nr: 0 }
} else {
panic!("can't load data");
}