diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2008-04-14 17:07:39 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2008-04-14 17:07:39 (GMT) |
commit | b8aebf2e1ba5b4f9ff1e1256b28acb3e23947c51 (patch) | |
tree | f7d8b818735e00a7411fc902af3048df8d0459ac /backend/ps/ev-spectre.c | |
parent | 1aac2d41f056e15fefd248d67b2765da3a03ca1d (diff) |
Add EvPage so that we can hold a reference to the backend page. Form
2008-04-14 Carlos Garcia Campos <carlosgc@gnome.org>
* libdocument/Makefile.am:
* libdocument/ev-page.[ch]:
* libdocument/ev-render-context.[ch]: (ev_render_context_dispose),
(ev_render_context_new), (ev_render_context_set_page):
* libdocument/ev-form-field.[ch]: (ev_form_field_init),
(ev_form_field_finalize), (ev_form_field_class_init):
* libdocument/ev-document-forms.[ch]:
(ev_document_forms_get_form_fields):
* libdocument/ev-document.[ch]: (ev_document_get_page),
(ev_document_get_page_size), (ev_document_get_page_label):
* shell/ev-jobs.[ch]: (ev_job_thumbnail_dispose),
(ev_job_render_run), (ev_job_thumbnail_new),
(ev_job_thumbnail_run), (ev_job_print_run):
* shell/ev-page-cache.c: (ev_page_cache_new):
* shell/ev-pixbuf-cache.c: (job_page_ready_cb), (job_finished_cb),
(check_job_size_and_unref), (add_job):
* shell/ev-sidebar-thumbnails.c: (add_range):
* shell/ev-view.c: (ev_view_form_field_get_region),
(ev_view_form_field_button_create_widget),
(ev_view_form_field_text_save), (ev_view_form_field_choice_save),
(ev_view_handle_form_field), (ev_view_size_allocate),
(get_selected_text):
* shell/ev-window.c: (ev_window_refresh_window_thumbnail):
* backend/pdf/ev-poppler.cc: (pdf_document_get_page_size),
(pdf_document_get_page), (pdf_document_get_page_label),
(pdf_document_render), (pdf_document_get_info),
(pdf_document_document_iface_init),
(pdf_document_thumbnails_get_thumbnail),
(pdf_document_thumbnails_get_dimensions),
(pdf_document_file_exporter_do_page),
(pdf_selection_render_selection),
(pdf_selection_get_selected_text),
(pdf_selection_get_selection_region),
(pdf_selection_get_selection_map),
(pdf_document_forms_get_form_fields),
(pdf_document_forms_form_field_text_get_text),
(pdf_document_forms_form_field_text_set_text),
(pdf_document_forms_form_field_button_set_state),
(pdf_document_forms_form_field_button_get_state),
(pdf_document_forms_form_field_choice_get_item),
(pdf_document_forms_form_field_choice_get_n_items),
(pdf_document_forms_form_field_choice_is_item_selected),
(pdf_document_forms_form_field_choice_select_item),
(pdf_document_forms_form_field_choice_toggle_item),
(pdf_document_forms_form_field_choice_unselect_all),
(pdf_document_forms_form_field_choice_set_text),
(pdf_document_forms_form_field_choice_get_text):
* backend/ps/ev-spectre.c: (ps_document_get_page),
(ps_document_get_page_size), (ps_document_get_page_label),
(ps_document_render), (ps_document_document_iface_init),
(ps_document_file_exporter_do_page):
* backend/tiff/tiff-document.c: (tiff_document_get_page_size),
(tiff_document_render), (tiff_document_render_pixbuf),
(tiff_document_file_exporter_do_page):
* backend/pixbuf/pixbuf-document.c:
(pixbuf_document_get_page_size):
* backend/comics/comics-document.c:
(comics_document_get_page_size), (comics_document_render_pixbuf):
* backend/djvu/djvu-document.c: (djvu_document_get_page_size),
(djvu_document_render), (djvu_selection_get_selected_text),
(djvu_document_thumbnails_get_thumbnail),
(djvu_document_file_exporter_do_page),
(djvu_document_find_get_result):
* backend/dvi/dvi-document.c: (dvi_document_get_page_size),
(dvi_document_render), (dvi_document_thumbnails_get_dimensions),
(dvi_document_thumbnails_get_thumbnail),
(dvi_document_file_exporter_do_page):
* backend/impress/impress-document.c:
(impress_document_get_page_size),
(impress_document_render_pixbuf):
* thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get):
Add EvPage so that we can hold a reference to the backend
page. Form fields keep now a reference to the poppler page
improving performance since we don't have to create/destroy the
poppler field for every form operation. This will be needed for
annotations too.
svn path=/trunk/; revision=3004
Diffstat (limited to 'backend/ps/ev-spectre.c')
-rw-r--r-- | backend/ps/ev-spectre.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c index 6fe5869..54b5957 100644 --- a/backend/ps/ev-spectre.c +++ b/backend/ps/ev-spectre.c @@ -164,6 +164,22 @@ ps_document_get_n_pages (EvDocument *document) return spectre_document_get_n_pages (ps->doc); } +static EvPage * +ps_document_get_page (EvDocument *document, + gint index) +{ + PSDocument *ps = PS_DOCUMENT (document); + SpectrePage *ps_page; + EvPage *page; + + ps_page = spectre_document_get_page (ps->doc, index); + page = ev_page_new (index); + page->backend_page = (EvBackendPage)ps_page; + page->backend_destroy_func = (EvBackendPageDestroyFunc)spectre_page_free; + + return page; +} + static gint get_page_rotation (SpectrePage *page) { @@ -184,17 +200,17 @@ get_page_rotation (SpectrePage *page) static void ps_document_get_page_size (EvDocument *document, - int page, + EvPage *page, double *width, double *height) { - PSDocument *ps = PS_DOCUMENT (document); SpectrePage *ps_page; gdouble page_width, page_height; gint pwidth, pheight; gint rotate; - ps_page = spectre_document_get_page (ps->doc, page); + ps_page = (SpectrePage *)page->backend_page; + spectre_page_get_size (ps_page, &pwidth, &pheight); rotate = get_page_rotation (ps_page); @@ -206,8 +222,6 @@ ps_document_get_page_size (EvDocument *document, page_height = pheight; } - spectre_page_free (ps_page); - if (width) { *width = page_width; } @@ -219,17 +233,9 @@ ps_document_get_page_size (EvDocument *document, static char * ps_document_get_page_label (EvDocument *document, - int page) + EvPage *page) { - PSDocument *ps = PS_DOCUMENT (document); - SpectrePage *ps_page; - gchar *label; - - ps_page = spectre_document_get_page (ps->doc, page); - label = g_strdup (spectre_page_get_label (ps_page)); - spectre_page_free (ps_page); - - return label; + return g_strdup (spectre_page_get_label ((SpectrePage *)page->backend_page)); } static EvDocumentInfo * @@ -268,7 +274,6 @@ static cairo_surface_t * ps_document_render (EvDocument *document, EvRenderContext *rc) { - PSDocument *ps = PS_DOCUMENT (document); SpectrePage *ps_page; SpectreRenderContext *src; gint width_points; @@ -281,7 +286,8 @@ ps_document_render (EvDocument *document, cairo_surface_t *surface; static const cairo_user_data_key_t key; - ps_page = spectre_document_get_page (ps->doc, rc->page); + ps_page = (SpectrePage *)rc->page->backend_page; + spectre_page_get_size (ps_page, &width_points, &height_points); width = (gint) ((width_points * rc->scale) + 0.5); @@ -297,20 +303,16 @@ ps_document_render (EvDocument *document, spectre_render_context_free (src); if (!data) { - spectre_page_free (ps_page); return NULL; } if (spectre_page_status (ps_page)) { g_warning (spectre_status_to_string (spectre_page_status (ps_page))); g_free (data); - spectre_page_free (ps_page); return NULL; } - spectre_page_free (ps_page); - if (rotation == 90 || rotation == 270) { swidth = height; sheight = width; @@ -334,6 +336,7 @@ ps_document_document_iface_init (EvDocumentIface *iface) iface->load = ps_document_load; iface->save = ps_document_save; iface->get_n_pages = ps_document_get_n_pages; + iface->get_page = ps_document_get_page; iface->get_page_size = ps_document_get_page_size; iface->get_page_label = ps_document_get_page_label; iface->get_info = ps_document_get_info; @@ -433,7 +436,7 @@ ps_document_file_exporter_do_page (EvFileExporter *exporter, { PSDocument *ps = PS_DOCUMENT (exporter); - spectre_exporter_do_page (ps->exporter, rc->page); + spectre_exporter_do_page (ps->exporter, rc->page->index); } static void |