Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorNickolay V. Shmyrev <nshmyrev@src.gnome.org>2005-06-07 23:28:54 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2005-06-07 23:28:54 (GMT)
commitbca369672136e5ff831ece9832afd42085808fba (patch)
treef40b0b02036bb97a0d4586077298be7a02e2de03 /backend
parent11bd1d65957b444c7491e4fb252f3f50ce8ad3d2 (diff)
PageCache and EvJobs are moved from backend to shell. Two new jobs to
load document in background and a statusbar to display this process. FileChooser now can select multiple uris.
Diffstat (limited to 'backend')
-rw-r--r--backend/Makefile.am6
-rw-r--r--backend/ev-document-fonts.c1
-rw-r--r--backend/ev-document-links.c1
-rw-r--r--backend/ev-document.c23
-rw-r--r--backend/ev-document.h2
-rw-r--r--backend/ev-job-queue.c380
-rw-r--r--backend/ev-job-queue.h39
-rw-r--r--backend/ev-jobs.c274
-rw-r--r--backend/ev-jobs.h154
-rw-r--r--backend/ev-page-cache.c466
-rw-r--r--backend/ev-page-cache.h73
11 files changed, 0 insertions, 1419 deletions
diff --git a/backend/Makefile.am b/backend/Makefile.am
index 322cc7d..b000dc4 100644
--- a/backend/Makefile.am
+++ b/backend/Makefile.am
@@ -28,12 +28,6 @@ libevbackend_la_SOURCES= \
ev-document-find.c \
ev-document-find.h \
ev-document-info.h \
- ev-job-queue.h \
- ev-job-queue.c \
- ev-jobs.h \
- ev-jobs.c \
- ev-page-cache.h \
- ev-page-cache.c \
ev-ps-exporter.c \
ev-ps-exporter.h \
ev-document-misc.h \
diff --git a/backend/ev-document-fonts.c b/backend/ev-document-fonts.c
index 9c4d4d6..fca1976 100644
--- a/backend/ev-document-fonts.c
+++ b/backend/ev-document-fonts.c
@@ -24,7 +24,6 @@
#include "config.h"
#include "ev-document-fonts.h"
-#include "ev-job-queue.h"
GType
ev_document_fonts_get_type (void)
diff --git a/backend/ev-document-links.c b/backend/ev-document-links.c
index d9baae0..7ab3468 100644
--- a/backend/ev-document-links.c
+++ b/backend/ev-document-links.c
@@ -24,7 +24,6 @@
#include "config.h"
#include "ev-document-links.h"
-#include "ev-job-queue.h"
GType
ev_document_links_get_type (void)
diff --git a/backend/ev-document.c b/backend/ev-document.c
index 3793050..d413083 100644
--- a/backend/ev-document.c
+++ b/backend/ev-document.c
@@ -23,7 +23,6 @@
#include "ev-document.h"
#include "ev-backend-marshalers.h"
-#include "ev-job-queue.h"
static void ev_document_class_init (gpointer g_class);
@@ -69,24 +68,6 @@ ev_document_class_init (gpointer g_class)
{
}
-#define PAGE_CACHE_STRING "ev-page-cache"
-
-EvPageCache *
-ev_document_get_page_cache (EvDocument *document)
-{
- EvPageCache *page_cache;
-
- g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
-
- page_cache = g_object_get_data (G_OBJECT (document), PAGE_CACHE_STRING);
- if (page_cache == NULL) {
- page_cache = _ev_page_cache_new (document);
- g_object_set_data_full (G_OBJECT (document), PAGE_CACHE_STRING, page_cache, g_object_unref);
- }
-
- return page_cache;
-}
-
GMutex *
ev_document_get_doc_mutex (void)
{
@@ -120,10 +101,6 @@ ev_document_load (EvDocument *document,
LOG ("ev_document_load");
retval = iface->load (document, uri, error);
- /* Call this to make the initial cached copy */
- if (retval)
- ev_document_get_page_cache (document);
-
return retval;
}
diff --git a/backend/ev-document.h b/backend/ev-document.h
index 6ff356f..ffc9c2e 100644
--- a/backend/ev-document.h
+++ b/backend/ev-document.h
@@ -43,7 +43,6 @@ typedef struct _EvDocumentIface EvDocumentIface;
typedef struct _EvPageCache EvPageCache;
typedef struct _EvPageCacheClass EvPageCacheClass;
-#include "ev-page-cache.h"
#define EV_DOCUMENT_ERROR ev_document_error_quark ()
@@ -95,7 +94,6 @@ struct _EvDocumentIface
GType ev_document_get_type (void);
GQuark ev_document_error_quark (void);
-EvPageCache *ev_document_get_page_cache (EvDocument *document);
GMutex *ev_document_get_doc_mutex (void);
void ev_document_doc_mutex_lock (void);
void ev_document_doc_mutex_unlock (void);
diff --git a/backend/ev-job-queue.c b/backend/ev-job-queue.c
deleted file mode 100644
index 1b3e496..0000000
--- a/backend/ev-job-queue.c
+++ /dev/null
@@ -1,380 +0,0 @@
-#include "ev-job-queue.h"
-
-/* Like glib calling convention, all functions with _locked in their name assume
- * that we've already locked the doc mutex and can freely and safely access
- * data.
- */
-GCond *render_cond = NULL;
-GMutex *ev_queue_mutex = NULL;
-
-static GQueue *links_queue = NULL;
-static GQueue *render_queue_high = NULL;
-static GQueue *render_queue_low = NULL;
-static GQueue *thumbnail_queue_high = NULL;
-static GQueue *thumbnail_queue_low = NULL;
-
-/* Queues used for backends supporting EvAsyncRender interface,
- they are executed on the main thread */
-static GQueue *async_render_queue_high = NULL;
-static GQueue *async_render_queue_low = NULL;
-static gboolean async_rendering = FALSE;
-
-static void ev_job_queue_run_next (void);
-
-static gboolean
-remove_job_from_queue_locked (GQueue *queue, EvJob *job)
-{
- GList *list;
-
- list = g_queue_find (queue, job);
- if (list) {
- g_object_unref (G_OBJECT (job));
- g_queue_delete_link (queue, list);
-
- return TRUE;
- }
- return FALSE;
-}
-
-static gboolean
-remove_job_from_async_queue (GQueue *queue, EvJob *job)
-{
- return remove_job_from_queue_locked (queue, job);
-}
-
-static void
-add_job_to_async_queue (GQueue *queue, EvJob *job)
-{
- g_object_ref (job);
- g_queue_push_tail (queue, job);
-}
-
-static void
-add_job_to_queue_locked (GQueue *queue,
- EvJob *job)
-{
- g_object_ref (job);
- g_queue_push_tail (queue, job);
- g_cond_broadcast (render_cond);
-}
-
-static gboolean
-notify_finished (GObject *job)
-{
- ev_job_finished (EV_JOB (job));
-
- return FALSE;
-}
-
-static void
-job_finished_cb (EvJob *job)
-{
- g_object_unref (job);
- async_rendering = FALSE;
- ev_job_queue_run_next ();
-}
-
-static void
-handle_job (EvJob *job)
-{
- g_object_ref (G_OBJECT (job));
-
- if (EV_JOB (job)->async) {
- async_rendering = TRUE;
- if (EV_IS_JOB_RENDER (job)) {
- g_signal_connect (job, "finished",
- G_CALLBACK (job_finished_cb), NULL);
- } else {
- g_assert_not_reached ();
- }
- }
-
- if (EV_IS_JOB_THUMBNAIL (job))
- ev_job_thumbnail_run (EV_JOB_THUMBNAIL (job));
- else if (EV_IS_JOB_LINKS (job))
- ev_job_links_run (EV_JOB_LINKS (job));
- else if (EV_IS_JOB_RENDER (job))
- ev_job_render_run (EV_JOB_RENDER (job));
-
- if (!EV_JOB (job)->async) {
- /* We let the idle own a ref, as we (the queue) are done with the job. */
- g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- (GSourceFunc) notify_finished,
- job,
- g_object_unref);
- }
-}
-
-static EvJob *
-search_for_jobs_unlocked (void)
-{
- EvJob *job;
-
- job = (EvJob *) g_queue_pop_head (render_queue_high);
- if (job)
- return job;
-
- job = (EvJob *) g_queue_pop_head (thumbnail_queue_high);
- if (job)
- return job;
-
- job = (EvJob *) g_queue_pop_head (render_queue_low);
- if (job)
- return job;
-
- job = (EvJob *) g_queue_pop_head (links_queue);
- if (job)
- return job;
-
- job = (EvJob *) g_queue_pop_head (thumbnail_queue_low);
- if (job)
- return job;
-
- return NULL;
-}
-
-static gboolean
-no_jobs_available_unlocked (void)
-{
- return g_queue_is_empty (render_queue_high)
- && g_queue_is_empty (render_queue_low)
- && g_queue_is_empty (links_queue)
- && g_queue_is_empty (thumbnail_queue_high)
- && g_queue_is_empty (thumbnail_queue_low);
-}
-
-/* the thread mainloop function */
-static gpointer
-ev_render_thread (gpointer data)
-{
- while (TRUE) {
- EvJob *job;
-
- g_mutex_lock (ev_queue_mutex);
- if (no_jobs_available_unlocked ()) {
- g_cond_wait (render_cond, ev_queue_mutex);
- }
-
- job = search_for_jobs_unlocked ();
- g_mutex_unlock (ev_queue_mutex);
-
- /* Now that we have our job, we handle it */
- if (job) {
- handle_job (job);
- g_object_unref (G_OBJECT (job));
- }
- }
- return NULL;
-
-}
-
-static void
-ev_job_queue_run_next (void)
-{
- EvJob *job;
-
- job = (EvJob *) g_queue_pop_head (async_render_queue_high);
-
- if (job == NULL) {
- job = (EvJob *) g_queue_pop_head (async_render_queue_low);
- }
-
- /* Now that we have our job, we handle it */
- if (job) {
- handle_job (job);
- g_object_unref (G_OBJECT (job));
- }
-}
-
-/* Public Functions */
-void
-ev_job_queue_init (void)
-{
- if (!g_thread_supported ()) g_thread_init (NULL);
-
- render_cond = g_cond_new ();
- ev_queue_mutex = g_mutex_new ();
-
- links_queue = g_queue_new ();
- render_queue_high = g_queue_new ();
- render_queue_low = g_queue_new ();
- async_render_queue_high = g_queue_new ();
- async_render_queue_low = g_queue_new ();
- thumbnail_queue_high = g_queue_new ();
- thumbnail_queue_low = g_queue_new ();
-
- g_thread_create (ev_render_thread, NULL, FALSE, NULL);
-
-}
-
-static GQueue *
-find_queue (EvJob *job,
- EvJobPriority priority)
-{
- if (EV_JOB (job)->async) {
- if (EV_IS_JOB_RENDER (job)) {
- if (priority == EV_JOB_PRIORITY_HIGH)
- return async_render_queue_high;
- else
- return async_render_queue_low;
- }
- } else {
- if (EV_IS_JOB_RENDER (job)) {
- if (priority == EV_JOB_PRIORITY_HIGH)
- return render_queue_high;
- else
- return render_queue_low;
- } else if (EV_IS_JOB_THUMBNAIL (job)) {
- if (priority == EV_JOB_PRIORITY_HIGH)
- return thumbnail_queue_high;
- else
- return thumbnail_queue_low;
- } else if (EV_IS_JOB_LINKS (job)) {
- /* the priority doesn't effect links */
- return links_queue;
- }
- }
-
- g_assert_not_reached ();
- return NULL;
-}
-
-void
-ev_job_queue_add_job (EvJob *job,
- EvJobPriority priority)
-{
- GQueue *queue;
-
- g_return_if_fail (EV_IS_JOB (job));
-
- queue = find_queue (job, priority);
-
- if (!EV_JOB (job)->async) {
- g_mutex_lock (ev_queue_mutex);
- add_job_to_queue_locked (queue, job);
- g_mutex_unlock (ev_queue_mutex);
- } else {
- add_job_to_async_queue (queue, job);
- if (!async_rendering) {
- ev_job_queue_run_next ();
- }
- }
-}
-
-static gboolean
-move_job_async (EvJob *job, GQueue *old_queue, GQueue *new_queue)
-{
- gboolean retval = FALSE;
-
- g_object_ref (job);
-
- if (remove_job_from_queue_locked (old_queue, job)) {
- add_job_to_async_queue (new_queue, job);
- retval = TRUE;
- }
-
- g_object_unref (job);
-
- return retval;
-}
-
-static gboolean
-move_job (EvJob *job, GQueue *old_queue, GQueue *new_queue)
-{
- gboolean retval = FALSE;
-
- g_mutex_lock (ev_queue_mutex);
- g_object_ref (job);
-
- if (remove_job_from_queue_locked (old_queue, job)) {
- add_job_to_queue_locked (new_queue, job);
- retval = TRUE;
- }
-
- g_object_unref (job);
- g_mutex_unlock (ev_queue_mutex);
-
- return retval;
-}
-
-gboolean
-ev_job_queue_update_job (EvJob *job,
- EvJobPriority new_priority)
-{
- gboolean retval = FALSE;
-
- g_return_val_if_fail (EV_IS_JOB (job), FALSE);
-
- if (EV_JOB (job)->async) {
- if (EV_IS_JOB_RENDER (job)) {
- if (new_priority == EV_JOB_PRIORITY_LOW) {
- retval = move_job_async (job, async_render_queue_high,
- async_render_queue_low);
- } else if (new_priority == EV_JOB_PRIORITY_HIGH) {
- retval = move_job_async (job, async_render_queue_low,
- async_render_queue_high);
- }
- } else {
- g_assert_not_reached ();
- }
- } else {
- if (EV_IS_JOB_THUMBNAIL (job)) {
- if (new_priority == EV_JOB_PRIORITY_LOW) {
- retval = move_job (job, thumbnail_queue_high,
- thumbnail_queue_low);
- } else if (new_priority == EV_JOB_PRIORITY_HIGH) {
- retval = move_job (job, thumbnail_queue_low,
- thumbnail_queue_high);
- }
- } else if (EV_IS_JOB_RENDER (job)) {
- if (new_priority == EV_JOB_PRIORITY_LOW) {
- retval = move_job (job, render_queue_high,
- render_queue_low);
- } else if (new_priority == EV_JOB_PRIORITY_HIGH) {
- retval = move_job (job, render_queue_low,
- render_queue_high);
- }
- } else {
- g_assert_not_reached ();
- }
- }
-
- return retval;
-}
-
-gboolean
-ev_job_queue_remove_job (EvJob *job)
-{
- gboolean retval = FALSE;
-
- g_return_val_if_fail (EV_IS_JOB (job), FALSE);
-
- if (EV_JOB (job)->async) {
- if (EV_IS_JOB_RENDER (job)) {
- retval = remove_job_from_async_queue (async_render_queue_high, job);
- retval = retval || remove_job_from_async_queue (async_render_queue_low, job);
- } else {
- g_assert_not_reached ();
- }
- } else {
- g_mutex_lock (ev_queue_mutex);
-
- if (EV_IS_JOB_THUMBNAIL (job)) {
- retval = remove_job_from_queue_locked (thumbnail_queue_high, job);
- retval = retval || remove_job_from_queue_locked (thumbnail_queue_low, job);
- } else if (EV_IS_JOB_RENDER (job)) {
- retval = remove_job_from_queue_locked (render_queue_high, job);
- retval = retval || remove_job_from_queue_locked (render_queue_low, job);
- } else if (EV_IS_JOB_LINKS (job)) {
- retval = remove_job_from_queue_locked (links_queue, job);
- } else {
- g_assert_not_reached ();
- }
-
- g_mutex_unlock (ev_queue_mutex);
- }
-
- return retval;
-}
-
-
diff --git a/backend/ev-job-queue.h b/backend/ev-job-queue.h
deleted file mode 100644
index e6e4c0e..0000000
--- a/backend/ev-job-queue.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2005 Red Hat, Inc
- *
- * Evince is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Evince is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EV_JOB_QUEUE_H__
-#define __EV_JOB_QUEUE_H__
-
-#include <gtk/gtk.h>
-#include "ev-jobs.h"
-
-G_BEGIN_DECLS
-
-
-void ev_job_queue_init (void);
-
-void ev_job_queue_add_job (EvJob *job,
- EvJobPriority priority);
-gboolean ev_job_queue_update_job (EvJob *job,
- EvJobPriority new_priority);
-gboolean ev_job_queue_remove_job (EvJob *job);
-
-G_END_DECLS
-
-#endif /* __EV_JOB_QUEUE_H__ */
diff --git a/backend/ev-jobs.c b/backend/ev-jobs.c
deleted file mode 100644
index 73b0614..0000000
--- a/backend/ev-jobs.c
+++ /dev/null
@@ -1,274 +0,0 @@
-#include "ev-jobs.h"
-#include "ev-job-queue.h"
-#include "ev-document-thumbnails.h"
-#include "ev-document-links.h"
-#include "ev-async-renderer.h"
-
-static void ev_job_init (EvJob *job);
-static void ev_job_class_init (EvJobClass *class);
-static void ev_job_links_init (EvJobLinks *job);
-static void ev_job_links_class_init (EvJobLinksClass *class);
-static void ev_job_render_init (EvJobRender *job);
-static void ev_job_render_class_init (EvJobRenderClass *class);
-static void ev_job_thumbnail_init (EvJobThumbnail *job);
-static void ev_job_thumbnail_class_init (EvJobThumbnailClass *class);
-
-enum
-{
- FINISHED,
- LAST_SIGNAL
-};
-
-static guint job_signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
-G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
-G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
-G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
-
-
-static void ev_job_init (EvJob *job) { /* Do Nothing */ }
-
-static void
-ev_job_dispose (GObject *object)
-{
- EvJob *job;
-
- job = EV_JOB (object);
-
- if (job->document) {
- g_object_unref (job->document);
- job->document = NULL;
- }
-
- (* G_OBJECT_CLASS (ev_job_parent_class)->dispose) (object);
-}
-
-static void
-ev_job_class_init (EvJobClass *class)
-{
- GObjectClass *oclass;
-
- oclass = G_OBJECT_CLASS (class);
-
- oclass->dispose = ev_job_dispose;
-
- job_signals [FINISHED] =
- g_signal_new ("finished",
- EV_TYPE_JOB,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvJobClass, finished),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-
-static void ev_job_links_init (EvJobLinks *job) { /* Do Nothing */ }
-
-static void
-ev_job_links_dispose (GObject *object)
-{
- EvJobLinks *job;
-
- job = EV_JOB_LINKS (object);
-
- if (job->model) {
- g_object_unref (job->model);
- job->model = NULL;
- }
-
- (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object);
-}
-
-static void
-ev_job_links_class_init (EvJobLinksClass *class)
-{
- GObjectClass *oclass;
-
- oclass = G_OBJECT_CLASS (class);
-
- oclass->dispose = ev_job_links_dispose;
-}
-
-
-static void ev_job_render_init (EvJobRender *job) { /* Do Nothing */ }
-
-static void
-ev_job_render_dispose (GObject *object)
-{
- EvJobRender *job;
-
- job = EV_JOB_RENDER (object);
-
- if (job->pixbuf) {
- g_object_unref (job->pixbuf);
- job->pixbuf = NULL;
- }
-
- (* G_OBJECT_CLASS (ev_job_render_parent_class)->dispose) (object);
-}
-
-static void
-ev_job_render_class_init (EvJobRenderClass *class)
-{
- GObjectClass *oclass;
-
- oclass = G_OBJECT_CLASS (class);
-
- oclass->dispose = ev_job_render_dispose;
-}
-
-static void ev_job_thumbnail_init (EvJobThumbnail *job) { /* Do Nothing */ }
-
-static void
-ev_job_thumbnail_dispose (GObject *object)
-{
- EvJobThumbnail *job;
-
- job = EV_JOB_THUMBNAIL (object);
-
- if (job->thumbnail) {
- g_object_unref (job->thumbnail);
- job->thumbnail = NULL;
- }
-
- (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
-}
-
-static void
-ev_job_thumbnail_class_init (EvJobThumbnailClass *class)
-{
- GObjectClass *oclass;
-
- oclass = G_OBJECT_CLASS (class);
-
- oclass->dispose = ev_job_thumbnail_dispose;
-}
-
-/* Public functions */
-void
-ev_job_finished (EvJob *job)
-{
- g_return_if_fail (EV_IS_JOB (job));
-
- g_signal_emit (job, job_signals[FINISHED], 0);
-}
-
-EvJob *
-ev_job_links_new (EvDocument *document)
-{
- EvJob *job;
-
- job = g_object_new (EV_TYPE_JOB_LINKS, NULL);
- job->document = g_object_ref (document);
-
- return job;
-}
-
-void
-ev_job_links_run (EvJobLinks *job)
-{
- g_return_if_fail (EV_IS_JOB_LINKS (job));
-
- ev_document_doc_mutex_lock ();
- job->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (EV_JOB (job)->document));
- EV_JOB (job)->finished = TRUE;
- ev_document_doc_mutex_unlock ();
-}
-
-
-EvJob *
-ev_job_render_new (EvDocument *document,
- gint page,
- double scale,
- gint width,
- gint height,
- gboolean include_links)
-{
- EvJobRender *job;
-
- job = g_object_new (EV_TYPE_JOB_RENDER, NULL);
-
- EV_JOB (job)->document = g_object_ref (document);
- job->page = page;
- job->scale = scale;
- job->target_width = width;
- job->target_height = height;
- job->include_links = include_links;
-
- if (EV_IS_ASYNC_RENDERER (document)) {
- EV_JOB (job)->async = TRUE;
- }
-
- return EV_JOB (job);
-}
-
-static void
-render_finished_cb (EvDocument *document, GdkPixbuf *pixbuf, EvJobRender *job)
-{
- g_signal_handlers_disconnect_by_func (EV_JOB (job)->document,
- render_finished_cb, job);
-
- EV_JOB (job)->finished = TRUE;
- job->pixbuf = g_object_ref (pixbuf);
- ev_job_finished (EV_JOB (job));
-}
-
-void
-ev_job_render_run (EvJobRender *job)
-{
- g_return_if_fail (EV_IS_JOB_RENDER (job));
-
- ev_document_doc_mutex_lock ();
-
- if (EV_JOB (job)->async) {
- EvAsyncRenderer *renderer = EV_ASYNC_RENDERER (EV_JOB (job)->document);
- ev_async_renderer_render_pixbuf (renderer, job->page, job->scale);
- g_signal_connect (EV_JOB (job)->document, "render_finished",
- G_CALLBACK (render_finished_cb), job);
- } else {
- job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document,
- job->page,
- job->scale);
- if (job->include_links)
- job->link_mapping = ev_document_get_links (EV_JOB (job)->document, job->page);
-
- EV_JOB (job)->finished = TRUE;
- }
-
- ev_document_doc_mutex_unlock ();
-}
-
-EvJob *
-ev_job_thumbnail_new (EvDocument *document,
- gint page,
- gint requested_width)
-{
- EvJobThumbnail *job;
-
- job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
-
- EV_JOB (job)->document = g_object_ref (document);
- job->page = page;
- job->requested_width = requested_width;
-
- return EV_JOB (job);
-}
-
-void
-ev_job_thumbnail_run (EvJobThumbnail *job)
-{
- g_return_if_fail (EV_IS_JOB_THUMBNAIL (job));
-
- ev_document_doc_mutex_lock ();
-
- job->thumbnail =
- ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
- job->page,
- job->requested_width,
- TRUE);
- EV_JOB (job)->finished = TRUE;
-
- ev_document_doc_mutex_unlock ();
-}
diff --git a/backend/ev-jobs.h b/backend/ev-jobs.h
deleted file mode 100644
index c89aa1e..0000000
--- a/backend/ev-jobs.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2005 Red Hat, Inc
- *
- * Evince is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Evince is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EV_JOBS_H__
-#define __EV_JOBS_H__
-
-#include <gtk/gtk.h>
-#include "ev-document.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EvJob EvJob;
-typedef struct _EvJobClass EvJobClass;
-
-typedef struct _EvJobRender EvJobRender;
-typedef struct _EvJobRenderClass EvJobRenderClass;
-
-typedef struct _EvJobThumbnail EvJobThumbnail;
-typedef struct _EvJobThumbnailClass EvJobThumbnailClass;
-
-typedef struct _EvJobLinks EvJobLinks;
-typedef struct _EvJobLinksClass EvJobLinksClass;
-
-#define EV_TYPE_JOB (ev_job_get_type())
-#define EV_JOB(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB, EvJob))
-#define EV_JOB_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), EV_TYPE_JOB, EvJobClass))
-#define EV_IS_JOB(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB))
-
-#define EV_TYPE_JOB_LINKS (ev_job_links_get_type())
-#define EV_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LINKS, EvJobLinks))
-#define EV_JOB_LINKS_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), EV_TYPE_JOB_LINKS, EvJobLinksClass))
-#define EV_IS_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LINKS))
-
-#define EV_TYPE_JOB_RENDER (ev_job_render_get_type())
-#define EV_JOB_RENDER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_RENDER, EvJobRender))
-#define EV_JOB_RENDER_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), EV_TYPE_JOB_RENDER, EvJobRenderClass))
-#define EV_IS_JOB_RENDER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_RENDER))
-
-#define EV_TYPE_JOB_THUMBNAIL (ev_job_thumbnail_get_type())
-#define EV_JOB_THUMBNAIL(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnail))
-#define EV_JOB_THUMBNAIL_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnailClass))
-#define EV_IS_JOB_THUMBNAIL(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_THUMBNAIL))
-
-typedef enum {
- EV_JOB_PRIORITY_LOW,
- EV_JOB_PRIORITY_HIGH,
-} EvJobPriority;
-
-struct _EvJob
-{
- GObject parent;
- EvDocument *document;
- gboolean finished;
- gboolean async;
-};
-
-struct _EvJobClass
-{
- GObjectClass parent_class;
-
- void (* finished) (EvJob *job);
-};
-
-struct _EvJobLinks
-{
- EvJob parent;
-
- GtkTreeModel *model;
-};
-
-struct _EvJobLinksClass
-{
- EvJobClass parent_class;
-};
-
-struct _EvJobRender
-{
- EvJob parent;
-
- gint page;
- double scale;
- gint target_width;
- gint target_height;
- GdkPixbuf *pixbuf;
- GList *link_mapping;
- gboolean include_links;
-};
-
-struct _EvJobRenderClass
-{
- EvJobClass parent_class;
-};
-
-struct _EvJobThumbnail
-{
- EvJob parent;
-
- gint page;
- gint requested_width;
- GdkPixbuf *thumbnail;
-};
-
-struct _EvJobThumbnailClass
-{
- EvJobClass parent_class;
-};
-
-
-/* Base job class */
-GType ev_job_get_type (void);
-void ev_job_finished (EvJob *job);
-
-/* EvJobLinks */
-GType ev_job_links_get_type (void);
-EvJob *ev_job_links_new (EvDocument *document);
-void ev_job_links_run (EvJobLinks *thumbnail);
-
-/* EvJobRender */
-GType ev_job_render_get_type (void);
-EvJob *ev_job_render_new (EvDocument *document,
- gint page,
- double scale,
- gint width,
- gint height,
- gboolean include_links);
-void ev_job_render_run (EvJobRender *thumbnail);
-
-/* EvJobThumbnail */
-GType ev_job_thumbnail_get_type (void);
-EvJob *ev_job_thumbnail_new (EvDocument *document,
- gint page,
- gint requested_width);
-void ev_job_thumbnail_run (EvJobThumbnail *thumbnail);
-
-
-G_END_DECLS
-
-#endif /* __EV_JOBS_H__ */
diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c
deleted file mode 100644
index 573e57e..0000000
--- a/backend/ev-page-cache.c
+++ /dev/null
@@ -1,466 +0,0 @@
-#include "ev-page-cache.h"
-#include "ev-job-queue.h"
-#include <stdlib.h>
-#include <string.h>
-
-typedef struct _EvPageCacheInfo
-{
- double width;
- double height;
-}
-EvPageCacheInfo;
-
-
-struct _EvPageCache
-{
- GObject parent;
-
- gint current_page;
- int n_pages;
- char *title;
- char **page_labels;
-
- gint max_label_chars;
- gboolean has_labels;
- gboolean uniform;
-
- double uniform_width;
- double uniform_height;
-
- double max_width;
- double max_height;
- double* height_to_page;
- double* dual_height_to_page;
-
- EvPageCacheInfo *size_cache;
- EvDocumentInfo *page_info;
-};
-
-struct _EvPageCacheClass
-{
- GObjectClass parent_class;
-
- void (* page_changed) (EvPageCache *page_cache, gint page);
-};
-
-enum
-{
- PAGE_CHANGED,
- N_SIGNALS,
-};
-
-static guint signals[N_SIGNALS] = {0, };
-
-static void ev_page_cache_init (EvPageCache *page_cache);
-static void ev_page_cache_class_init (EvPageCacheClass *page_cache);
-static void ev_page_cache_finalize (GObject *object);
-
-G_DEFINE_TYPE (EvPageCache, ev_page_cache, G_TYPE_OBJECT)
-
-static void
-ev_page_cache_init (EvPageCache *page_cache)
-{
- page_cache->current_page = -1;
- page_cache->max_label_chars = 0;
-}
-
-static void
-ev_page_cache_class_init (EvPageCacheClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = ev_page_cache_finalize;
-
- signals [PAGE_CHANGED] =
- g_signal_new ("page-changed",
- EV_TYPE_PAGE_CACHE,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EvPageCacheClass, page_changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
-}
-
-static void
-ev_page_cache_finalize (GObject *object)
-{
- EvPageCache *page_cache;
-
- page_cache = EV_PAGE_CACHE (object);
-
- g_free (page_cache->title);
- g_free (page_cache->size_cache);
- g_free (page_cache->height_to_page);
- g_free (page_cache->dual_height_to_page);
-
- ev_document_info_free (page_cache->page_info);
-}
-
-EvPageCache *
-_ev_page_cache_new (EvDocument *document)
-{
- EvPageCache *page_cache;
- EvPageCacheInfo *info;
- gint i;
- double saved_height;
-
- page_cache = (EvPageCache *) g_object_new (EV_TYPE_PAGE_CACHE, NULL);
-
- ev_document_doc_mutex_lock ();
-
- /* We read page information out of the document */
-
- /* Assume all pages are the same size until proven otherwise */
- page_cache->uniform = TRUE;
- page_cache->has_labels = FALSE;
- page_cache->n_pages = ev_document_get_n_pages (document);
- page_cache->page_labels = g_new0 (char *, page_cache->n_pages);
- page_cache->max_width = 0;
- page_cache->max_height = 0;
- page_cache->page_info = ev_document_get_info (document);
-
- if (page_cache->page_info->fields_mask & EV_DOCUMENT_INFO_TITLE) {
- page_cache->title = g_strdup (page_cache->page_info->title);
- } else {
- page_cache->title = NULL;
- }
-
- for (i = 0; i < page_cache->n_pages; i++) {
- double page_width = 0;
- double page_height = 0;
-
- ev_document_get_page_size (document, i, &page_width, &page_height);
-
- page_cache->page_labels[i] = ev_document_get_page_label (document, i);
-
- if (page_cache->page_labels[i] != NULL) {
-
- page_cache->max_label_chars = MAX(page_cache->max_label_chars,
- g_utf8_strlen (page_cache->page_labels[i], 256));
- if (!page_cache->has_labels) {
- gchar *expected_label;
-
- expected_label = g_strdup_printf ("%d", i + 1);
- if (strcmp (expected_label, page_cache->page_labels[i]))
- page_cache->has_labels = TRUE;
- g_free (expected_label);
- }
- }
-
- if (page_width > page_cache->max_width) {
- page_cache->max_width = page_width;
- }
-
- if (page_height > page_cache->max_height) {
- page_cache->max_height = page_height;
- }
-
- if (i == 0) {
- page_cache->uniform_width = page_width;
- page_cache->uniform_height = page_height;
- } else if (page_cache->uniform &&
- (page_cache->uniform_width != page_width ||
- page_cache->uniform_height != page_height)) {
- /* It's a different page size. Backfill the array. */
- int j;
-
- page_cache->size_cache = g_new0 (EvPageCacheInfo, page_cache->n_pages);
-
- for (j = 0; j < i; j++) {
- info = &(page_cache->size_cache [j]);
- info->width = page_cache->uniform_width;
- info->height = page_cache->uniform_height;
- }
- page_cache->uniform = FALSE;
-
- }
-
- if (! page_cache->uniform) {
- info = &(page_cache->size_cache [i]);
-
- info->width = page_width;
- info->height = page_height;
- }
- }
-
- page_cache->height_to_page = g_new0(double, page_cache->n_pages);
- page_cache->dual_height_to_page = g_new0(double, page_cache->n_pages / 2 + 1);
-
- saved_height = 0;
- for (i = 0; i < page_cache->n_pages; i++) {
-
- if (page_cache->uniform) {
- page_cache->height_to_page [i] = (i + 1) * page_cache->uniform_height;
- } else {
- page_cache->height_to_page [i] = saved_height + page_cache->size_cache [i].height;
- saved_height = page_cache->height_to_page [i];
- }
- }
-
- saved_height = 0;
- for (i = 0; i < page_cache->n_pages; i += 2) {
-
- if (page_cache->uniform) {
- page_cache->dual_height_to_page [i / 2] = (i / 2 + 1) * page_cache->uniform_height;
- } else {
- if (i == page_cache->n_pages - 1) {
- page_cache->dual_height_to_page [i / 2] =
- saved_height + page_cache->size_cache [i].height;
- }
- else {
- page_cache->dual_height_to_page [i / 2] = saved_height +
- MAX(page_cache->size_cache [i].height,
- page_cache->size_cache [i + 1].height);
- saved_height = page_cache->dual_height_to_page [i / 2];
- }
- }
- }
-
- /* make some sanity check assertions */
- if (! page_cache->uniform)
- g_assert (page_cache->size_cache != NULL);
- if (page_cache->uniform)
- g_assert (page_cache->uniform_width > 0 && page_cache->uniform_height > 0);
-
- ev_document_doc_mutex_unlock ();
-
- if (page_cache->n_pages > 0)
- ev_page_cache_set_current_page (page_cache, 0);
-
- return page_cache;
-}
-
-gint
-ev_page_cache_get_n_pages (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), 0);
-
- return page_cache->n_pages;
-}
-
-gint
-ev_page_cache_get_current_page (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), 0);
-
- return page_cache->current_page;
-}
-
-void
-ev_page_cache_set_current_page (EvPageCache *page_cache,
- int page)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
- g_return_if_fail (page >= 0 || page < page_cache->n_pages);
-
- if (page == page_cache->current_page)
- return;
-
- page_cache->current_page = page;
- g_signal_emit (page_cache, signals[PAGE_CHANGED], 0, page);
-}
-
-gboolean
-ev_page_cache_set_page_label (EvPageCache *page_cache,
- const char *page_label)
-{
- gint i, page;
- long value;
- char *endptr = NULL;
-
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE);
- g_return_val_if_fail (page_label != NULL, FALSE);
-
- /* First, look for a literal label match */
- for (i = 0; i < page_cache->n_pages; i ++) {
- if (page_cache->page_labels[i] != NULL &&
- ! strcmp (page_label, page_cache->page_labels[i])) {
- ev_page_cache_set_current_page (page_cache, i);
- return TRUE;
- }
- }
-
- /* Next, parse the label, and see if the number fits */
- value = strtol (page_label, &endptr, 10);
- if (endptr[0] == '\0') {
- /* Page number is an integer */
- page = MIN (G_MAXINT, value);
-
- /* convert from a page label to a page offset */
- page --;
- if (page >= 0 &&
- page < page_cache->n_pages &&
- page_cache->page_labels[page] == NULL) {
- ev_page_cache_set_current_page (page_cache, page);
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-void
-ev_page_cache_set_link (EvPageCache *page_cache,
- EvLink *link)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
- g_return_if_fail (EV_IS_LINK (link));
-
- ev_page_cache_set_current_page (page_cache, ev_link_get_page (link));
-}
-
-const char *
-ev_page_cache_get_title (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), NULL);
-
- return page_cache->title;
-}
-
-void
-ev_page_cache_get_size (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *width,
- gint *height)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
- g_return_if_fail (page >= 0 && page < page_cache->n_pages);
-
- if (page_cache->uniform) {
- if (width)
- *width = page_cache->uniform_width;
- if (height)
- *height = page_cache->uniform_height;
- } else {
- EvPageCacheInfo *info;
-
- info = &(page_cache->size_cache [page]);
-
- if (width)
- *width = info->width;
- if (height)
- *height = info->height;
- }
-
- if (width)
- *width = (int) ((*width) * scale + 0.5);
- if (width)
- *height = (int) ((*height) * scale + 0.5);
-
-}
-
-
-void
-ev_page_cache_get_max_width (EvPageCache *page_cache,
- gfloat scale,
- gint *width)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
-
- if (width)
- *width = page_cache->max_width * scale;
-}
-
-void
-ev_page_cache_get_max_height (EvPageCache *page_cache,
- gfloat scale,
- gint *height)
-{
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
-
- if (height)
- *height = page_cache->max_height * scale;
-}
-
-void
-ev_page_cache_get_height_to_page (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *height,
- gint *dual_height)
-{
- double result = 0.0;
- double dual_result = 0.0;
-
- g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
-
- if (page > 0)
- result = page_cache->height_to_page [page - 1];
-
- if (height)
- *height = result * scale;
-
- if (page > 1)
- dual_result = page_cache->dual_height_to_page [page / 2 - 1];
-
- if (dual_height)
- *dual_height = dual_result * scale;
-}
-
-gint
-ev_page_cache_get_max_label_chars (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), 0);
-
- return page_cache->max_label_chars;
-}
-
-gchar *
-ev_page_cache_get_page_label (EvPageCache *page_cache,
- gint page)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), NULL);
- g_return_val_if_fail (page >= 0 && page < page_cache->n_pages, NULL);
-
- if (page_cache->page_labels[page] == NULL)
- return g_strdup_printf ("%d", page + 1);
-
- return g_strdup (page_cache->page_labels[page]);
-}
-
-gboolean
-ev_page_cache_has_nonnumeric_page_labels (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE);
- return page_cache->has_labels;
-}
-
-const EvDocumentInfo *
-ev_page_cache_get_info (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), NULL);
-
- return page_cache->page_info;
-}
-
-
-gboolean
-ev_page_cache_next_page (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE);
-
- if (page_cache->current_page >= page_cache->n_pages - 1)
- return FALSE;
-
- ev_page_cache_set_current_page (page_cache, page_cache->current_page + 1);
- return TRUE;
-
-}
-
-gboolean
-ev_page_cache_prev_page (EvPageCache *page_cache)
-{
- g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE);
-
- if (page_cache->current_page <= 0)
- return FALSE;
-
- ev_page_cache_set_current_page (page_cache, page_cache->current_page - 1);
- return TRUE;
-}
-
diff --git a/backend/ev-page-cache.h b/backend/ev-page-cache.h
deleted file mode 100644
index 9de48b8..0000000
--- a/backend/ev-page-cache.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* this file is part of evince, a gnome document viewer
- *
- * Copyright (C) 2005 Red Hat, Inc
- *
- * Evince is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Evince is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef __EV_PAGE_CACHE_H__
-#define __EV_PAGE_CACHE_H__
-
-#include <gtk/gtkwidget.h>
-#include "ev-document.h"
-
-G_BEGIN_DECLS
-#define EV_TYPE_PAGE_CACHE (ev_page_cache_get_type ())
-#define EV_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_CACHE, EvPageCache))
-#define EV_IS_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PAGE_CACHE))
-
-GType ev_page_cache_get_type (void) G_GNUC_CONST;
-
-/* Used by ev-document.c only */
-EvPageCache *_ev_page_cache_new (EvDocument *document);
-gint ev_page_cache_get_n_pages (EvPageCache *page_cache);
-const char *ev_page_cache_get_title (EvPageCache *page_cache);
-void ev_page_cache_get_size (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *width,
- gint *height);
-void ev_page_cache_get_max_width (EvPageCache *page_cache,
- gfloat scale,
- gint *width);
-void ev_page_cache_get_max_height (EvPageCache *page_cache,
- gfloat scale,
- gint *height);
-void ev_page_cache_get_height_to_page (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *height,
- gint *dual_height);
-gint ev_page_cache_get_max_label_chars (EvPageCache *page_cache);
-char *ev_page_cache_get_page_label (EvPageCache *page_cache,
- gint page);
-gboolean ev_page_cache_has_nonnumeric_page_labels (EvPageCache *page_cache);
-const EvDocumentInfo *ev_page_cache_get_info (EvPageCache *page_cache);
-
-/* Navigation */
-gint ev_page_cache_get_current_page (EvPageCache *page_cache);
-void ev_page_cache_set_current_page (EvPageCache *page_cache,
- int page);
-gboolean ev_page_cache_set_page_label (EvPageCache *page_cache,
- const char *page_label);
-void ev_page_cache_set_link (EvPageCache *page_cache,
- EvLink *link);
-gboolean ev_page_cache_next_page (EvPageCache *page_cache);
-gboolean ev_page_cache_prev_page (EvPageCache *page_cache);
-
-
-G_END_DECLS
-
-#endif /* __EV_PAGE_CACHE_H__ */