From f7c3085a0e3c5c813cf9ae40b55fd7390e9373e2 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Wed, 27 Dec 2006 17:33:22 +0000 Subject: Add page transition support in presentation mode. At the moment only page 2006-12-27 Carlos Garcia Campos * configure.ac: * backend/Makefile.am: * backend/ev-document-transition.[ch]: * pdf/ev-poppler.cc: (pdf_document_get_page_duration), (pdf_document_page_transition_iface_init): * shell/ev-view-private.h: * shell/ev-view.c: (ev_view_destroy), (page_changed_cb), (ev_view_set_presentation), (transition_next_page), (ev_view_presentation_transition_stop), (ev_view_presentation_transition_start), (ev_view_next_page): Add page transition support in presentation mode. At the moment only page duration is supported, but not transition effects. Fixes bug #309815. --- (limited to 'pdf/ev-poppler.cc') diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc index 2e0e46a..479a741 100644 --- a/pdf/ev-poppler.cc +++ b/pdf/ev-poppler.cc @@ -38,6 +38,7 @@ #include "ev-document-fonts.h" #include "ev-document-security.h" #include "ev-document-thumbnails.h" +#include "ev-document-transition.h" #include "ev-selection.h" #include "ev-attachment.h" @@ -86,6 +87,7 @@ static void pdf_document_document_fonts_iface_init (EvDocumentFontsIface static void pdf_document_find_iface_init (EvDocumentFindIface *iface); static void pdf_document_file_exporter_iface_init (EvFileExporterIface *iface); static void pdf_selection_iface_init (EvSelectionIface *iface); +static void pdf_document_page_transition_iface_init (EvDocumentTransitionIface *iface); static void pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails, gint page, gint size, @@ -119,6 +121,8 @@ G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT, pdf_document_file_exporter_iface_init); G_IMPLEMENT_INTERFACE (EV_TYPE_SELECTION, pdf_selection_iface_init); + G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_TRANSITION, + pdf_document_page_transition_iface_init); }); @@ -1637,6 +1641,36 @@ pdf_selection_iface_init (EvSelectionIface *iface) iface->get_selection_map = pdf_selection_get_selection_map; } +/* Page Transitions */ +static gdouble +pdf_document_get_page_duration (EvDocumentTransition *trans, + gint page) +{ +#ifdef HAVE_POPPLER_PAGE_GET_DURATION + PdfDocument *pdf_document; + PopplerPage *poppler_page; + gdouble duration = -1; + + pdf_document = PDF_DOCUMENT (trans); + poppler_page = poppler_document_get_page (pdf_document->document, page); + if (!poppler_page) + return -1; + + duration = poppler_page_get_duration (poppler_page); + g_object_unref (poppler_page); + + return duration; +#else + return -1; +#endif /* HAVE_POPPLER_PAGE_GET_DURATION */ +} + +static void +pdf_document_page_transition_iface_init (EvDocumentTransitionIface *iface) +{ + iface->get_page_duration = pdf_document_get_page_duration; +} + PdfDocument * pdf_document_new (void) { -- cgit v0.9.1