diff --git a/src/draw.rs b/src/draw.rs index 8b3207c..8bf77bb 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -1,6 +1,6 @@ use cairo::Context; -use crate::ui::Ui; +use crate::ui::{DocumentCanvas, Ui}; use gtk::{prelude::*, DrawingArea}; pub fn draw(ui: &mut Ui, area: &DrawingArea, context: &Context) { @@ -11,21 +11,16 @@ pub fn draw(ui: &mut Ui, area: &DrawingArea, context: &Context) { let document_canvas = ui.document_canvas.as_ref().unwrap(); if document_canvas.num_pages.unwrap_or(0) > 1 { - draw_two_pages(ui, area, context); + draw_two_pages(document_canvas, area, context); } else { - draw_single_page(ui, area, context); + draw_single_page(document_canvas, area, context); } println!("Finished drawing"); document_canvas.cache_surrounding_pages(); } -fn draw_two_pages(ui: &Ui, area: &DrawingArea, context: &Context) { - if ui.document_canvas.is_none() { - return; - } - let document_canvas = ui.document_canvas.as_ref().unwrap(); - +fn draw_two_pages(document_canvas: &DocumentCanvas, area: &DrawingArea, context: &Context) { let page_left = document_canvas.left_page.as_ref(); let page_right = document_canvas.right_page.as_ref(); @@ -77,27 +72,15 @@ fn draw_two_pages(ui: &Ui, area: &DrawingArea, context: &Context) { area.width() as f64 / 2.0, area.height() as f64 / 2.0 - h_page / 2.0, ); + // Poppler sometimes crops white border, draw it manually context.rectangle(0.0, 0.0, w_right * scale_right, h_page); context.fill().unwrap(); context.scale(scale_right, scale_right); page_right.render(context); - - let r = ui.drawing_context.paint(); - match r { - Err(v) => println!("Error painting PDF: {v:?}"), - Ok(_v) => {} - } - - ui.drawing_context.show_page().unwrap(); } -fn draw_single_page(ui: &Ui, area: &DrawingArea, context: &Context) { - if ui.document_canvas.is_none() { - return; - } - let document_canvas = ui.document_canvas.as_ref().unwrap(); - +fn draw_single_page(document_canvas: &DocumentCanvas, area: &DrawingArea, context: &Context) { if document_canvas.left_page.is_none() { // TODO: show error message return; @@ -129,12 +112,4 @@ fn draw_single_page(ui: &Ui, area: &DrawingArea, context: &Context) { context.fill().unwrap(); page.render(context); - - let r = ui.drawing_context.paint(); - match r { - Err(v) => println!("Error painting PDF: {v:?}"), - Ok(_v) => {} - } - - ui.drawing_context.show_page().unwrap(); } diff --git a/src/ui.rs b/src/ui.rs index c1077c6..194952b 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,7 +1,6 @@ use std::{cell::RefCell, path::Path, rc::Rc}; use async_channel::Sender; -use cairo::{Context, Format, ImageSurface}; use gtk::{ glib, Application, ApplicationWindow, Box, Button, DrawingArea, FileChooserAction, FileChooserDialog, HeaderBar, Label, Orientation, ResponseType, @@ -20,7 +19,6 @@ pub struct Ui { header_bar: gtk::HeaderBar, page_indicator: gtk::Label, drawing_area: gtk::DrawingArea, - pub drawing_context: cairo::Context, pub document_canvas: Option, } @@ -162,11 +160,6 @@ fn process_left_click(ui: &mut Ui, x: f64, y: f64) { update_page_status(ui); } -fn create_drawing_context() -> Context { - let surface = ImageSurface::create(Format::Rgb24, 0, 0).unwrap(); - Context::new(&surface).unwrap() -} - impl Ui { pub fn build(app: &Application) -> Rc> { println!("building ui"); @@ -191,7 +184,6 @@ impl Ui { .hexpand(true) .vexpand(true) .build(), - drawing_context: create_drawing_context(), document_canvas: None, }; let ui = Rc::new(RefCell::new(ui));