[evince] Remove get_dimensions() from EvDocumentThumbnails interface



commit e3ef2dccab9e03cd510a37ba7e64b681be38f65c
Author: Carlos Garcia Campos <carlosgc gnome org>
Date:   Thu Aug 19 14:52:25 2010 +0200

    Remove get_dimensions() from EvDocumentThumbnails interface
    
    It was the same implementation in every backend.

 backend/comics/comics-document.c     |   21 --------
 backend/djvu/djvu-document.c         |   22 ---------
 backend/dvi/dvi-document.c           |   20 --------
 backend/pdf/ev-poppler.cc            |   46 ++++++------------
 backend/pixbuf/pixbuf-document.c     |   20 --------
 backend/ps/ev-spectre.c              |   23 ---------
 backend/tiff/tiff-document.c         |   22 ---------
 libdocument/ev-document-thumbnails.c |   17 -------
 libdocument/ev-document-thumbnails.h |    8 ---
 shell/ev-sidebar-thumbnails.c        |   87 ++++++++++++----------------------
 10 files changed, 46 insertions(+), 240 deletions(-)
---
diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c
index 4d74385..9205b97 100644
--- a/backend/comics/comics-document.c
+++ b/backend/comics/comics-document.c
@@ -871,30 +871,9 @@ comics_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 }
 
 static void
-comics_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-					   EvRenderContext      *rc,
-					   gint                 *width,
-					   gint                 *height)
-{
-	gdouble page_width, page_height;
-	
-	comics_document_get_page_size (EV_DOCUMENT (document), rc->page,
-				       &page_width, &page_height);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (page_height * rc->scale);
-		*height = (gint) (page_width * rc->scale);
-	} else {
-		*width = (gint) (page_width * rc->scale);
-		*height = (gint) (page_height * rc->scale);
-	}
-}
-
-static void
 comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = comics_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = comics_document_thumbnails_get_dimensions;
 }
 
 static char**
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
index aa0e595..ae4fb01 100644
--- a/backend/djvu/djvu-document.c
+++ b/backend/djvu/djvu-document.c
@@ -473,27 +473,6 @@ djvu_selection_iface_init (EvSelectionInterface *iface)
 	iface->get_selected_text = djvu_selection_get_selected_text;
 }
 
-static void
-djvu_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-					 EvRenderContext      *rc, 
-					 gint                 *width,
-					 gint                 *height)
-{
-	DjvuDocument *djvu_document = DJVU_DOCUMENT (document); 
-	gdouble page_width, page_height;
-	
-	djvu_document_get_page_size (EV_DOCUMENT(djvu_document), rc->page,
-				     &page_width, &page_height);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (page_height * rc->scale);
-		*height = (gint) (page_width * rc->scale);
-	} else {
-		*width = (gint) (page_width * rc->scale);
-		*height = (gint) (page_height * rc->scale);
-	}
-}
-
 static GdkPixbuf *
 djvu_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 					EvRenderContext      *rc,
@@ -544,7 +523,6 @@ static void
 djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = djvu_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = djvu_document_thumbnails_get_dimensions;
 }
 
 /* EvFileExporterIface */
diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c
index a4a3dc6..8487036 100644
--- a/backend/dvi/dvi-document.c
+++ b/backend/dvi/dvi-document.c
@@ -267,25 +267,6 @@ dvi_document_class_init (DviDocumentClass *klass)
 	ev_document_class->support_synctex = dvi_document_support_synctex;
 }
 
-static void
-dvi_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-					EvRenderContext      *rc, 
-					gint                 *width,
-					gint                 *height)
-{	
-	DviDocument *dvi_document = DVI_DOCUMENT (document);
-	gdouble page_width = dvi_document->base_width;
-	gdouble page_height = dvi_document->base_height;
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (page_height * rc->scale);
-		*height = (gint) (page_width * rc->scale);
-	} else {
-		*width = (gint) (page_width * rc->scale);
-		*height = (gint) (page_height * rc->scale);
-	}
-}
-
 static GdkPixbuf *
 dvi_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 				       EvRenderContext      *rc,   
@@ -347,7 +328,6 @@ static void
 dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = dvi_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = dvi_document_thumbnails_get_dimensions;
 }
 
 /* EvFileExporterIface */
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index 03931a6..dc253c7 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -129,10 +129,6 @@ static void pdf_document_file_exporter_iface_init        (EvFileExporterInterfac
 static void pdf_selection_iface_init                     (EvSelectionInterface           *iface);
 static void pdf_document_page_transition_iface_init      (EvDocumentTransitionInterface  *iface);
 static void pdf_document_text_iface_init                 (EvDocumentTextInterface        *iface);
-static void pdf_document_thumbnails_get_dimensions       (EvDocumentThumbnails           *document_thumbnails,
-							  EvRenderContext                *rc,
-							  gint                           *width,
-							  gint                           *height);
 static int  pdf_document_get_n_pages			 (EvDocument                     *document);
 
 static EvLinkDest *ev_link_dest_from_dest    (PdfDocument       *pdf_document,
@@ -1426,13 +1422,25 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
 	PopplerPage *poppler_page;
 	GdkPixbuf *pixbuf = NULL;
 	GdkPixbuf *border_pixbuf;
+	double page_width, page_height;
 	gint width, height;
 
 	poppler_page = POPPLER_PAGE (rc->page->backend_page);
 
-	pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document),
-						rc, &width, &height);
-	
+	poppler_page_get_size (poppler_page,
+			       &page_width, &page_height);
+
+	width = MAX ((gint)(page_width * rc->scale + 0.5), 1);
+	height = MAX ((gint)(page_height * rc->scale + 0.5), 1);
+
+	if (rc->rotation == 90 || rc->rotation == 270) {
+		gint  temp;
+
+		temp = width;
+		width = height;
+		height = temp;
+	}
+
 #ifdef POPPLER_WITH_GDK
 	pixbuf = poppler_page_get_thumbnail_pixbuf (poppler_page);
 #else
@@ -1477,33 +1485,9 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
 }
 
 static void
-pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
-					EvRenderContext      *rc,
-					gint                 *width,
-					gint                 *height)
-{
-	double page_width, page_height;
-	
-	poppler_page_get_size (POPPLER_PAGE (rc->page->backend_page),
-			       &page_width, &page_height);
-	
-	*width = MAX ((gint)(page_width * rc->scale + 0.5), 1);
-	*height = MAX ((gint)(page_height * rc->scale + 0.5), 1);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		gint  temp;
-
-		temp = *width;
-		*width = *height;
-		*height = temp;
-	}
-}
-
-static void
 pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = pdf_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = pdf_document_thumbnails_get_dimensions;
 }
 
 
diff --git a/backend/pixbuf/pixbuf-document.c b/backend/pixbuf/pixbuf-document.c
index 065fe49..978970d 100644
--- a/backend/pixbuf/pixbuf-document.c
+++ b/backend/pixbuf/pixbuf-document.c
@@ -176,29 +176,9 @@ pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 }
 
 static void
-pixbuf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-					   EvRenderContext      *rc, 
-					   gint                 *width,
-					   gint                 *height)
-{
-	PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
-	gint p_width = gdk_pixbuf_get_width (pixbuf_document->pixbuf);
-	gint p_height = gdk_pixbuf_get_height (pixbuf_document->pixbuf);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (p_height * rc->scale);
-		*height = (gint) (p_width * rc->scale);
-	} else {
-		*width = (gint) (p_width * rc->scale);
-		*height = (gint) (p_height * rc->scale);
-	}
-}
-
-static void
 pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = pixbuf_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = pixbuf_document_thumbnails_get_dimensions;
 }
 
 
diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c
index 54807f0..256d9be 100644
--- a/backend/ps/ev-spectre.c
+++ b/backend/ps/ev-spectre.c
@@ -379,32 +379,9 @@ ps_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
 }
 
 static void
-ps_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
-				       EvRenderContext      *rc, 
-				       gint                 *width,
-				       gint                 *height)
-{
-	PSDocument *ps = PS_DOCUMENT (document_thumbnails);
-	gdouble     page_width, page_height;
-
-	ps_document_get_page_size (EV_DOCUMENT (ps),
-				   rc->page,
-				   &page_width, &page_height);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (page_height * rc->scale);
-		*height = (gint) (page_width * rc->scale);
-	} else {
-		*width = (gint) (page_width * rc->scale);
-		*height = (gint) (page_height * rc->scale);
-	}
-}
-
-static void
 ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = ps_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = ps_document_thumbnails_get_dimensions;
 }
 	
 /* EvFileExporterIface */
diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c
index 9c113b4..80aec9b 100644
--- a/backend/tiff/tiff-document.c
+++ b/backend/tiff/tiff-document.c
@@ -447,31 +447,9 @@ tiff_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 }
 
 static void
-tiff_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-					 EvRenderContext      *rc, 
-					 gint                 *width,
-					 gint                 *height)
-{
-	gdouble page_width, page_height;
-
-	tiff_document_get_page_size (EV_DOCUMENT (document),
-				     rc->page,
-				     &page_width, &page_height);
-
-	if (rc->rotation == 90 || rc->rotation == 270) {
-		*width = (gint) (page_height * rc->scale);
-		*height = (gint) (page_width * rc->scale);
-	} else {
-		*width = (gint) (page_width * rc->scale);
-		*height = (gint) (page_height * rc->scale);
-	}
-}
-
-static void
 tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
 {
 	iface->get_thumbnail = tiff_document_thumbnails_get_thumbnail;
-	iface->get_dimensions = tiff_document_thumbnails_get_dimensions;
 }
 
 /* postscript exporter implementation */
diff --git a/libdocument/ev-document-thumbnails.c b/libdocument/ev-document-thumbnails.c
index 9482e09..9ff10f8 100644
--- a/libdocument/ev-document-thumbnails.c
+++ b/libdocument/ev-document-thumbnails.c
@@ -44,20 +44,3 @@ ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
 	return iface->get_thumbnail (document, rc, border);
 }
 
-void
-ev_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-				       EvRenderContext      *rc,
-				       gint                 *width,
-				       gint                 *height)
-{
-	EvDocumentThumbnailsInterface *iface;
-
-	g_return_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document));
-	g_return_if_fail (EV_IS_RENDER_CONTEXT (rc));
-	g_return_if_fail (width != NULL);
-	g_return_if_fail (height != NULL);
-
-	iface = EV_DOCUMENT_THUMBNAILS_GET_IFACE (document);
-	iface->get_dimensions (document, rc, width, height);
-}
-
diff --git a/libdocument/ev-document-thumbnails.h b/libdocument/ev-document-thumbnails.h
index bf663ee..b2779fc 100644
--- a/libdocument/ev-document-thumbnails.h
+++ b/libdocument/ev-document-thumbnails.h
@@ -48,10 +48,6 @@ struct _EvDocumentThumbnailsInterface {
         GdkPixbuf *  (* get_thumbnail)  (EvDocumentThumbnails *document,
                                          EvRenderContext      *rc, 
                                          gboolean              border);
-        void         (* get_dimensions) (EvDocumentThumbnails *document,
-                                         EvRenderContext      *rc,
-                                         gint                 *width,
-                                         gint                 *height);
 };
 
 GType      ev_document_thumbnails_get_type       (void) G_GNUC_CONST;
@@ -59,10 +55,6 @@ GType      ev_document_thumbnails_get_type       (void) G_GNUC_CONST;
 GdkPixbuf *ev_document_thumbnails_get_thumbnail  (EvDocumentThumbnails *document,
                                                   EvRenderContext      *rc, 
                                                   gboolean              border);
-void       ev_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
-                                                  EvRenderContext      *rc,
-                                                  gint                 *width,
-                                                  gint                 *height);
 
 G_END_DECLS
 
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index 4aaeeba..ef0e3a9 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -113,72 +113,47 @@ G_DEFINE_TYPE_EXTENDED (EvSidebarThumbnails,
 /* Thumbnails dimensions cache */
 #define EV_THUMBNAILS_SIZE_CACHE_KEY "ev-thumbnails-size-cache"
 
+static void
+get_thumbnail_size_for_page (EvDocument *document,
+			     guint       page,
+			     gint       *width,
+			     gint       *height)
+{
+	gdouble scale;
+	gdouble w, h;
+
+	ev_document_get_page_size (document, page, &w, &h);
+	scale = (gdouble)THUMBNAIL_WIDTH / w;
+
+	*width = MAX ((gint)(w * scale + 0.5), 1);
+	*height = MAX ((gint)(h * scale + 0.5), 1);
+}
+
 static EvThumbsSizeCache *
 ev_thumbnails_size_cache_new (EvDocument *document)
 {
 	EvThumbsSizeCache *cache;
-	EvRenderContext *rc = NULL;
-	gint i, n_pages;
-	EvThumbsSize *thumb_size;
+	gint               i, n_pages;
+	EvThumbsSize      *thumb_size;
 
 	cache = g_new0 (EvThumbsSizeCache, 1);
 
-	n_pages = ev_document_get_n_pages (document);
+	if (ev_document_is_page_size_uniform (document)) {
+		cache->uniform = TRUE;
+		get_thumbnail_size_for_page (document, 0,
+					     &cache->uniform_width,
+					     &cache->uniform_height);
+		return cache;
+	}
 
-	/* Assume all pages are the same size until proven otherwise */
-	cache->uniform = TRUE;
+	n_pages = ev_document_get_n_pages (document);
+	cache->sizes = g_new0 (EvThumbsSize, n_pages);
 
 	for (i = 0; i < n_pages; i++) {
-		EvPage *page;
-		gdouble page_width, page_height;
-		gint    thumb_width = 0;
-		gint    thumb_height = 0;
-
-		page = ev_document_get_page (document, i);
-
-		ev_document_get_page_size (document, i, &page_width, &page_height);
-
-		if (!rc) {
-			rc = ev_render_context_new (page, 0, (gdouble)THUMBNAIL_WIDTH / page_width);
-		} else {
-			ev_render_context_set_page (rc, page);
-			ev_render_context_set_scale (rc, (gdouble)THUMBNAIL_WIDTH / page_width);
-		}
-
-		ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (document),
-						       rc, &thumb_width, &thumb_height);
-
-		if (i == 0) {
-			cache->uniform_width = thumb_width;
-			cache->uniform_height = thumb_height;
-		} else if (cache->uniform &&
-			   (cache->uniform_width != thumb_width ||
-			    cache->uniform_height != thumb_height)) {
-			/* It's a different thumbnail size.  Backfill the array. */
-			int j;
-
-			cache->sizes = g_new0 (EvThumbsSize, n_pages);
-
-			for (j = 0; j < i; j++) {
-				thumb_size = &(cache->sizes[j]);
-				thumb_size->width = cache->uniform_width;
-				thumb_size->height = cache->uniform_height;
-			}
-			cache->uniform = FALSE;
-		}
-
-		if (! cache->uniform) {
-			thumb_size = &(cache->sizes[i]);
-
-			thumb_size->width = thumb_width;
-			thumb_size->height = thumb_height;
-		}
-
-		g_object_unref (page);
-	}
-
-	if (rc) {
-		g_object_unref (rc);
+		thumb_size = &(cache->sizes[i]);
+		get_thumbnail_size_for_page (document, i,
+					     &thumb_size->width,
+					     &thumb_size->height);
 	}
 
 	return cache;



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