[evince] Remove EvDocumentThumbnails interface
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] Remove EvDocumentThumbnails interface
- Date: Thu, 19 Aug 2010 13:44:36 +0000 (UTC)
commit 6ac3eb8adb9f4bb8c59c832e7d83334243d90cd5
Author: Carlos Garcia Campos <carlosgc gnome org>
Date: Thu Aug 19 15:41:25 2010 +0200
Remove EvDocumentThumbnails interface
The only method get_thumbnail() has been moved to EvDocument. Thumbnails
are always implemented by backends since it's usually just rendering the
page at a lower scale factor. EvDocument provides a default
implementation so that most of the backends don't even need to implement
it.
backend/comics/comics-document.c | 34 +------
backend/djvu/djvu-document.c | 94 ++++++---------
backend/dvi/dvi-document.c | 74 +-----------
backend/pdf/ev-poppler.cc | 211 ++++++++++++++++------------------
backend/pixbuf/pixbuf-document.c | 60 ++++------
backend/ps/ev-spectre.c | 40 -------
backend/tiff/tiff-document.c | 32 +-----
evince-document.h | 1 -
libdocument/Makefile.am | 2 -
libdocument/ev-document-thumbnails.c | 46 --------
libdocument/ev-document-thumbnails.h | 61 ----------
libdocument/ev-document.c | 27 +++++
libdocument/ev-document.h | 4 +
libview/ev-jobs.c | 8 +-
shell/ev-sidebar-thumbnails.c | 6 +-
shell/ev-window.c | 4 +-
thumbnailer/evince-thumbnailer.c | 9 +--
17 files changed, 206 insertions(+), 507 deletions(-)
---
diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c
index 9205b97..0481de8 100644
--- a/backend/comics/comics-document.c
+++ b/backend/comics/comics-document.c
@@ -39,7 +39,6 @@
#include "comics-document.h"
#include "ev-document-misc.h"
-#include "ev-document-thumbnails.h"
#include "ev-file-helpers.h"
#ifdef G_OS_WIN32
@@ -123,8 +122,6 @@ static const ComicBookDecompressCommand command_usage_def[] = {
{"%s -xOf" , "%s -tf %s" , NULL , FALSE, NO_OFFSET}
};
-static void comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
-
static GSList* get_supported_image_extensions (void);
static void get_page_size_area_prepared_cb (GdkPixbufLoader *loader,
gpointer data);
@@ -136,11 +133,7 @@ static char** extract_argv (EvDocument *document,
gint page);
-EV_BACKEND_REGISTER_WITH_CODE (ComicsDocument, comics_document,
- {
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
- comics_document_document_thumbnails_iface_init);
- } );
+EV_BACKEND_REGISTER (ComicsDocument, comics_document)
/**
* comics_regex_quote:
@@ -851,31 +844,6 @@ get_supported_image_extensions()
return extensions;
}
-static GdkPixbuf *
-comics_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
- EvRenderContext *rc,
- gboolean border)
-{
- GdkPixbuf *thumbnail;
-
- thumbnail = comics_document_render_pixbuf (EV_DOCUMENT (document), rc);
-
- if (border) {
- GdkPixbuf *tmp_pixbuf = thumbnail;
-
- thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
- g_object_unref (tmp_pixbuf);
- }
-
- return thumbnail;
-}
-
-static void
-comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = comics_document_thumbnails_get_thumbnail;
-}
-
static char**
extract_argv (EvDocument *document, gint page)
{
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
index ae4fb01..3349f40 100644
--- a/backend/djvu/djvu-document.c
+++ b/backend/djvu/djvu-document.c
@@ -24,7 +24,6 @@
#include "djvu-text-page.h"
#include "djvu-links.h"
#include "djvu-document-private.h"
-#include "ev-document-thumbnails.h"
#include "ev-file-exporter.h"
#include "ev-document-misc.h"
#include "ev-document-find.h"
@@ -51,7 +50,6 @@ struct _DjvuDocumentClass
typedef struct _DjvuDocumentClass DjvuDocumentClass;
-static void djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
static void djvu_document_file_exporter_iface_init (EvFileExporterInterface *iface);
static void djvu_document_find_iface_init (EvDocumentFindInterface *iface);
static void djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface);
@@ -59,7 +57,6 @@ static void djvu_selection_iface_init (EvSelectionInterface *iface);
EV_BACKEND_REGISTER_WITH_CODE (DjvuDocument, djvu_document,
{
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, djvu_document_document_thumbnails_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, djvu_document_file_exporter_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND, djvu_document_find_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS, djvu_document_document_links_iface_init);
@@ -380,6 +377,44 @@ djvu_document_render (EvDocument *document,
return surface;
}
+static GdkPixbuf *
+djvu_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ GdkPixbuf *pixbuf, *rotated_pixbuf;
+ gdouble page_width, page_height;
+ gint thumb_width, thumb_height;
+ guchar *pixels;
+
+ g_return_val_if_fail (djvu_document->d_document, NULL);
+
+ djvu_document_get_page_size (EV_DOCUMENT(djvu_document), rc->page,
+ &page_width, &page_height);
+
+ thumb_width = (gint) (page_width * rc->scale);
+ thumb_height = (gint) (page_height * rc->scale);
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+ thumb_width, thumb_height);
+ gdk_pixbuf_fill (pixbuf, 0xffffffff);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ while (ddjvu_thumbnail_status (djvu_document->d_document, rc->page->index, 1) < DDJVU_JOB_OK)
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ ddjvu_thumbnail_render (djvu_document->d_document, rc->page->index,
+ &thumb_width, &thumb_height,
+ djvu_document->thumbs_format,
+ gdk_pixbuf_get_rowstride (pixbuf),
+ (gchar *)pixels);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
+ g_object_unref (pixbuf);
+
+ return rotated_pixbuf;
+}
+
static void
djvu_document_finalize (GObject *object)
{
@@ -415,6 +450,7 @@ djvu_document_class_init (DjvuDocumentClass *klass)
ev_document_class->get_n_pages = djvu_document_get_n_pages;
ev_document_class->get_page_size = djvu_document_get_page_size;
ev_document_class->render = djvu_document_render;
+ ev_document_class->get_thumbnail = djvu_document_get_thumbnail;
}
static gchar *
@@ -473,58 +509,6 @@ djvu_selection_iface_init (EvSelectionInterface *iface)
iface->get_selected_text = djvu_selection_get_selected_text;
}
-static GdkPixbuf *
-djvu_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
- EvRenderContext *rc,
- gboolean border)
-{
- DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
- GdkPixbuf *pixbuf, *rotated_pixbuf;
- gdouble page_width, page_height;
- gint thumb_width, thumb_height;
- guchar *pixels;
-
- g_return_val_if_fail (djvu_document->d_document, NULL);
-
- djvu_document_get_page_size (EV_DOCUMENT(djvu_document), rc->page,
- &page_width, &page_height);
-
- thumb_width = (gint) (page_width * rc->scale);
- thumb_height = (gint) (page_height * rc->scale);
-
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
- thumb_width, thumb_height);
- gdk_pixbuf_fill (pixbuf, 0xffffffff);
- pixels = gdk_pixbuf_get_pixels (pixbuf);
-
- while (ddjvu_thumbnail_status (djvu_document->d_document, rc->page->index, 1) < DDJVU_JOB_OK)
- djvu_handle_events(djvu_document, TRUE, NULL);
-
- ddjvu_thumbnail_render (djvu_document->d_document, rc->page->index,
- &thumb_width, &thumb_height,
- djvu_document->thumbs_format,
- gdk_pixbuf_get_rowstride (pixbuf),
- (gchar *)pixels);
-
- rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
- g_object_unref (pixbuf);
-
- if (border) {
- GdkPixbuf *tmp_pixbuf = rotated_pixbuf;
-
- rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
- g_object_unref (tmp_pixbuf);
- }
-
- return rotated_pixbuf;
-}
-
-static void
-djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = djvu_document_thumbnails_get_thumbnail;
-}
-
/* EvFileExporterIface */
static void
djvu_document_file_exporter_begin (EvFileExporter *exporter,
diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c
index 8487036..89d3189 100644
--- a/backend/dvi/dvi-document.c
+++ b/backend/dvi/dvi-document.c
@@ -21,7 +21,6 @@
#include "dvi-document.h"
#include "texmfcnf.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-misc.h"
#include "ev-file-exporter.h"
#include "ev-file-helpers.h"
@@ -74,15 +73,13 @@ struct _DviDocument
typedef struct _DviDocumentClass DviDocumentClass;
-static void dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
-static void dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface);
-static void dvi_document_do_color_special (DviContext *dvi,
- const char *prefix,
- const char *arg);
+static void dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+static void dvi_document_do_color_special (DviContext *dvi,
+ const char *prefix,
+ const char *arg);
EV_BACKEND_REGISTER_WITH_CODE (DviDocument, dvi_document,
{
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, dvi_document_document_thumbnails_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, dvi_document_file_exporter_iface_init);
});
@@ -267,69 +264,6 @@ dvi_document_class_init (DviDocumentClass *klass)
ev_document_class->support_synctex = dvi_document_support_synctex;
}
-static GdkPixbuf *
-dvi_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
- EvRenderContext *rc,
- gboolean border)
-{
- DviDocument *dvi_document = DVI_DOCUMENT (document);
- GdkPixbuf *pixbuf;
- GdkPixbuf *rotated_pixbuf;
- cairo_surface_t *surface;
- gint thumb_width, thumb_height;
- gint proposed_width, proposed_height;
-
- thumb_width = (gint) (dvi_document->base_width * rc->scale);
- thumb_height = (gint) (dvi_document->base_height * rc->scale);
-
- g_mutex_lock (dvi_context_mutex);
-
- mdvi_setpage (dvi_document->context, rc->page->index);
-
- mdvi_set_shrink (dvi_document->context,
- (int)dvi_document->base_width * dvi_document->params->hshrink / thumb_width,
- (int)dvi_document->base_height * dvi_document->params->vshrink / thumb_height);
-
- proposed_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv;
- proposed_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv;
-
- if (border) {
- mdvi_cairo_device_set_margins (&dvi_document->context->device,
- MAX (thumb_width - proposed_width, 0) / 2,
- MAX (thumb_height - proposed_height, 0) / 2);
- } else {
- mdvi_cairo_device_set_margins (&dvi_document->context->device,
- MAX (thumb_width - proposed_width - 2, 0) / 2,
- MAX (thumb_height - proposed_height - 2, 0) / 2);
- }
-
- mdvi_cairo_device_set_scale (&dvi_document->context->device, rc->scale);
- mdvi_cairo_device_render (dvi_document->context);
- surface = mdvi_cairo_device_get_surface (&dvi_document->context->device);
- g_mutex_unlock (dvi_context_mutex);
-
- pixbuf = ev_document_misc_pixbuf_from_surface (surface);
- cairo_surface_destroy (surface);
-
- rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
- g_object_unref (pixbuf);
-
- if (border) {
- GdkPixbuf *tmp_pixbuf = rotated_pixbuf;
-
- rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
- g_object_unref (tmp_pixbuf);
- }
-
- return rotated_pixbuf;
-}
-
-static void
-dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = dvi_document_thumbnails_get_thumbnail;
-}
-
/* EvFileExporterIface */
static void
dvi_document_file_exporter_begin (EvFileExporter *exporter,
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
index dc253c7..bf1fed5 100644
--- a/backend/pdf/ev-poppler.cc
+++ b/backend/pdf/ev-poppler.cc
@@ -43,7 +43,6 @@
#include "ev-document-images.h"
#include "ev-document-fonts.h"
#include "ev-document-security.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-transition.h"
#include "ev-document-forms.h"
#include "ev-document-layers.h"
@@ -115,7 +114,6 @@ struct _PdfDocument
};
static void pdf_document_security_iface_init (EvDocumentSecurityInterface *iface);
-static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
static void pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface);
static void pdf_document_document_images_iface_init (EvDocumentImagesInterface *iface);
static void pdf_document_document_forms_iface_init (EvDocumentFormsInterface *iface);
@@ -145,8 +143,6 @@ EV_BACKEND_REGISTER_WITH_CODE (PdfDocument, pdf_document,
{
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_SECURITY,
pdf_document_security_iface_init);
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
- pdf_document_document_thumbnails_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS,
pdf_document_document_links_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_IMAGES,
@@ -403,6 +399,102 @@ pdf_document_render (EvDocument *document,
width, height, rc);
}
+static GdkPixbuf *
+make_thumbnail_for_page (PopplerPage *poppler_page,
+ EvRenderContext *rc,
+ gint width,
+ gint height)
+{
+ GdkPixbuf *pixbuf;
+
+#ifdef POPPLER_WITH_GDK
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+ width, height);
+ gdk_pixbuf_fill (pixbuf, 0xffffffff);
+
+ ev_document_fc_mutex_lock ();
+ poppler_page_render_to_pixbuf (poppler_page, 0, 0,
+ width, height,
+ rc->scale, rc->rotation, pixbuf);
+ ev_document_fc_mutex_unlock ();
+#else
+ cairo_surface_t *surface;
+
+ ev_document_fc_mutex_lock ();
+ surface = pdf_page_render (poppler_page, width, height, rc);
+ ev_document_fc_mutex_unlock ();
+
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+#endif /* POPPLER_WITH_GDK */
+
+ return pixbuf;
+}
+
+static GdkPixbuf *
+pdf_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ 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);
+
+ 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
+ cairo_surface_t *surface;
+
+ surface = poppler_page_get_thumbnail (poppler_page);
+ if (surface) {
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+ }
+#endif /* POPPLER_WITH_GDK */
+
+ 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 (poppler_page, rc, width, height);
+ }
+
+ return pixbuf;
+}
+
/* reference:
http://www.pdfa.org/lib/exe/fetch.php?id=pdfa%3Aen%3Atechdoc&cache=cache&media=pdfa:techdoc:tn0001_pdfa-1_and_namespaces_2008-03-18.pdf */
static char *
@@ -825,6 +917,7 @@ pdf_document_class_init (PdfDocumentClass *klass)
ev_document_class->get_page_size = pdf_document_get_page_size;
ev_document_class->get_page_label = pdf_document_get_page_label;
ev_document_class->render = pdf_document_render;
+ ev_document_class->get_thumbnail = pdf_document_get_thumbnail;
ev_document_class->get_info = pdf_document_get_info;
ev_document_class->get_backend_info = pdf_document_get_backend_info;
ev_document_class->support_synctex = pdf_document_support_synctex;
@@ -1381,116 +1474,6 @@ pdf_document_document_images_iface_init (EvDocumentImagesInterface *iface)
iface->get_image = pdf_document_images_get_image;
}
-static GdkPixbuf *
-make_thumbnail_for_page (PopplerPage *poppler_page,
- EvRenderContext *rc,
- gint width,
- gint height)
-{
- GdkPixbuf *pixbuf;
-
-#ifdef POPPLER_WITH_GDK
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
- width, height);
- gdk_pixbuf_fill (pixbuf, 0xffffffff);
-
- ev_document_fc_mutex_lock ();
- poppler_page_render_to_pixbuf (poppler_page, 0, 0,
- width, height,
- rc->scale, rc->rotation, pixbuf);
- ev_document_fc_mutex_unlock ();
-#else
- cairo_surface_t *surface;
-
- ev_document_fc_mutex_lock ();
- surface = pdf_page_render (poppler_page, width, height, rc);
- ev_document_fc_mutex_unlock ();
-
- pixbuf = ev_document_misc_pixbuf_from_surface (surface);
- cairo_surface_destroy (surface);
-#endif /* POPPLER_WITH_GDK */
-
- return pixbuf;
-}
-
-static GdkPixbuf *
-pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
- EvRenderContext *rc,
- gboolean border)
-{
- PdfDocument *pdf_document = PDF_DOCUMENT (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);
-
- 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
- cairo_surface_t *surface;
-
- surface = poppler_page_get_thumbnail (poppler_page);
- if (surface) {
- pixbuf = ev_document_misc_pixbuf_from_surface (surface);
- cairo_surface_destroy (surface);
- }
-#endif /* POPPLER_WITH_GDK */
-
- 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 (poppler_page, rc, width, height);
- }
-
- if (border && pixbuf) {
- border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
- g_object_unref (pixbuf);
- pixbuf = border_pixbuf;
- }
-
- return pixbuf;
-}
-
-static void
-pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = pdf_document_thumbnails_get_thumbnail;
-}
-
-
static GList *
pdf_document_find_find_text (EvDocumentFind *document_find,
EvPage *page,
diff --git a/backend/pixbuf/pixbuf-document.c b/backend/pixbuf/pixbuf-document.c
index 978970d..ae7b437 100644
--- a/backend/pixbuf/pixbuf-document.c
+++ b/backend/pixbuf/pixbuf-document.c
@@ -21,7 +21,6 @@
#include <glib/gi18n-lib.h>
#include "pixbuf-document.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-misc.h"
#include "ev-file-helpers.h"
@@ -41,13 +40,7 @@ struct _PixbufDocument
typedef struct _PixbufDocumentClass PixbufDocumentClass;
-static void pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
-
-EV_BACKEND_REGISTER_WITH_CODE (PixbufDocument, pixbuf_document,
- {
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
- pixbuf_document_document_thumbnails_iface_init)
- });
+EV_BACKEND_REGISTER (PixbufDocument, pixbuf_document)
static gboolean
pixbuf_document_load (EvDocument *document,
@@ -127,6 +120,27 @@ pixbuf_document_render (EvDocument *document,
return surface;
}
+static GdkPixbuf *
+pixbuf_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+ GdkPixbuf *pixbuf, *rotated_pixbuf;
+ gint width, height;
+
+ width = (gint) (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale);
+ height = (gint) (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale);
+
+ pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf,
+ width, height,
+ GDK_INTERP_BILINEAR);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
+ g_object_unref (pixbuf);
+
+ return rotated_pixbuf;
+}
+
static void
pixbuf_document_finalize (GObject *object)
{
@@ -151,37 +165,9 @@ pixbuf_document_class_init (PixbufDocumentClass *klass)
ev_document_class->get_n_pages = pixbuf_document_get_n_pages;
ev_document_class->get_page_size = pixbuf_document_get_page_size;
ev_document_class->render = pixbuf_document_render;
+ ev_document_class->get_thumbnail = pixbuf_document_get_thumbnail;
}
-static GdkPixbuf *
-pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
- EvRenderContext *rc,
- gboolean border)
-{
- PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
- GdkPixbuf *pixbuf, *rotated_pixbuf;
- gint width, height;
-
- width = (gint) (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale);
- height = (gint) (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale);
-
- pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf,
- width, height,
- GDK_INTERP_BILINEAR);
-
- rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
- g_object_unref (pixbuf);
-
- return rotated_pixbuf;
-}
-
-static void
-pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = pixbuf_document_thumbnails_get_thumbnail;
-}
-
-
static void
pixbuf_document_init (PixbufDocument *pixbuf_document)
{
diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c
index 256d9be..23957cd 100644
--- a/backend/ps/ev-spectre.c
+++ b/backend/ps/ev-spectre.c
@@ -27,7 +27,6 @@
#include "ev-spectre.h"
#include "ev-file-exporter.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-misc.h"
struct _PSDocument {
@@ -42,12 +41,9 @@ struct _PSDocumentClass {
};
static void ps_document_file_exporter_iface_init (EvFileExporterInterface *iface);
-static void ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
EV_BACKEND_REGISTER_WITH_CODE (PSDocument, ps_document,
{
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
- ps_document_document_thumbnails_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
ps_document_file_exporter_iface_init);
});
@@ -348,42 +344,6 @@ ps_document_class_init (PSDocumentClass *klass)
ev_document_class->render = ps_document_render;
}
-/* EvDocumentThumbnailsIface */
-static GdkPixbuf *
-ps_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
- EvRenderContext *rc,
- gboolean border)
-{
- PSDocument *ps = PS_DOCUMENT (document_thumbnails);
- cairo_surface_t *surface;
- GdkPixbuf *pixbuf = NULL;
-
- surface = ps_document_render (EV_DOCUMENT (ps), rc);
- if (!surface) {
- g_warning ("Error rendering thumbnail");
- return NULL;
- }
-
- pixbuf = ev_document_misc_pixbuf_from_surface (surface);
- cairo_surface_destroy (surface);
-
- if (border) {
- GdkPixbuf *border_pixbuf;
-
- border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
- g_object_unref (pixbuf);
- pixbuf = border_pixbuf;
- }
-
- return pixbuf;
-}
-
-static void
-ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = ps_document_thumbnails_get_thumbnail;
-}
-
/* EvFileExporterIface */
static void
ps_document_file_exporter_begin (EvFileExporter *exporter,
diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c
index 80aec9b..1be2aec 100644
--- a/backend/tiff/tiff-document.c
+++ b/backend/tiff/tiff-document.c
@@ -31,7 +31,6 @@
#include "tiff2ps.h"
#include "tiff-document.h"
#include "ev-document-misc.h"
-#include "ev-document-thumbnails.h"
#include "ev-file-exporter.h"
#include "ev-file-helpers.h"
@@ -53,13 +52,10 @@ struct _TiffDocument
typedef struct _TiffDocumentClass TiffDocumentClass;
-static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
static void tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface);
EV_BACKEND_REGISTER_WITH_CODE (TiffDocument, tiff_document,
{
- EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
- tiff_document_document_thumbnails_iface_init);
EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
tiff_document_document_file_exporter_iface_init);
});
@@ -312,7 +308,7 @@ tiff_document_render (EvDocument *document,
}
static GdkPixbuf *
-tiff_document_render_pixbuf (EvDocument *document,
+tiff_document_get_thumbnail (EvDocument *document,
EvRenderContext *rc)
{
TiffDocument *tiff_document = TIFF_DOCUMENT (document);
@@ -424,34 +420,10 @@ tiff_document_class_init (TiffDocumentClass *klass)
ev_document_class->get_n_pages = tiff_document_get_n_pages;
ev_document_class->get_page_size = tiff_document_get_page_size;
ev_document_class->render = tiff_document_render;
+ ev_document_class->get_thumbnail = tiff_document_get_thumbnail;
ev_document_class->get_page_label = tiff_document_get_page_label;
}
-static GdkPixbuf *
-tiff_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
- EvRenderContext *rc,
- gboolean border)
-{
- GdkPixbuf *pixbuf;
-
- pixbuf = tiff_document_render_pixbuf (EV_DOCUMENT (document), rc);
-
- if (border) {
- GdkPixbuf *tmp_pixbuf = pixbuf;
-
- pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
- g_object_unref (tmp_pixbuf);
- }
-
- return pixbuf;
-}
-
-static void
-tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
-{
- iface->get_thumbnail = tiff_document_thumbnails_get_thumbnail;
-}
-
/* postscript exporter implementation */
static void
tiff_document_file_exporter_begin (EvFileExporter *exporter,
diff --git a/evince-document.h b/evince-document.h
index 3e38c25..1db675b 100644
--- a/evince-document.h
+++ b/evince-document.h
@@ -38,7 +38,6 @@
#include <libdocument/ev-document-links.h>
#include <libdocument/ev-document-misc.h>
#include <libdocument/ev-document-security.h>
-#include <libdocument/ev-document-thumbnails.h>
#include <libdocument/ev-document-transition.h>
#include <libdocument/ev-document-type-builtins.h>
#include <libdocument/ev-file-exporter.h>
diff --git a/libdocument/Makefile.am b/libdocument/Makefile.am
index e8bad83..7ca7fc8 100644
--- a/libdocument/Makefile.am
+++ b/libdocument/Makefile.am
@@ -23,7 +23,6 @@ INST_H_SRC_FILES = \
ev-document-misc.h \
ev-document-print.h \
ev-document-security.h \
- ev-document-thumbnails.h \
ev-document-transition.h \
ev-document-text.h \
ev-file-exporter.h \
@@ -64,7 +63,6 @@ libevdocument3_la_SOURCES= \
ev-document-annotations.c \
ev-document-attachments.c \
ev-document-factory.c \
- ev-document-thumbnails.c \
ev-document-fonts.c \
ev-document-layers.c \
ev-document-links.c \
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c
index 70349dc..d7ee2c1 100644
--- a/libdocument/ev-document.c
+++ b/libdocument/ev-document.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "ev-document.h"
+#include "ev-document-misc.h"
#include "synctex_parser.h"
#define EV_DOCUMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_DOCUMENT, EvDocumentPrivate))
@@ -581,6 +582,32 @@ ev_document_render (EvDocument *document,
return klass->render (document, rc);
}
+static GdkPixbuf *
+_ev_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc)
+{
+ cairo_surface_t *surface;
+ GdkPixbuf *pixbuf;
+
+ surface = ev_document_render (document, rc);
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+
+ return pixbuf;
+}
+
+GdkPixbuf *
+ev_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ if (klass->get_thumbnail)
+ return klass->get_thumbnail (document, rc);
+
+ return _ev_document_get_thumbnail (document, rc);
+}
+
const gchar *
ev_document_get_uri (EvDocument *document)
{
diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h
index 63d2a8e..d282892 100644
--- a/libdocument/ev-document.h
+++ b/libdocument/ev-document.h
@@ -109,6 +109,8 @@ struct _EvDocumentClass
EvPage *page);
cairo_surface_t * (* render) (EvDocument *document,
EvRenderContext *rc);
+ GdkPixbuf * (* get_thumbnail) (EvDocument *document,
+ EvRenderContext *rc);
EvDocumentInfo * (* get_info) (EvDocument *document);
gboolean (* get_backend_info)(EvDocument *document,
EvDocumentBackendInfo *info);
@@ -150,6 +152,8 @@ gchar *ev_document_get_page_label (EvDocument *document,
gint page_index);
cairo_surface_t *ev_document_render (EvDocument *document,
EvRenderContext *rc);
+GdkPixbuf *ev_document_get_thumbnail (EvDocument *document,
+ EvRenderContext *rc);
const gchar *ev_document_get_uri (EvDocument *document);
const gchar *ev_document_get_title (EvDocument *document);
gboolean ev_document_is_page_size_uniform (EvDocument *document);
diff --git a/libview/ev-jobs.c b/libview/ev-jobs.c
index e152275..3e33886 100644
--- a/libview/ev-jobs.c
+++ b/libview/ev-jobs.c
@@ -21,7 +21,6 @@
#include <config.h>
#include "ev-jobs.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-links.h"
#include "ev-document-images.h"
#include "ev-document-forms.h"
@@ -765,6 +764,7 @@ ev_job_thumbnail_run (EvJob *job)
{
EvJobThumbnail *job_thumb = EV_JOB_THUMBNAIL (job);
EvRenderContext *rc;
+ GdkPixbuf *pixbuf;
EvPage *page;
ev_debug_message (DEBUG_JOBS, "%d (%p)", job_thumb->page, job);
@@ -776,11 +776,13 @@ ev_job_thumbnail_run (EvJob *job)
rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
g_object_unref (page);
- job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (job->document),
- rc, TRUE);
+ pixbuf = ev_document_get_thumbnail (job->document, rc);
g_object_unref (rc);
ev_document_doc_mutex_unlock ();
+ job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
+ g_object_unref (pixbuf);
+
ev_job_succeeded (job);
return FALSE;
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index ef0e3a9..4854e93 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -32,7 +32,6 @@
#include <gtk/gtk.h>
#include "ev-document-misc.h"
-#include "ev-document-thumbnails.h"
#include "ev-job-scheduler.h"
#include "ev-sidebar-page.h"
#include "ev-sidebar-thumbnails.h"
@@ -822,8 +821,7 @@ ev_sidebar_thumbnails_document_changed_cb (EvDocumentModel *model,
EvDocument *document = ev_document_model_get_document (model);
EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
- if (!EV_IS_DOCUMENT_THUMBNAILS (document) ||
- ev_document_get_n_pages (document) <= 0 ||
+ if (ev_document_get_n_pages (document) <= 0 ||
!ev_document_check_dimensions (document)) {
return;
}
@@ -931,7 +929,7 @@ static gboolean
ev_sidebar_thumbnails_support_document (EvSidebarPage *sidebar_page,
EvDocument *document)
{
- return (EV_IS_DOCUMENT_THUMBNAILS (document));
+ return TRUE;
}
static const gchar*
diff --git a/shell/ev-window.c b/shell/ev-window.c
index f1d3bd9..89d18d9 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -56,7 +56,6 @@
#include "ev-document-fonts.h"
#include "ev-document-images.h"
#include "ev-document-links.h"
-#include "ev-document-thumbnails.h"
#include "ev-document-annotations.h"
#include "ev-document-type-builtins.h"
#include "ev-document-misc.h"
@@ -1310,8 +1309,7 @@ ev_window_refresh_window_thumbnail (EvWindow *ev_window)
gint rotation;
EvDocument *document = ev_window->priv->document;
- if (!EV_IS_DOCUMENT_THUMBNAILS (document) ||
- ev_document_get_n_pages (document) <= 0 ||
+ if (ev_document_get_n_pages (document) <= 0 ||
!ev_document_check_dimensions (document)) {
return;
}
diff --git a/thumbnailer/evince-thumbnailer.c b/thumbnailer/evince-thumbnailer.c
index 31da3d3..94d6b77 100644
--- a/thumbnailer/evince-thumbnailer.c
+++ b/thumbnailer/evince-thumbnailer.c
@@ -137,8 +137,7 @@ evince_thumbnail_pngenc_get (EvDocument *document, const char *thumbnail, int si
ev_document_get_page_size (document, 0, &width, &height);
rc = ev_render_context_new (page, 0, size / width);
- pixbuf = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (document),
- rc, FALSE);
+ pixbuf = ev_document_get_thumbnail (document, rc);
g_object_unref (rc);
g_object_unref (page);
@@ -270,12 +269,6 @@ main (int argc, char *argv[])
return -2;
}
- if (!EV_IS_DOCUMENT_THUMBNAILS (document)) {
- g_object_unref (document);
- ev_shutdown ();
- return -2;
- }
-
if (EV_IS_ASYNC_RENDERER (document)) {
struct AsyncData data;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]