diff options
author | Jonathan Blandford <jrb@redhat.com> | 2005-03-31 15:34:35 (GMT) |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2005-03-31 15:34:35 (GMT) |
commit | e8096c18ba580156072e8c84103bee6f6d3f0bfc (patch) | |
tree | 4da3a4264a48a6830e7b12ec734ee4dc34de2b65 /shell/ev-pixbuf-cache.c | |
parent | 52ba586fff36cceccb753342a38deff970b18107 (diff) |
Remove pixbuf backend for now
Thu Mar 31 01:21:58 2005 Jonathan Blandford <jrb@redhat.com>
* Makefile.am: Remove pixbuf backend for now
* configure.ac: Require poppler-glib instead of just poppler.
* backend/ev-document-thumbnails.h: Add a comment
* backend/ev-document.h:
* backend/ev-document.c: (ev_document_class_init),
(ev_document_load), (ev_document_get_link),
(ev_document_get_links): Remove 3 methods and add get_links.
Also, made 0 based.
* backend/ev-jobs.c: (ev_job_render_new), (ev_job_render_run):
* backend/ev-jobs.h: now EvJobRender can grab the links for a document.
* backend/ev-link.c: (ev_link_set_title),
(ev_link_mapping_free_foreach), (ev_link_mapping_free),
(ev_link_mapping_find):
* backend/ev-link.h: Allow NULL titles. Also, introduce a mapping link.
* backend/ev-page-cache.c: (ev_page_cache_init),
(_ev_page_cache_new), (ev_page_cache_set_current_page),
(ev_page_cache_get_size), (ev_page_cache_next_page),
(ev_page_cache_prev_page): Fix to be 0 based.
* pdf/Makefile.am:
* pdf/ev-poppler.h:
* pdf/ev-poppler.cc: New backend.
* ps/ps-document.c: (ps_document_init), (ps_document_set_page),
(ps_document_get_page), (ps_document_document_iface_init):
* shell/ev-pixbuf-cache.h:
* shell/ev-pixbuf-cache.c: (ev_pixbuf_cache_init),
(dispose_cache_job_info), (job_finished_cb), (move_one_job),
(ev_pixbuf_cache_update_range), (copy_job_to_job_info),
(add_job_if_needed), (ev_pixbuf_cache_set_page_range),
(ev_pixbuf_cache_get_pixbuf), (ev_pixbuf_cache_get_link_mapping):
Fix up code to grab a page cache per each doc. Also, fix to be 0
based.
* shell/ev-sidebar-thumbnails.c:
(ev_sidebar_tree_selection_changed), (page_changed_cb),
(ev_sidebar_thumbnails_set_document): Fix to be 0 based.
* shell/ev-view.c: (status_message_from_link),
(find_page_at_location), (get_link_at_location),
(ev_view_motion_notify_event), (ev_view_button_release_event),
(ev_view_init): Use the new link code. Fix to be 0 based.
* shell/ev-window.c: (update_action_sensitivity),
(document_supports_sidebar): 0 based.
Diffstat (limited to 'shell/ev-pixbuf-cache.c')
-rw-r--r-- | shell/ev-pixbuf-cache.c | 74 |
1 files changed, 60 insertions, 14 deletions
diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c index 7d076db..7200b37 100644 --- a/shell/ev-pixbuf-cache.c +++ b/shell/ev-pixbuf-cache.c @@ -6,6 +6,7 @@ typedef struct _CacheJobInfo { EvJob *job; GdkPixbuf *pixbuf; + GList *link_mapping; } CacheJobInfo; struct _EvPixbufCache @@ -50,14 +51,16 @@ static void job_finished_cb (EvJob *job, EvPixbufCache *pixbuf_cache); static CacheJobInfo *find_job_cache (EvPixbufCache *pixbuf_cache, int page); - +static void copy_job_to_job_info (EvJobRender *job_render, + CacheJobInfo *job_info, + EvPixbufCache *pixbuf_cache); /* These are used for iterating through the prev and next arrays */ #define FIRST_VISABLE_PREV(pixbuf_cache) \ (MAX (0, pixbuf_cache->preload_cache_size + 1 - pixbuf_cache->start_page)) #define VISIBLE_NEXT_LEN(pixbuf_cache, page_cache) \ - (MIN(pixbuf_cache->preload_cache_size, ev_page_cache_get_n_pages (page_cache) - pixbuf_cache->end_page)) + (MIN(pixbuf_cache->preload_cache_size, ev_page_cache_get_n_pages (page_cache) - (1 + pixbuf_cache->end_page))) #define PAGE_CACHE_LEN(pixbuf_cache) \ ((pixbuf_cache->end_page - pixbuf_cache->start_page) + 1) @@ -66,8 +69,8 @@ G_DEFINE_TYPE (EvPixbufCache, ev_pixbuf_cache, G_TYPE_OBJECT) static void ev_pixbuf_cache_init (EvPixbufCache *pixbuf_cache) { - pixbuf_cache->start_page = 1; - pixbuf_cache->end_page = 1; + pixbuf_cache->start_page = 0; + pixbuf_cache->end_page = 0; pixbuf_cache->job_list = g_new0 (CacheJobInfo, PAGE_CACHE_LEN (pixbuf_cache)); pixbuf_cache->preload_cache_size = 1; @@ -123,6 +126,10 @@ dispose_cache_job_info (CacheJobInfo *job_info, g_object_unref (G_OBJECT (job_info->pixbuf)); job_info->pixbuf = NULL; } + if (job_info->link_mapping) { + ev_link_mapping_free (job_info->link_mapping); + job_info->link_mapping = NULL; + } } static void @@ -177,6 +184,12 @@ job_finished_cb (EvJob *job, g_object_unref (job_info->pixbuf); job_info->pixbuf = pixbuf; + if (job_render->link_mapping) { + if (job_info->link_mapping) + ev_link_mapping_free (job_info->link_mapping); + job_info->link_mapping = job_render->link_mapping; + } + if (job_info->job == job) job_info->job = NULL; g_object_unref (job); @@ -268,6 +281,7 @@ move_one_job (CacheJobInfo *job_info, *target_page = *job_info; job_info->job = NULL; job_info->pixbuf = NULL; + job_info->link_mapping = NULL; if (new_priority != priority && target_page->job) { g_print ("FIXME: update priority \n"); @@ -303,7 +317,7 @@ ev_pixbuf_cache_update_range (EvPixbufCache *pixbuf_cache, /* Start with the prev cache. */ page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size; for (i = 0; i < pixbuf_cache->preload_cache_size; i++) { - if (page < 1) { + if (page < 0) { dispose_cache_job_info (pixbuf_cache->prev_job + i, pixbuf_cache); } else { move_one_job (pixbuf_cache->prev_job + i, @@ -324,7 +338,7 @@ ev_pixbuf_cache_update_range (EvPixbufCache *pixbuf_cache, } for (i = 0; i < pixbuf_cache->preload_cache_size; i++) { - if (page > ev_page_cache_get_n_pages (page_cache)) { + if (page >= ev_page_cache_get_n_pages (page_cache)) { dispose_cache_job_info (pixbuf_cache->next_job + i, pixbuf_cache); } else { move_one_job (pixbuf_cache->next_job + i, @@ -347,6 +361,22 @@ ev_pixbuf_cache_update_range (EvPixbufCache *pixbuf_cache, pixbuf_cache->end_page = end_page; } +static void +copy_job_to_job_info (EvJobRender *job_render, + CacheJobInfo *job_info, + EvPixbufCache *pixbuf_cache) +{ + GdkPixbuf *pixbuf; + + pixbuf = g_object_ref (job_render->pixbuf); + + dispose_cache_job_info (job_info, pixbuf_cache); + + job_info->pixbuf = pixbuf; + if (job_render->link_mapping) + job_info->link_mapping = job_render->link_mapping; +} + static CacheJobInfo * find_job_cache (EvPixbufCache *pixbuf_cache, int page) @@ -426,7 +456,8 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache, /* make a new job now */ job_info->job = ev_job_render_new (pixbuf_cache->document, page, scale, - width, height); + width, height, + (job_info->link_mapping == NULL)?TRUE:FALSE); ev_job_queue_add_job (job_info->job, priority); g_signal_connect (job_info->job, "finished", G_CALLBACK (job_finished_cb), pixbuf_cache); } @@ -484,8 +515,8 @@ ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache, page_cache = ev_document_get_page_cache (pixbuf_cache->document); - g_return_if_fail (start_page > 0 && start_page <= ev_page_cache_get_n_pages (page_cache)); - g_return_if_fail (end_page > 0 && end_page <= ev_page_cache_get_n_pages (page_cache)); + g_return_if_fail (start_page >= 0 && start_page < ev_page_cache_get_n_pages (page_cache)); + g_return_if_fail (end_page >= 0 && end_page < ev_page_cache_get_n_pages (page_cache)); g_return_if_fail (end_page >= start_page); /* First, resize the page_range as needed. We cull old pages @@ -514,12 +545,27 @@ ev_pixbuf_cache_get_pixbuf (EvPixbufCache *pixbuf_cache, /* We don't need to wait for the idle to handle the callback */ if (job_info->job && EV_JOB (job_info->job)->finished) { - GdkPixbuf *pixbuf; - - pixbuf = g_object_ref (EV_JOB_RENDER (job_info->job)->pixbuf); - dispose_cache_job_info (job_info, pixbuf_cache); - job_info->pixbuf = pixbuf; + copy_job_to_job_info (EV_JOB_RENDER (job_info->job), job_info, pixbuf_cache); } return job_info->pixbuf; } + +GList * +ev_pixbuf_cache_get_link_mapping (EvPixbufCache *pixbuf_cache, + gint page) +{ + CacheJobInfo *job_info; + + job_info = find_job_cache (pixbuf_cache, page); + if (job_info == NULL) + return NULL; + + /* We don't need to wait for the idle to handle the callback */ + if (job_info->job && + EV_JOB (job_info->job)->finished) { + copy_job_to_job_info (EV_JOB_RENDER (job_info->job), job_info, pixbuf_cache); + } + + return job_info->link_mapping; +} |