diff options
author | Marco Pesenti Gritti <marco@gnome.org> | 2005-01-30 12:28:10 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2005-01-30 12:28:10 (GMT) |
commit | a521d16eb7f59cbda6881b66e0e7a00125377cd8 (patch) | |
tree | a0855618e705d51434f34a783432c14493b91356 /pdf | |
parent | ae6a79781ff5126c19c84570277376f43158ec86 (diff) |
More work on find implementation, mostly there now
2005-01-30 Marco Pesenti Gritti <marco@gnome.org>
* backend/ev-document-find.c: (ev_document_find_base_init),
(ev_document_find_changed):
* backend/ev-document-find.h:
* pdf/xpdf/pdf-document.cc:
* shell/ev-view.c: (draw_rubberband), (highlight_find_results),
(expose_bin_window), (ev_view_init), (set_document_page),
(ensure_rectangle_is_visible), (jump_to_find_result),
(jump_to_find_page), (find_changed_cb), (ev_view_set_document),
(ev_view_find_next), (ev_view_find_previous):
* shell/ev-view.h:
* shell/ev-window.c: (find_bar_previous_cb), (find_bar_next_cb):
More work on find implementation, mostly there now
Diffstat (limited to 'pdf')
-rw-r--r-- | pdf/xpdf/pdf-document.cc | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/pdf/xpdf/pdf-document.cc b/pdf/xpdf/pdf-document.cc index df380ad..5a7304c 100644 --- a/pdf/xpdf/pdf-document.cc +++ b/pdf/xpdf/pdf-document.cc @@ -56,7 +56,7 @@ typedef struct /* full results are only possible for the rendered current page */ int current_page; GArray *current_page_results; - guchar *other_page_flags; /* length n_pages + 1, first element ignored */ + int *other_page_flags; /* length n_pages + 1, first element ignored */ int start_page; /* skip this one as we iterate, since we did it first */ int search_page; /* the page we're searching now */ TextOutputDev *output_dev; @@ -510,10 +510,6 @@ pdf_document_search_idle_callback (void *data) */ n_pages = ev_document_get_n_pages (EV_DOCUMENT (search->document)); - if (search->search_page == search->start_page) { - goto end_search; - } - if (search->output_dev == 0) { /* First time through here... */ search->output_dev = new TextOutputDev (NULL, gTrue, gFalse, gFalse); @@ -532,8 +528,16 @@ pdf_document_search_idle_callback (void *data) gFalse, gFalse, // startAtLast, stopAtLast &xMin, &yMin, &xMax, &yMax)) { /* This page has results */ - search->other_page_flags[search->search_page] = TRUE; - } + search->other_page_flags[search->search_page] = 1; + } else { + search->other_page_flags[search->search_page] = 0; + } + + if (search->search_page != search->start_page) { + ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document), + search->search_page); + return TRUE; + } search->search_page += 1; if (search->search_page > n_pages) { @@ -541,12 +545,7 @@ pdf_document_search_idle_callback (void *data) search->search_page = 1; } - /* We do this even if nothing was found, to update the percent complete */ - ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document)); - - return TRUE; - - end_search: +end_search: /* We're done. */ search->idle = 0; /* will return FALSE to remove */ return FALSE; @@ -559,7 +558,7 @@ pdf_document_find_begin (EvDocumentFind *document, { PdfDocument *pdf_document = PDF_DOCUMENT (document); PdfDocumentSearch *search; - int n_pages; + int n_pages, i; gunichar *ucs4; glong ucs4_len; @@ -597,10 +596,10 @@ pdf_document_find_begin (EvDocumentFind *document, sizeof (GdkRectangle)); n_pages = ev_document_get_n_pages (EV_DOCUMENT (document)); - /* This is an array of bool; with the first value ignored - * so we can index by the based-at-1 page numbers - */ - search->other_page_flags = g_new0 (guchar, n_pages + 1); + search->other_page_flags = g_new0 (int, n_pages + 1); + for (i = 0; i <= n_pages; i++) { + search->other_page_flags[i] = -1; + } search->document = pdf_document; @@ -613,9 +612,7 @@ pdf_document_find_begin (EvDocumentFind *document, search->output_dev = 0; search->start_page = pdf_document->page; - search->search_page = search->start_page + 1; - if (search->search_page > n_pages) - search->search_page = 1; + search->search_page = search->start_page; search->current_page = -1; |