evince r3502 - in trunk: . backend/pdf



Author: carlosgc
Date: Sun Mar  1 11:06:06 2009
New Revision: 3502
URL: http://svn.gnome.org/viewvc/evince?rev=3502&view=rev

Log:
2009-03-01  Carlos Garcia Campos  <carlosgc gnome org>

	* backend/pdf/ev-poppler.cc: (make_thumbnail_for_page),
	(pdf_document_thumbnails_get_thumbnail),
	(pdf_document_thumbnails_get_dimensions):

	Make our own thumbnail when the provided one doesn't have the size
	we need. Based on patch and feedback by Christian Spurk. Fixes
	bugs #323198 and #307357.

Modified:
   trunk/ChangeLog
   trunk/backend/pdf/ev-poppler.cc

Modified: trunk/backend/pdf/ev-poppler.cc
==============================================================================
--- trunk/backend/pdf/ev-poppler.cc	(original)
+++ trunk/backend/pdf/ev-poppler.cc	Sun Mar  1 11:06:06 2009
@@ -1260,15 +1260,13 @@
 }
 
 static GdkPixbuf *
-make_thumbnail_for_page (PdfDocument     *pdf_document,
-			 PopplerPage     *poppler_page, 
-			 EvRenderContext *rc)
+make_thumbnail_for_page (PopplerPage     *poppler_page,
+			 EvRenderContext *rc,
+			 gint             width,
+			 gint             height)
 {
 	GdkPixbuf *pixbuf;
-	int width, height;
 
-	pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document),
-						rc, &width, &height);
 #ifdef POPPLER_WITH_GDK
 	pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
 				 width, height);
@@ -1302,9 +1300,13 @@
 	PopplerPage *poppler_page;
 	GdkPixbuf *pixbuf = NULL;
 	GdkPixbuf *border_pixbuf;
+	gint width, height;
 
 	poppler_page = POPPLER_PAGE (rc->page->backend_page);
 
+	pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document),
+						rc, &width, &height);
+	
 #ifdef POPPLER_WITH_GDK
 	pixbuf = poppler_page_get_thumbnail_pixbuf (poppler_page);
 #else
@@ -1317,17 +1319,26 @@
 	}
 #endif /* POPPLER_WITH_GDK */
 
-	if (pixbuf) {
-		/* Rotate provided thumbnail if needed */
-		GdkPixbuf *rotated_pixbuf;
-
-		rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf,
-							   (GdkPixbufRotation) (360 - rc->rotation));
-		g_object_unref (pixbuf);
-		pixbuf = rotated_pixbuf;
+	if (pixbuf != NULL) {
+		int thumb_width = (rc->rotation == 90 || rc->rotation == 270) ?
+			gdk_pixbuf_get_height (pixbuf) :
+			gdk_pixbuf_get_width (pixbuf);
+
+		if (thumb_width == width) {
+			GdkPixbuf *rotated_pixbuf;
+
+			rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf,
+								   (GdkPixbufRotation) (360 - rc->rotation));
+			g_object_unref (pixbuf);
+			pixbuf = rotated_pixbuf;
+		} else {
+			/* The provided thumbnail has a different size */
+			g_object_unref (pixbuf);
+			pixbuf = make_thumbnail_for_page (poppler_page, rc, width, height);
+		}
 	} else {
-		/* There is no provided thumbnail.  We need to make one. */
-		pixbuf = make_thumbnail_for_page (pdf_document, poppler_page, rc);
+		/* There is no provided thumbnail. We need to make one. */
+		pixbuf = make_thumbnail_for_page (poppler_page, rc, width, height);
 	}
 
         if (border) {		
@@ -1345,21 +1356,13 @@
 					gint                 *width,
 					gint                 *height)
 {
-	PopplerPage *poppler_page;
-	gint has_thumb;
+	double page_width, page_height;
 	
-	poppler_page = POPPLER_PAGE (rc->page->backend_page);
-
-	has_thumb = poppler_page_get_thumbnail_size (poppler_page, width, height);
-
-	if (!has_thumb || *width <= 0 || *height <= 0) {
-		double page_width, page_height;
-
-		poppler_page_get_size (poppler_page, &page_width, &page_height);
-
-		*width = (gint) MAX (page_width * rc->scale, 1);
-		*height = (gint) MAX (page_height * rc->scale, 1);
-	}
+	poppler_page_get_size (POPPLER_PAGE (rc->page->backend_page),
+			       &page_width, &page_height);
+	
+	*width = (gint) MAX (page_width * rc->scale, 1);
+	*height = (gint) MAX (page_height * rc->scale, 1);
 	
 	if (rc->rotation == 90 || rc->rotation == 270) {
 		gint  temp;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]