X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fev-page-cache.c;h=6302c42e03b973fcc8b79bdd8cdaf62d3b6d1346;hb=f1386f6788cdbcfac6020814faf8cea4f2f4bbaa;hp=6e559cb30929ca8a4bd22d6444c8b96daac20b16;hpb=4e8b4b4da36dd24ed5d3a19918dfcfdcc9840fac;p=evince.git diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c index 6e559cb3..6302c42e 100644 --- a/backend/ev-page-cache.c +++ b/backend/ev-page-cache.c @@ -19,8 +19,10 @@ struct _EvPageCache int n_pages; char *title; char **page_labels; - + + gboolean has_labels; gboolean uniform; + double uniform_width; double uniform_height; @@ -107,6 +109,7 @@ _ev_page_cache_new (EvDocument *document) /* Assume all pages are the same size until proven otherwise */ page_cache->uniform = TRUE; + page_cache->has_labels = FALSE; page_cache->n_pages = ev_document_get_n_pages (document); page_cache->page_labels = g_new0 (char *, page_cache->n_pages); page_cache->max_width_page_width = 0; @@ -125,9 +128,19 @@ _ev_page_cache_new (EvDocument *document) for (i = 0; i < page_cache->n_pages; i++) { double page_width = 0; double 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); + + page_cache->page_labels[i] = ev_document_get_page_label (document, i); + + if (!page_cache->has_labels && page_cache->page_labels[i] != NULL) { + gchar *expected_label; + + expected_label = g_strdup_printf ("%d", i + 1); + if (strcmp (expected_label, page_cache->page_labels[i])) + page_cache->has_labels = TRUE; + g_free (expected_label); + } if (page_width > page_cache->max_width_page_width) { page_cache->max_width_page_width = page_width; @@ -295,9 +308,9 @@ ev_page_cache_get_size (EvPageCache *page_cache, } if (width) - *width = (*width) * scale; + *width = (int) ((*width) * scale + 0.5); if (width) - *height = (*height) * scale; + *height = (int) ((*height) * scale + 0.5); } @@ -346,6 +359,12 @@ ev_page_cache_get_page_label (EvPageCache *page_cache, return g_strdup (page_cache->page_labels[page]); } +gboolean +ev_page_cache_has_nonnumeric_page_labels (EvPageCache *page_cache) +{ + g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), FALSE); + return page_cache->has_labels; +} gboolean ev_page_cache_next_page (EvPageCache *page_cache)