diff --git a/Cargo.lock b/Cargo.lock index 6db43a8..305276e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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" diff --git a/Cargo.toml b/Cargo.toml index b671d10..b60617f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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"] } diff --git a/src/main.rs b/src/main.rs index 1f56491..fb41ee9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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 {