diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2007-02-16 17:27:12 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2007-02-16 17:27:12 (GMT) |
commit | 1d6150237848b4c1fede94ce23baa4fd8870fd93 (patch) | |
tree | 7a607e0263e6b40591b31885b561f2192b7b6695 /backend/pdf/ev-poppler.cc | |
parent | 76f055907e4eab82025f28cd0e813eb39713bf5b (diff) |
Use an EvRenderContext for rendering thumbnails instead of a suggested
2007-02-16 Carlos Garcia Campos <carlosgc@gnome.org>
* backend/dvi/dvi-document.c:
(dvi_document_thumbnails_get_dimensions),
(dvi_document_thumbnails_get_thumbnail):
* backend/impress/impress-document.c:
(impress_document_thumbnails_get_thumbnail),
(impress_document_thumbnails_get_dimensions):
* backend/ps/ps-document.c: (ps_document_thumbnails_get_thumbnail),
(ps_document_thumbnails_get_dimensions):
* backend/djvu/djvu-document.c:
(djvu_document_thumbnails_get_dimensions),
(djvu_document_thumbnails_get_thumbnail):
* backend/tiff/tiff-document.c:
(tiff_document_thumbnails_get_thumbnail),
(tiff_document_thumbnails_get_dimensions):
* backend/pdf/ev-poppler.cc: (make_thumbnail_for_page),
(pdf_document_thumbnails_get_thumbnail),
(pdf_document_thumbnails_get_dimensions):
* backend/comics/comics-document.c:
(comics_document_thumbnails_get_thumbnail),
(comics_document_thumbnails_get_dimensions):
* backend/pixbuf/pixbuf-document.c:
(pixbuf_document_thumbnails_get_thumbnail),
(pixbuf_document_thumbnails_get_dimensions):
* libdocument/ev-document-thumbnails.[ch]:
(ev_document_thumbnails_get_thumbnail),
(ev_document_thumbnails_get_dimensions):
* libdocument/ev-document-misc.[ch]:
(ev_document_misc_get_thumbnail_frame):
* shell/ev-jobs.[ch]: (ev_job_thumbnail_dispose),
(ev_job_thumbnail_new), (ev_job_thumbnail_run):
* shell/ev-sidebar-thumbnails.c: (get_scale_for_page), (add_range),
(ev_sidebar_thumbnails_set_loading_icon), (refresh),
(ev_sidebar_thumbnails_refresh):
* shell/ev-window.c: (ev_window_setup_document):
* thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get):
Use an EvRenderContext for rendering thumbnails instead of a suggested
width, so that different sized pages get sized proportionally.
svn path=/trunk/; revision=2332
Diffstat (limited to 'backend/pdf/ev-poppler.cc')
-rw-r--r-- | backend/pdf/ev-poppler.cc | 69 |
1 files changed, 26 insertions, 43 deletions
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 7c2c528..715226a 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -92,8 +92,7 @@ static void pdf_document_file_exporter_iface_init (EvFileExporterIface static void pdf_selection_iface_init (EvSelectionIface *iface); static void pdf_document_page_transition_iface_init (EvDocumentTransitionIface *iface); static void pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails, - gint page, - gint size, + EvRenderContext *rc, gint *width, gint *height); static int pdf_document_get_n_pages (EvDocument *document); @@ -1174,32 +1173,15 @@ pdf_document_document_images_iface_init (EvDocumentImagesIface *iface) } static GdkPixbuf * -make_thumbnail_for_size (PdfDocument *pdf_document, - gint page, - int rotation, - gint size) +make_thumbnail_for_page (PdfDocument *pdf_document, + PopplerPage *poppler_page, + EvRenderContext *rc) { - PopplerPage *poppler_page; GdkPixbuf *pixbuf; int width, height; - double scale; - gdouble unscaled_width, unscaled_height; - poppler_page = poppler_document_get_page (pdf_document->document, page); - g_return_val_if_fail (poppler_page != NULL, NULL); - - pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page, - size, &width, &height); - poppler_page_get_size (poppler_page, &unscaled_width, &unscaled_height); - scale = width / unscaled_width; - - /* rotate */ - if (rotation == 90 || rotation == 270) { - int temp; - temp = width; - width = height; - height = temp; - } + pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), + rc, &width, &height); pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height); @@ -1208,20 +1190,15 @@ make_thumbnail_for_size (PdfDocument *pdf_document, ev_document_fc_mutex_lock (); poppler_page_render_to_pixbuf (poppler_page, 0, 0, width, height, - scale, rotation, pixbuf); + rc->scale, rc->rotation, pixbuf); ev_document_fc_mutex_unlock (); - - - g_object_unref (poppler_page); return pixbuf; } static GdkPixbuf * pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails, - gint page, - gint rotation, - gint size, + EvRenderContext *rc, gboolean border) { PdfDocument *pdf_document; @@ -1231,18 +1208,17 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails pdf_document = PDF_DOCUMENT (document_thumbnails); - poppler_page = poppler_document_get_page (pdf_document->document, page); + poppler_page = poppler_document_get_page (pdf_document->document, rc->page); g_return_val_if_fail (poppler_page != NULL, NULL); pixbuf = poppler_page_get_thumbnail (poppler_page); - - if (pixbuf == NULL) { + if (!pixbuf) { /* There is no provided thumbnail. We need to make one. */ - pixbuf = make_thumbnail_for_size (pdf_document, page, rotation, size); + pixbuf = make_thumbnail_for_page (pdf_document, poppler_page, rc); } if (border) { - border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, rotation, pixbuf); + border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf); g_object_unref (pixbuf); pixbuf = border_pixbuf; } @@ -1254,8 +1230,7 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails static void pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails, - gint page, - gint size, + EvRenderContext *rc, gint *width, gint *height) { @@ -1264,10 +1239,8 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail gint has_thumb; pdf_document = PDF_DOCUMENT (document_thumbnails); - poppler_page = poppler_document_get_page (pdf_document->document, page); + poppler_page = poppler_document_get_page (pdf_document->document, rc->page); - g_return_if_fail (width != NULL); - g_return_if_fail (height != NULL); g_return_if_fail (poppler_page != NULL); has_thumb = poppler_page_get_thumbnail_size (poppler_page, width, height); @@ -1276,9 +1249,19 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail double page_width, page_height; poppler_page_get_size (poppler_page, &page_width, &page_height); - *width = size; - *height = (int) (size * page_height / page_width); + + *width = (gint) (page_width * rc->scale); + *height = (gint) (page_height * rc->scale); } + + if (rc->rotation == 90 || rc->rotation == 270) { + gint temp; + + temp = *width; + *width = *height; + *height = temp; + } + g_object_unref (poppler_page); } |