Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pdf
diff options
context:
space:
mode:
authorMarco 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)
commita521d16eb7f59cbda6881b66e0e7a00125377cd8 (patch)
treea0855618e705d51434f34a783432c14493b91356 /pdf
parentae6a79781ff5126c19c84570277376f43158ec86 (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.cc39
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;