diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/ev-document.c | 13 | ||||
-rw-r--r-- | backend/ev-document.h | 4 | ||||
-rw-r--r-- | backend/ev-page-cache.c | 16 | ||||
-rw-r--r-- | backend/ev-page-cache.h | 3 |
4 files changed, 35 insertions, 1 deletions
diff --git a/backend/ev-document.c b/backend/ev-document.c index 080af0b..d4d6f20 100644 --- a/backend/ev-document.c +++ b/backend/ev-document.c @@ -202,6 +202,19 @@ ev_document_get_page_size (EvDocument *document, } char * +ev_document_get_page_label(EvDocument *document, + int page) +{ + EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); + + LOG ("ev_document_get_page_label"); + if (iface->get_page_label == NULL) + return NULL; + + return iface->get_page_label (document, page); +} + +char * ev_document_get_text (EvDocument *document, GdkRectangle *rect) { diff --git a/backend/ev-document.h b/backend/ev-document.h index 15b2cc9..e5c91b7 100644 --- a/backend/ev-document.h +++ b/backend/ev-document.h @@ -79,6 +79,8 @@ struct _EvDocumentIface int page, int *width, int *height); + char * (* get_page_label) (EvDocument *document, + int page); char * (* get_text) (EvDocument *document, GdkRectangle *rect); EvLink * (* get_link) (EvDocument *document, @@ -111,6 +113,8 @@ void ev_document_get_page_size (EvDocument *document, int page, int *width, int *height); +char *ev_document_get_page_label(EvDocument *document, + int page); char *ev_document_get_text (EvDocument *document, GdkRectangle *rect); EvLink *ev_document_get_link (EvDocument *document, diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c index f16ddc5..2042394 100644 --- a/backend/ev-page-cache.c +++ b/backend/ev-page-cache.c @@ -16,6 +16,7 @@ struct _EvPageCache gint current_page; int n_pages; char *title; + char **page_labels; gboolean uniform; gint uniform_width; @@ -100,6 +101,7 @@ _ev_page_cache_new (EvDocument *document) page_cache->uniform = TRUE; page_cache->n_pages = ev_document_get_n_pages (document); page_cache->title = ev_document_get_title (document); + page_cache->page_labels = g_new0 (char *, page_cache->n_pages); ev_document_set_scale (document, 1.0); for (i = 0; i < page_cache->n_pages; i++) { @@ -107,6 +109,7 @@ _ev_page_cache_new (EvDocument *document) gint 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 (i == 0) { page_cache->uniform_width = page_width; @@ -228,6 +231,19 @@ ev_page_cache_get_size (EvPageCache *page_cache, *height = (*height) * scale; } +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_next_page (EvPageCache *page_cache) diff --git a/backend/ev-page-cache.h b/backend/ev-page-cache.h index 9edf67c..bf5e3d1 100644 --- a/backend/ev-page-cache.h +++ b/backend/ev-page-cache.h @@ -39,7 +39,8 @@ void ev_page_cache_get_size (EvPageCache *page_cache, gfloat scale, gint *width, gint *height); - +char *ev_page_cache_get_page_label (EvPageCache *page_cache, + gint page); /* Navigation */ gint ev_page_cache_get_current_page (EvPageCache *page_cache); void ev_page_cache_set_current_page (EvPageCache *page_cache, |