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

Reply via email to