X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=libview%2Fev-pixbuf-cache.c;h=41ccadcef8ee415d5d78d3e0c5ee27f9d6866f4d;hb=858d08e4a3794e93d7c6178099c78812f130161e;hp=d7d89f70d9d3f5b6f9dce47dd6f2b35532934072;hpb=5b09db3c6a81a31077ce710375bfbd397e26dc4a;p=evince.git diff --git a/libview/ev-pixbuf-cache.c b/libview/ev-pixbuf-cache.c index d7d89f70..41ccadce 100644 --- a/libview/ev-pixbuf-cache.c +++ b/libview/ev-pixbuf-cache.c @@ -2,11 +2,10 @@ #include "ev-pixbuf-cache.h" #include "ev-job-scheduler.h" #include "ev-page-cache.h" -#include "ev-document-images.h" +#include "ev-mapping.h" #include "ev-document-forms.h" -#include "ev-document-links.h" -#include "ev-image.h" -#include "ev-form-field.h" +#include "ev-document-images.h" +#include "ev-document-annotations.h" typedef struct _CacheJobInfo { @@ -22,6 +21,7 @@ typedef struct _CacheJobInfo GList *link_mapping; GList *image_mapping; GList *form_field_mapping; + GList *annots_mapping; GdkRegion *text_mapping; /* Selection data. @@ -177,17 +177,21 @@ dispose_cache_job_info (CacheJobInfo *job_info, job_info->region = NULL; } if (job_info->link_mapping) { - ev_link_mapping_free (job_info->link_mapping); + ev_mapping_list_free (job_info->link_mapping, g_object_unref); job_info->link_mapping = NULL; } if (job_info->image_mapping) { - ev_image_mapping_free (job_info->image_mapping); + ev_mapping_list_free (job_info->image_mapping, g_object_unref); job_info->image_mapping = NULL; } if (job_info->form_field_mapping) { - ev_form_field_mapping_free (job_info->form_field_mapping); + ev_mapping_list_free (job_info->form_field_mapping, g_object_unref); job_info->form_field_mapping = NULL; } + if (job_info->annots_mapping) { + ev_mapping_list_free (job_info->annots_mapping, g_object_unref); + job_info->annots_mapping = NULL; + } if (job_info->text_mapping) { gdk_region_destroy (job_info->text_mapping); job_info->text_mapping = NULL; @@ -373,6 +377,7 @@ move_one_job (CacheJobInfo *job_info, job_info->link_mapping = NULL; job_info->image_mapping = NULL; job_info->form_field_mapping = NULL; + job_info->annots_mapping = NULL; if (new_priority != priority && target_page->job) { ev_job_scheduler_update_job (target_page->job, new_priority); @@ -511,22 +516,28 @@ copy_job_to_job_info (EvJobRender *job_render, if (job_render->flags & EV_RENDER_INCLUDE_LINKS) { if (job_info->link_mapping) - ev_link_mapping_free (job_info->link_mapping); + ev_mapping_list_free (job_info->link_mapping, g_object_unref); job_info->link_mapping = job_render->link_mapping; } if (job_render->flags & EV_RENDER_INCLUDE_IMAGES) { if (job_info->image_mapping) - ev_image_mapping_free (job_info->image_mapping); + ev_mapping_list_free (job_info->image_mapping, g_object_unref); job_info->image_mapping = job_render->image_mapping; } if (job_render->flags & EV_RENDER_INCLUDE_FORMS) { if (job_info->form_field_mapping) - ev_form_field_mapping_free (job_info->form_field_mapping); + ev_mapping_list_free (job_info->form_field_mapping, g_object_unref); job_info->form_field_mapping = job_render->form_field_mapping; } + if (job_render->flags & EV_RENDER_INCLUDE_ANNOTS) { + if (job_info->annots_mapping) + ev_mapping_list_free (job_info->annots_mapping, g_object_unref); + job_info->annots_mapping = job_render->annots_mapping; + } + if (job_render->flags & EV_RENDER_INCLUDE_TEXT) { if (job_info->text_mapping) gdk_region_destroy (job_info->text_mapping); @@ -633,6 +644,8 @@ add_job (EvPixbufCache *pixbuf_cache, flags |= EV_RENDER_INCLUDE_IMAGES; if (job_info->form_field_mapping == NULL) flags |= EV_RENDER_INCLUDE_FORMS; + if (job_info->annots_mapping == NULL) + flags |= EV_RENDER_INCLUDE_ANNOTS; if (job_info->text_mapping == NULL) flags |= EV_RENDER_INCLUDE_TEXT; @@ -849,6 +862,28 @@ ev_pixbuf_cache_get_form_field_mapping (EvPixbufCache *pixbuf_cache, return job_info->form_field_mapping; } +GList * +ev_pixbuf_cache_get_annots_mapping (EvPixbufCache *pixbuf_cache, + gint page) +{ + CacheJobInfo *job_info; + + if (!EV_IS_DOCUMENT_ANNOTATIONS (pixbuf_cache->document)) + return NULL; + + 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->annots_mapping; +} + static gboolean new_selection_surface_needed (EvPixbufCache *pixbuf_cache, CacheJobInfo *job_info,