The poppler_page_render function in poppler-glib does not save and
restore the cairo state when rendering a page. This may leave cairo in a
different state resulting in incorrect rendering of subsequent pages.
That attached patch fixes this problem.
>From 54af0294a64ccc6a54d05b516c5b60e86abc89dd Mon Sep 17 00:00:00 2001
From: Adrian Johnson <[EMAIL PROTECTED]>
Date: Sun, 1 Jun 2008 00:49:32 +0930
Subject: [PATCH] glib: save/restore cairo state when rendering a page
---
glib/poppler-page.cc | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/glib/poppler-page.cc b/glib/poppler-page.cc
index 5e0b2f1..9d41ecb 100644
--- a/glib/poppler-page.cc
+++ b/glib/poppler-page.cc
@@ -517,6 +517,7 @@ _poppler_page_render (PopplerPage *page,
/* NOTE: instead of passing -1 we should/could use cairo_clip_extents()
* to get a bounding box */
+ cairo_save (cairo);
page->page->displaySlice(output_dev,
72.0, 72.0, 0,
gFalse, /* useMediaBox */
@@ -527,6 +528,7 @@ _poppler_page_render (PopplerPage *page,
page->document->doc->getCatalog (),
NULL, NULL,
printing ? poppler_print_annot_cb : NULL, NULL);
+ cairo_restore (cairo);
output_dev->setCairo (NULL);
}
--
1.5.2.4
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler