[evince] ev-jobs: Add support for rendering thumbnails to a cairo surface with EvJobThumbnail
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] ev-jobs: Add support for rendering thumbnails to a cairo surface with EvJobThumbnail
- Date: Sat, 22 Mar 2014 11:55:03 +0000 (UTC)
commit b840a17b7ae6cf32ce8bf98329b1e27ff2acc379
Author: Carlos Garcia Campos <carlosgc gnome org>
Date: Sat Mar 22 12:47:09 2014 +0100
ev-jobs: Add support for rendering thumbnails to a cairo surface with EvJobThumbnail
help/reference/libview/libevview-sections.txt | 2 +
libview/ev-jobs.c | 27 ++++++++++++++++++++++--
libview/ev-jobs.h | 10 +++++++++
3 files changed, 36 insertions(+), 3 deletions(-)
---
diff --git a/help/reference/libview/libevview-sections.txt b/help/reference/libview/libevview-sections.txt
index f20a0e0..c9f7ac2 100644
--- a/help/reference/libview/libevview-sections.txt
+++ b/help/reference/libview/libevview-sections.txt
@@ -195,6 +195,7 @@ EvJobAnnots
EvJobAnnotsClass
EvJobRunMode
EvJobPageDataFlags
+EvJobThumbnailFormat
ev_job_run
ev_job_cancel
ev_job_failed
@@ -214,6 +215,7 @@ ev_job_render_set_selection_info
ev_job_page_data_new
ev_job_thumbnail_new
ev_job_thumbnail_set_has_frame
+ev_job_thumbnail_set_output_format
ev_job_fonts_new
ev_job_load_new
ev_job_load_set_uri
diff --git a/libview/ev-jobs.c b/libview/ev-jobs.c
index 7e97d63..83c50d8 100644
--- a/libview/ev-jobs.c
+++ b/libview/ev-jobs.c
@@ -838,7 +838,7 @@ ev_job_thumbnail_run (EvJob *job)
{
EvJobThumbnail *job_thumb = EV_JOB_THUMBNAIL (job);
EvRenderContext *rc;
- GdkPixbuf *pixbuf;
+ GdkPixbuf *pixbuf = NULL;
EvPage *page;
ev_debug_message (DEBUG_JOBS, "%d (%p)", job_thumb->page, job);
@@ -850,11 +850,15 @@ ev_job_thumbnail_run (EvJob *job)
rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
g_object_unref (page);
- pixbuf = ev_document_get_thumbnail (job->document, rc);
+ if (job_thumb->format == EV_JOB_THUMBNAIL_PIXBUF)
+ pixbuf = ev_document_get_thumbnail (job->document, rc);
+ else
+ job_thumb->thumbnail_surface = ev_document_get_thumbnail_surface (job->document, rc);
g_object_unref (rc);
ev_document_doc_mutex_unlock ();
- if (pixbuf) {
+ /* EV_JOB_THUMBNAIL_SURFACE is not compatible with has_frame = TRUE */
+ if (job_thumb->format == EV_JOB_THUMBNAIL_PIXBUF && pixbuf) {
job_thumb->thumbnail = job_thumb->has_frame ?
ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf) : g_object_ref (pixbuf);
g_object_unref (pixbuf);
@@ -892,6 +896,7 @@ ev_job_thumbnail_new (EvDocument *document,
job->rotation = rotation;
job->scale = scale;
job->has_frame = TRUE;
+ job->format = EV_JOB_THUMBNAIL_PIXBUF;
return EV_JOB (job);
}
@@ -910,6 +915,22 @@ ev_job_thumbnail_set_has_frame (EvJobThumbnail *job,
job->has_frame = has_frame;
}
+/**
+ * ev_job_thumbnail_set_output_format:
+ * @job: a #EvJobThumbnail
+ * @format: a #EvJobThumbnailFormat
+ *
+ * Set the desired output format for the generated thumbnail
+ *
+ * Since: 3.14
+ */
+void
+ev_job_thumbnail_set_output_format (EvJobThumbnail *job,
+ EvJobThumbnailFormat format)
+{
+ job->format = format;
+}
+
/* EvJobFonts */
static void
ev_job_fonts_init (EvJobFonts *job)
diff --git a/libview/ev-jobs.h b/libview/ev-jobs.h
index ac851bf..634b41b 100644
--- a/libview/ev-jobs.h
+++ b/libview/ev-jobs.h
@@ -331,6 +331,11 @@ struct _EvJobPageDataClass
EvJobClass parent_class;
};
+typedef enum {
+ EV_JOB_THUMBNAIL_PIXBUF,
+ EV_JOB_THUMBNAIL_SURFACE
+} EvJobThumbnailFormat;
+
struct _EvJobThumbnail
{
EvJob parent;
@@ -341,6 +346,9 @@ struct _EvJobThumbnail
GdkPixbuf *thumbnail;
gboolean has_frame;
+
+ EvJobThumbnailFormat format;
+ cairo_surface_t *thumbnail_surface;
};
struct _EvJobThumbnailClass
@@ -536,6 +544,8 @@ EvJob *ev_job_thumbnail_new (EvDocument *document,
gdouble scale);
void ev_job_thumbnail_set_has_frame (EvJobThumbnail *job,
gboolean has_frame);
+void ev_job_thumbnail_set_output_format (EvJobThumbnail *job,
+ EvJobThumbnailFormat format);
/* EvJobFonts */
GType ev_job_fonts_get_type (void) G_GNUC_CONST;
EvJob *ev_job_fonts_new (EvDocument *document);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]