Use newer dependency versions and different poppler library

This commit is contained in:
Julian Mutter 2023-10-09 20:50:33 +02:00
parent 8f7df7cdaa
commit a5a3783029
3 changed files with 108 additions and 84 deletions

154
Cargo.lock generated
View File

@ -64,28 +64,29 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bitflags"
version = "1.3.2"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "cairo-rs"
version = "0.15.12"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
checksum = "1c0466dfa8c0ee78deef390c274ad756801e0a6dbb86c5ef0924a298c5761c4d"
dependencies = [
"bitflags",
"cairo-sys-rs",
"glib",
"libc",
"once_cell",
"thiserror",
]
[[package]]
name = "cairo-sys-rs"
version = "0.15.1"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
dependencies = [
"glib-sys",
"libc",
@ -196,6 +197,17 @@ version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
[[package]]
name = "futures-macro"
version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.37",
]
[[package]]
name = "futures-task"
version = "0.3.28"
@ -209,6 +221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
dependencies = [
"futures-core",
"futures-macro",
"futures-task",
"pin-project-lite",
"pin-utils",
@ -217,22 +230,22 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
version = "0.15.11"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3"
dependencies = [
"bitflags",
"gdk-pixbuf-sys",
"gio",
"glib",
"libc",
"once_cell",
]
[[package]]
name = "gdk-pixbuf-sys"
version = "0.15.10"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
dependencies = [
"gio-sys",
"glib-sys",
@ -243,11 +256,10 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.4.8"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabb7cf843c26b085a5d68abb95d0c0bf27a9ae2eeff9c4adb503a1eb580876"
checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6"
dependencies = [
"bitflags",
"cairo-rs",
"gdk-pixbuf",
"gdk4-sys",
@ -259,9 +271,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
version = "0.4.8"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efe7dcb44f5c00aeabff3f69abfc5673de46559070f89bd3fbb7b66485d9cef2"
checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -276,26 +288,28 @@ dependencies = [
[[package]]
name = "gio"
version = "0.15.12"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
checksum = "57052f84e8e5999b258e8adf8f5f2af0ac69033864936b8b6838321db2f759b1"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"gio-sys",
"glib",
"libc",
"once_cell",
"pin-project-lite",
"smallvec",
"thiserror",
]
[[package]]
name = "gio-sys"
version = "0.15.10"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
dependencies = [
"glib-sys",
"gobject-sys",
@ -306,19 +320,22 @@ dependencies = [
[[package]]
name = "glib"
version = "0.15.12"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
checksum = "1c316afb01ce8067c5eaab1fc4f2cd47dc21ce7b6296358605e2ffab23ccbd19"
dependencies = [
"bitflags",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
"futures-util",
"gio-sys",
"glib-macros",
"glib-sys",
"gobject-sys",
"libc",
"memchr",
"once_cell",
"smallvec",
"thiserror",
@ -326,24 +343,23 @@ dependencies = [
[[package]]
name = "glib-macros"
version = "0.15.13"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
checksum = "f8da903822b136d42360518653fcf154455defc437d3e7a81475bf9a95ff1e47"
dependencies = [
"anyhow",
"heck",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 1.0.109",
"syn 2.0.37",
]
[[package]]
name = "glib-sys"
version = "0.15.10"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
dependencies = [
"libc",
"system-deps",
@ -351,9 +367,9 @@ dependencies = [
[[package]]
name = "gobject-sys"
version = "0.15.10"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
dependencies = [
"glib-sys",
"libc",
@ -362,9 +378,9 @@ dependencies = [
[[package]]
name = "graphene-rs"
version = "0.15.1"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401"
dependencies = [
"glib",
"graphene-sys",
@ -373,9 +389,9 @@ dependencies = [
[[package]]
name = "graphene-sys"
version = "0.15.10"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa691fc7337ba1df599afb55c3bcb85c04f1b3f17362570e9bb0ff0d1bc3028a"
checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59"
dependencies = [
"glib-sys",
"libc",
@ -385,11 +401,10 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.4.8"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05e9020d333280b3aa38d496495bfa9b50712eebf1ad63f0ec5bcddb5eb61be4"
checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e"
dependencies = [
"bitflags",
"cairo-rs",
"gdk4",
"glib",
@ -401,9 +416,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.4.8"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7add39ccf60078508c838643a2dcc91f045c46ed63b5ea6ab701b2e25bda3fea"
checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@ -417,11 +432,10 @@ dependencies = [
[[package]]
name = "gtk4"
version = "0.4.9"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e8ae5aef2793bc3551b5e5e3fa062a5de54bb1eccf10dfa4effe9e4384fbbbc"
checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842"
dependencies = [
"bitflags",
"cairo-rs",
"field-offset",
"futures-channel",
@ -434,30 +448,28 @@ dependencies = [
"gtk4-macros",
"gtk4-sys",
"libc",
"once_cell",
"pango",
]
[[package]]
name = "gtk4-macros"
version = "0.4.10"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6aba0b544e91a753068e279e99d34e9624b8cfd26282167024c8a5773b8a826c"
checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
dependencies = [
"anyhow",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2",
"quick-xml",
"quote",
"syn 1.0.109",
]
[[package]]
name = "gtk4-sys"
version = "0.4.8"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bc8006eea634b7c72da3ff79e24606e45f21b3b832a3c5a1f543f5f97eb0f63"
checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -525,7 +537,7 @@ dependencies = [
"glib",
"glib-macros",
"gtk4",
"poppler",
"poppler-rs",
]
[[package]]
@ -536,11 +548,11 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]]
name = "pango"
version = "0.15.10"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1"
dependencies = [
"bitflags",
"gio",
"glib",
"libc",
"once_cell",
@ -549,9 +561,9 @@ dependencies = [
[[package]]
name = "pango-sys"
version = "0.15.10"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
dependencies = [
"glib-sys",
"gobject-sys",
@ -578,13 +590,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "poppler"
version = "0.3.2"
name = "poppler-rs"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e4d5fb5148fbfe436811ca4de5e10176c4ae953f5592982a1c3e74a88e7c20e"
checksum = "8eeee26af64d7c1bfdb436d831fb78e65a325ade17f380e6bee7af2bc9859b8e"
dependencies = [
"cairo-rs",
"gio",
"glib",
"libc",
"poppler-sys-rs",
]
[[package]]
name = "poppler-sys-rs"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "568f80975a5d4270c97bbfd6283f873b2204c92b67b803237c2e705fde4362a1"
dependencies = [
"cairo-sys-rs",
"gio-sys",
"glib-sys",
"gobject-sys",
"libc",
"system-deps",
]
[[package]]
@ -630,15 +659,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "quick-xml"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8533f14c8382aaad0d592c812ac3b826162128b65662331e1127b45c3d18536b"
dependencies = [
"memchr",
]
[[package]]
name = "quote"
version = "1.0.33"

View File

@ -4,10 +4,10 @@ version = "0.1.0"
edition = "2021"
[dependencies]
poppler = "0.3.2"
cairo-rs = "0.15.12"
glib-macros = "0.15.11"
gio = "0.15.12"
glib = "0.15.12"
gtk4 = "0.4.8"
poppler-rs = "0.22"
cairo-rs = "0.18.2"
glib-macros = "0.18.2"
gio = "0.18.2"
glib = "0.18.2"
gtk4 = "0.7.3"
clap = { version = "4.4.6", features = ["derive"] }

View File

@ -2,13 +2,9 @@
use cairo::Context;
use clap::Parser;
use gio::ApplicationFlags;
use glib::clone;
use gtk4::prelude::*;
use gtk4::{Application, ApplicationWindow, DrawingArea, Label};
use poppler::PopplerDocument;
use std::cell::RefCell;
use std::env;
use std::path::PathBuf;
use std::rc::Rc;
@ -40,6 +36,11 @@ struct Ui {
header_bar: gtk4::HeaderBar,
}
struct DocumentCanvas {
document: poppler::Document,
current_page_number: i32,
}
fn toggle_fullscreen(ui: &Ui) {
if ui.header_bar.is_visible() {
ui.header_bar.hide();
@ -108,9 +109,13 @@ fn build_ui(app: &Application, cli: &Cli) {
}
ui.borrow().bottom_bar.append(&page_indicator);
let doc = PopplerDocument::new_from_file(file, "").unwrap();
// let doc = PopplerDocument::new_from_file(file, "").unwrap();
// let doc = PopplerDocument::from
// TODO: catch errors
let uri = format!("file://{}", file.to_str().unwrap());
let doc = poppler::Document::from_file(&uri, None).unwrap();
let num_pages = doc.get_n_pages();
let num_pages = doc.n_pages();
let current_page_number = Rc::new(RefCell::new(1));
let surface = cairo::ImageSurface::create(cairo::Format::Rgb24, 0, 0).unwrap();
@ -142,18 +147,17 @@ fn build_ui(app: &Application, cli: &Cli) {
}),
);
drawing_area.add_controller(&click);
drawing_area.add_controller(click);
drawing_area.set_draw_func(
glib::clone!(@strong current_page_number => @default-panic, move |area, context, _a, _b| {
println!("Draw!");
context.set_source_rgba(1.0, 1.0, 1.0, 1.0);
context.paint().unwrap();
context.fill().expect("uh oh");
context.paint().unwrap();
let page = doc.get_page(*current_page_number.borrow_mut()- 1).unwrap();
let (w, h) = page.get_size();
let page = doc.page(*current_page_number.borrow_mut()- 1).unwrap();
let (w, h) = page.size();
let width_diff = area.width() as f64 / w;
let height_diff = area.height() as f64 / h;
@ -172,7 +176,7 @@ fn build_ui(app: &Application, cli: &Cli) {
context.scale(width_diff, width_diff);
}
page.render(&context);
page.render(context);
let r = ctx.paint();
match r {