From c86fea736694b17beb9fb621fceac7e2970afe08 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Wed, 27 Aug 2008 09:01:41 +0000 Subject: Removed 2008-08-27 Carlos Garcia Campos * backend/djvu/Makefile.am: * backend/djvu/djvu-document-private.h: * backend/djvu/djvu-document.c: (djvu_document_find_find_text), (djvu_document_find_iface_init): * backend/djvu/djvu-text-page.[ch]: * backend/djvu/djvu-text.[ch]: Removed * backend/pdf/ev-poppler.cc: (pdf_document_find_find_text), (pdf_document_find_iface_init): * libdocument/ev-document-find.[ch]: (ev_document_find_find_text): * shell/ev-jobs.[ch]: (ev_job_find_init), (ev_job_find_dispose), (ev_job_find_run), (ev_job_find_class_init), (ev_job_find_new), (ev_job_find_get_n_results), (ev_job_find_get_progress), (ev_job_find_has_results), (ev_job_find_get_results): * shell/ev-view-private.h: * shell/ev-view.[ch]: (ev_view_expose_event), (highlight_find_results), (ev_view_finalize), (ev_view_get_property), (ev_view_class_init), (page_changed_cb), (ev_view_set_document), (ev_view_find_get_n_results), (ev_view_find_get_result), (jump_to_find_result), (jump_to_find_page), (ev_view_find_changed), (ev_view_find_next), (ev_view_find_previous), (ev_view_find_search_changed), (ev_view_find_set_highlight_search), (ev_view_find_cancel): * shell/ev-window.c: (ev_window_update_actions), (page_changed_cb), (ev_window_setup_document), (ev_window_update_find_status_message), (ev_window_find_job_finished_cb), (ev_window_find_job_updated_cb), (ev_window_clear_find_job), (find_bar_close_cb), (find_bar_search_changed_cb), (find_bar_visibility_changed_cb), (ev_window_dispose), (ev_window_init): Rework find interface. The find logic has been moved from backends to the shell avoiding a lot of duplicated code in the backends and making easier to implement the find interface in the backends. svn path=/trunk/; revision=3123 --- (limited to 'backend') diff --git a/backend/djvu/Makefile.am b/backend/djvu/Makefile.am index 956259b..4cd22f5 100644 --- a/backend/djvu/Makefile.am +++ b/backend/djvu/Makefile.am @@ -18,8 +18,6 @@ libdjvudocument_la_SOURCES = \ djvu-document-private.h \ djvu-links.c \ djvu-links.h \ - djvu-text.c \ - djvu-text.h \ djvu-text-page.c \ djvu-text-page.h diff --git a/backend/djvu/djvu-document-private.h b/backend/djvu/djvu-document-private.h index 30810bb..a110e15 100644 --- a/backend/djvu/djvu-document-private.h +++ b/backend/djvu/djvu-document-private.h @@ -22,7 +22,6 @@ #define __DJVU_DOCUMENT_INTERNAL_H__ #include "djvu-document.h" -#include "djvu-text.h" #include @@ -36,8 +35,6 @@ struct _DjvuDocument { gchar *uri; - DjvuText *search; - /* PS exporter */ gchar *ps_filename; GString *opts; diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c index 5f59a8e..40950c7 100644 --- a/backend/djvu/djvu-document.c +++ b/backend/djvu/djvu-document.c @@ -21,7 +21,7 @@ #include #include "djvu-document.h" -#include "djvu-text.h" +#include "djvu-text-page.h" #include "djvu-links.h" #include "djvu-document-private.h" #include "ev-document-thumbnails.h" @@ -388,9 +388,6 @@ djvu_document_finalize (GObject *object) { DjvuDocument *djvu_document = DJVU_DOCUMENT (object); - if (djvu_document->search) - djvu_text_free (djvu_document->search); - if (djvu_document->d_document) ddjvu_document_release (djvu_document->d_document); @@ -438,6 +435,30 @@ djvu_document_document_iface_init (EvDocumentIface *iface) } static gchar * +djvu_text_copy (DjvuDocument *djvu_document, + gint page, + EvRectangle *rectangle) +{ + miniexp_t page_text; + gchar *text = NULL; + + while ((page_text = + ddjvu_document_get_pagetext (djvu_document->d_document, + page, "char")) == miniexp_dummy) + djvu_handle_events (djvu_document, TRUE, NULL); + + if (page_text != miniexp_nil) { + DjvuTextPage *page = djvu_text_page_new (page_text); + + text = djvu_text_page_copy (page, rectangle); + djvu_text_page_free (page); + ddjvu_miniexp_release (djvu_document->d_document, page_text); + } + + return text; +} + +static gchar * djvu_selection_get_selected_text (EvSelection *selection, EvRenderContext *rc, EvSelectionStyle style, @@ -627,107 +648,62 @@ djvu_document_init (DjvuDocument *djvu_document) djvu_document->d_document = NULL; } -static void -djvu_document_find_begin (EvDocumentFind *document, - int page, - const char *search_string, - gboolean case_sensitive) +static GList * +djvu_document_find_find_text (EvDocumentFind *document, + EvPage *page, + const char *text, + gboolean case_sensitive) { DjvuDocument *djvu_document = DJVU_DOCUMENT (document); + miniexp_t page_text; + gdouble width, height; + GList *matches = NULL, *l; - if (djvu_document->search && - strcmp (search_string, djvu_text_get_text (djvu_document->search)) == 0) - return; - - if (djvu_document->search) - djvu_text_free (djvu_document->search); + g_return_val_if_fail (text != NULL, NULL); - djvu_document->search = djvu_text_new (djvu_document, - page, - case_sensitive, - search_string); -} - -static int -djvu_document_find_get_n_results (EvDocumentFind *document_find, int page) -{ - DjvuText *search = DJVU_DOCUMENT (document_find)->search; + while ((page_text = ddjvu_document_get_pagetext (djvu_document->d_document, + page->index, + "char")) == miniexp_dummy) + djvu_handle_events (djvu_document, TRUE, NULL); - if (search) { - return djvu_text_n_results (search, page); - } else { - return 0; + if (page_text != miniexp_nil) { + DjvuTextPage *tpage = djvu_text_page_new (page_text); + + djvu_text_page_prepare_search (tpage, case_sensitive); + if (tpage->links->len > 0) { + djvu_text_page_search (tpage, text); + matches = tpage->results; + } + djvu_text_page_free (tpage); + ddjvu_miniexp_release (djvu_document->d_document, page_text); } -} -static gboolean -djvu_document_find_get_result (EvDocumentFind *document_find, - int page, - int n_result, - EvRectangle *rectangle) -{ - DjvuDocument *djvu_document = DJVU_DOCUMENT (document_find); - DjvuText *search = djvu_document->search; - EvRectangle *r; - double width, height; - - if (search == NULL) - return FALSE; + if (!matches) + return NULL; - r = djvu_text_get_result (search, page, n_result); - if (r == NULL) - return FALSE; + document_get_page_size (djvu_document, page->index, &width, &height); + for (l = matches; l && l->data; l = g_list_next (l)) { + EvRectangle *r = (EvRectangle *)l->data; + gdouble tmp; - document_get_page_size (djvu_document, page, &width, &height); - rectangle->x1 = r->x1 * SCALE_FACTOR; - rectangle->y1 = height - r->y2 * SCALE_FACTOR; - rectangle->x2 = r->x2 * SCALE_FACTOR; - rectangle->y2 = height - r->y1 * SCALE_FACTOR; + tmp = r->y1; - return TRUE; -} - -static int -djvu_document_find_page_has_results (EvDocumentFind *document_find, - int page) -{ - DjvuText *search = DJVU_DOCUMENT (document_find)->search; - - return search && djvu_text_has_results (search, page); -} + r->x1 *= SCALE_FACTOR; + r->x2 *= SCALE_FACTOR; -static double -djvu_document_find_get_progress (EvDocumentFind *document_find) -{ - DjvuText *search = DJVU_DOCUMENT (document_find)->search; - - if (search == NULL) { - return 0; + tmp = r->y1; + r->y1 = height - r->y2 * SCALE_FACTOR; + r->y2 = height - tmp * SCALE_FACTOR; } + - return djvu_text_get_progress (search); -} - -static void -djvu_document_find_cancel (EvDocumentFind *document) -{ - DjvuDocument *djvu_document = DJVU_DOCUMENT (document); - - if (djvu_document->search) { - djvu_text_free (djvu_document->search); - djvu_document->search = NULL; - } + return matches; } static void djvu_document_find_iface_init (EvDocumentFindIface *iface) { - iface->begin = djvu_document_find_begin; - iface->get_n_results = djvu_document_find_get_n_results; - iface->get_result = djvu_document_find_get_result; - iface->page_has_results = djvu_document_find_page_has_results; - iface->get_progress = djvu_document_find_get_progress; - iface->cancel = djvu_document_find_cancel; + iface->find_text = djvu_document_find_find_text; } static GList * diff --git a/backend/djvu/djvu-text-page.c b/backend/djvu/djvu-text-page.c index f0b2809..696cec7 100644 --- a/backend/djvu/djvu-text-page.c +++ b/backend/djvu/djvu-text-page.c @@ -371,7 +371,7 @@ djvu_text_page_append_text (DjvuTextPage *page, */ void djvu_text_page_search (DjvuTextPage *page, - char *text) + const char *text) { char *haystack = page->text; int search_len; diff --git a/backend/djvu/djvu-text-page.h b/backend/djvu/djvu-text-page.h index 61325af..5d2134c 100644 --- a/backend/djvu/djvu-text-page.h +++ b/backend/djvu/djvu-text-page.h @@ -23,6 +23,7 @@ #include #include +#include typedef struct _DjvuTextPage DjvuTextPage; @@ -50,8 +51,8 @@ char * djvu_text_page_copy (DjvuTextPage *page, void djvu_text_page_prepare_search (DjvuTextPage *page, gboolean case_sensitive); void djvu_text_page_search (DjvuTextPage *page, - char *text); -DjvuTextPage* djvu_text_page_new (miniexp_t text); + const char *text); +DjvuTextPage* djvu_text_page_new (miniexp_t text); void djvu_text_page_free (DjvuTextPage *page); #endif /* __DJVU_TEXT_PAGE_H__ */ diff --git a/backend/djvu/djvu-text.c b/backend/djvu/djvu-text.c deleted file mode 100644 index e87dbb1..0000000 --- a/backend/djvu/djvu-text.c +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Implements search and copy functionality for Djvu files. - * Copyright (C) 2006 Michael Hofmann - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include -#include -#include -#include - -#include "djvu-document-private.h" -#include "djvu-document.h" -#include "djvu-text.h" -#include "djvu-text-page.h" -#include "ev-document-find.h" -#include "ev-document.h" - - - -struct _DjvuText { - DjvuDocument *document; - gboolean case_sensitive; - char *text; - GList **pages; - guint idle; - int start_page; - int search_page; -}; - -/** - * djvu_text_idle_callback: - * @data: #DjvuText instance - * - * Idle callback that processes one page at a time. - * - * Returns: whether there are more pages to be processed - */ -static gboolean -djvu_text_idle_callback (void *data) -{ - DjvuText *djvu_text = (DjvuText *) data; - DjvuDocument *djvu_document = djvu_text->document; - int n_pages; - miniexp_t page_text; - - ev_document_doc_mutex_lock (); - while ((page_text = - ddjvu_document_get_pagetext (djvu_document->d_document, - djvu_text->search_page, - "char")) == miniexp_dummy) - djvu_handle_events (djvu_document, TRUE, NULL); - - if (page_text != miniexp_nil) { - DjvuTextPage *page = djvu_text_page_new (page_text); - djvu_text_page_prepare_search (page, djvu_text->case_sensitive); - if (page->links->len > 0) { - djvu_text_page_search (page, djvu_text->text); - djvu_text->pages[djvu_text->search_page] = page->results; - ev_document_find_changed (EV_DOCUMENT_FIND - (djvu_document), - djvu_text->search_page); - } - djvu_text_page_free (page); - ddjvu_miniexp_release (djvu_document->d_document, - page_text); - } - ev_document_doc_mutex_unlock (); - - n_pages = - djvu_document_get_n_pages (EV_DOCUMENT (djvu_text->document)); - djvu_text->search_page += 1; - if (djvu_text->search_page == n_pages) { - /* wrap around */ - djvu_text->search_page = 0; - } - - if (djvu_text->search_page != djvu_text->start_page) - return TRUE; - - /* We're done. */ - djvu_text->idle = 0; - /* will return FALSE to remove */ - return FALSE; -} - -/** - * djvu_text_new: - * @djvu_document: document to search - * @start_page: first page to search - * @case_sensitive: uses g_utf8_case_fold() to enable case-insensitive - * searching - * @text: text to search - * - * Creates a new #DjvuText instance to enable searching. An idle call - * is used to process all pages starting from @start_page. - * - * Returns: newly created instance - */ -DjvuText * -djvu_text_new (DjvuDocument *djvu_document, - int start_page, - gboolean case_sensitive, - const char *text) -{ - DjvuText *djvu_text; - int n_pages; - int i; - - n_pages = djvu_document_get_n_pages (EV_DOCUMENT (djvu_document)); - - djvu_text = g_new0 (DjvuText, 1); - - if (case_sensitive) - djvu_text->text = g_strdup (text); - else - djvu_text->text = g_utf8_casefold (text, -1); - djvu_text->pages = g_new0 (GList *, n_pages); - for (i = 0; i < n_pages; i++) { - djvu_text->pages[i] = NULL; - } - - djvu_text->document = djvu_document; - - /* We add at low priority so the progress bar repaints */ - djvu_text->idle = g_idle_add_full (G_PRIORITY_LOW, - djvu_text_idle_callback, - djvu_text, NULL); - - djvu_text->case_sensitive = case_sensitive; - djvu_text->start_page = start_page; - djvu_text->search_page = start_page; - - return djvu_text; -} - -/** - * djvu_text_copy: - * @djvu_document: document to search - * @page: page to search - * @rectangle: rectangle to copy - * - * Copies and returns the text in the given rectangle. - * - * Returns: newly allocated text or NULL of none is available - */ -char * -djvu_text_copy (DjvuDocument *djvu_document, - int page, - EvRectangle *rectangle) -{ - miniexp_t page_text; - char* text = NULL; - - while ((page_text = - ddjvu_document_get_pagetext (djvu_document->d_document, - page, "char")) == miniexp_dummy) - djvu_handle_events (djvu_document, TRUE, NULL); - - if (page_text != miniexp_nil) { - DjvuTextPage *page = djvu_text_page_new (page_text); - text = djvu_text_page_copy (page, rectangle); - djvu_text_page_free (page); - ddjvu_miniexp_release (djvu_document->d_document, page_text); - } - - return text; -} - -/** - * djvu_text_free: - * @djvu_text: instance to free - * - * Frees the given #DjvuText instance. - */ -void djvu_text_free (DjvuText * djvu_text) -{ - DjvuDocument *djvu_document = djvu_text->document; - int n_pages; - int i; - - if (djvu_text->idle != 0) - g_source_remove (djvu_text->idle); - - n_pages = djvu_document_get_n_pages (EV_DOCUMENT (djvu_document)); - for (i = 0; i < n_pages; i++) { - g_list_foreach (djvu_text->pages[i], (GFunc) g_free, NULL); - g_list_free (djvu_text->pages[i]); - } - - g_free (djvu_text->text); -} - -/** - * djvu_text_get_text: - * @djvu_text: #DjvuText instance - * - * Returns the search text. This is mainly to be able to avoid reinstantiation - * for the same search text. - * - * Returns: the text this instance of #DjvuText is looking for - */ -const char * -djvu_text_get_text (DjvuText *djvu_text) -{ - return djvu_text->text; -} - -/** - * djvu_text_n_results: - * @djvu_text: #DjvuText instance - * @page: page number - * - * Returns the number of search results available for the given page. - * - * Returns: number of search results - */ -int -djvu_text_n_results (DjvuText *djvu_text, - int page) -{ - return g_list_length (djvu_text->pages[page]); -} - -/** - * djvu_text_has_results: - * @djvu_text: #DjvuText instance - * @page: page number - * - * Returns whether there are search results available for the given page. - * This method executes faster than djvu_text_n_results(). - * - * Returns: whether there are search results - */ -int -djvu_text_has_results (DjvuText *djvu_text, - int page) -{ - return djvu_text->pages[page] != NULL; -} - -/** - * djvu_text_get_result: - * @djvu_text: #DjvuText instance - * @page: page number - * @n_result: result number - * - * Returns the n-th search result of a given page. The coordinates are - * Djvu-specific and need to be processed to be compatible with the Evince - * coordinate system. The result may span several lines! - * - * Returns: the rectangle for the search result - */ -EvRectangle * -djvu_text_get_result (DjvuText *djvu_text, - int page, - int n_result) -{ - return (EvRectangle *) g_list_nth_data (djvu_text->pages[page], - n_result); -} - -/** - * djvu_text_get_progress: - * @djvu_text: #DjvuText instance - * - * Returns the percentage of pages done searching. - * - * Returns: the progress as value between 0 and 1 - */ -double -djvu_text_get_progress (DjvuText *djvu_text) -{ - int pages_done; - int n_pages; - - n_pages = - djvu_document_get_n_pages (EV_DOCUMENT (djvu_text->document)); - if (djvu_text->search_page > djvu_text->start_page) { - pages_done = djvu_text->search_page - djvu_text->start_page + 1; - } else if (djvu_text->search_page == djvu_text->start_page) { - pages_done = n_pages; - } else { - pages_done = - n_pages - djvu_text->start_page + djvu_text->search_page; - } - return pages_done / (double) n_pages; -} - diff --git a/backend/djvu/djvu-text.h b/backend/djvu/djvu-text.h deleted file mode 100644 index b7371df..0000000 --- a/backend/djvu/djvu-text.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2006 Michael Hofmann - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef __DJVU_TEXT_H__ -#define __DJVU_TEXT_H__ - -#include "ev-document.h" - -#include - -typedef struct _DjvuText DjvuText; - -DjvuText *djvu_text_new (DjvuDocument *djvu_document, - int start_page, - gboolean case_sensitive, - const char *text); -void djvu_text_free (DjvuText *djvu_text); -const char *djvu_text_get_text (DjvuText *djvu_text); -int djvu_text_n_results (DjvuText *djvu_text, - int page); -EvRectangle *djvu_text_get_result (DjvuText *djvu_text, - int page, - int n_result); -int djvu_text_has_results (DjvuText *djvu_text, - int page); -double djvu_text_get_progress (DjvuText *djvu_text); -char *djvu_text_copy (DjvuDocument *djvu_document, - int page, - EvRectangle *rectangle); - -#endif /* __DJVU_TEXT_H__ */ diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 4687ac2..983298e 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -1364,195 +1364,42 @@ pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) } -static gboolean -pdf_document_search_idle_callback (void *data) -{ - PdfDocumentSearch *search = (PdfDocumentSearch*) data; - PdfDocument *pdf_document = search->document; - int n_pages; - GList *matches; - PopplerPage *page; - - page = poppler_document_get_page (search->document->document, - search->search_page); - - ev_document_doc_mutex_lock (); - matches = poppler_page_find_text (page, search->text); - ev_document_doc_mutex_unlock (); - - g_object_unref (page); - - search->pages[search->search_page] = matches; - ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document), - search->search_page); - - n_pages = pdf_document_get_n_pages (EV_DOCUMENT (search->document)); - search->search_page += 1; - if (search->search_page == n_pages) { - /* wrap around */ - search->search_page = 0; - } - - if (search->search_page != search->start_page) { - return TRUE; - } - - /* We're done. */ - search->idle = 0; /* will return FALSE to remove */ - return FALSE; -} - - -static PdfDocumentSearch * -pdf_document_search_new (PdfDocument *pdf_document, - int start_page, - const char *text) -{ - PdfDocumentSearch *search; - int n_pages; - int i; - - n_pages = pdf_document_get_n_pages (EV_DOCUMENT (pdf_document)); - - search = g_new0 (PdfDocumentSearch, 1); - - search->text = g_strdup (text); - search->pages = g_new0 (GList *, n_pages); - search->document = pdf_document; - - /* We add at low priority so the progress bar repaints */ - search->idle = g_idle_add_full (G_PRIORITY_LOW, - pdf_document_search_idle_callback, - search, - NULL); - - search->start_page = start_page; - search->search_page = start_page; - - return search; -} - -static void -pdf_document_find_begin (EvDocumentFind *document, - int page, - const char *search_string, - gboolean case_sensitive) -{ - PdfDocument *pdf_document = PDF_DOCUMENT (document); - - /* FIXME handle case_sensitive (right now XPDF - * code is always case insensitive for ASCII - * and case sensitive for all other languaages) - */ - - if (pdf_document->search && - strcmp (search_string, pdf_document->search->text) == 0) - return; - - if (pdf_document->search) - pdf_document_search_free (pdf_document->search); - - pdf_document->search = pdf_document_search_new (pdf_document, - page, - search_string); -} - -static int -pdf_document_find_get_n_results (EvDocumentFind *document_find, int page) -{ - PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search; - - if (search) { - return g_list_length (search->pages[page]); - } else { - return 0; - } -} - -static gboolean -pdf_document_find_get_result (EvDocumentFind *document_find, - int page, - int n_result, - EvRectangle *rectangle) +static GList * +pdf_document_find_find_text (EvDocumentFind *document_find, + EvPage *page, + const gchar *text, + gboolean case_sensitive) { - PdfDocument *pdf_document = PDF_DOCUMENT (document_find); - PdfDocumentSearch *search = pdf_document->search; + GList *matches, *l; PopplerPage *poppler_page; - PopplerRectangle *r; - double height; - - if (search == NULL) - return FALSE; + gdouble height; + + g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL); + g_return_val_if_fail (text != NULL, NULL); - r = (PopplerRectangle *) g_list_nth_data (search->pages[page], - n_result); - if (r == NULL) - return FALSE; + poppler_page = POPPLER_PAGE (page->backend_page); + + matches = poppler_page_find_text (poppler_page, text); + if (!matches) + return NULL; - poppler_page = poppler_document_get_page (pdf_document->document, page); poppler_page_get_size (poppler_page, NULL, &height); - rectangle->x1 = r->x1; - rectangle->y1 = height - r->y2; - rectangle->x2 = r->x2; - rectangle->y2 = height - r->y1; - g_object_unref (poppler_page); - - return TRUE; -} - -static int -pdf_document_find_page_has_results (EvDocumentFind *document_find, - int page) -{ - PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search; + for (l = matches; l && l->data; l = g_list_next (l)) { + PopplerRectangle *rect = (PopplerRectangle *)l->data; + gdouble tmp; - return search && search->pages[page] != NULL; -} - -static double -pdf_document_find_get_progress (EvDocumentFind *document_find) -{ - PdfDocumentSearch *search; - int n_pages, pages_done; - - search = PDF_DOCUMENT (document_find)->search; - - if (search == NULL) { - return 0; - } - - n_pages = pdf_document_get_n_pages (EV_DOCUMENT (document_find)); - if (search->search_page > search->start_page) { - pages_done = search->search_page - search->start_page + 1; - } else if (search->search_page == search->start_page) { - pages_done = n_pages; - } else { - pages_done = n_pages - search->start_page + search->search_page; - } - - return pages_done / (double) n_pages; -} - -static void -pdf_document_find_cancel (EvDocumentFind *document) -{ - PdfDocument *pdf_document = PDF_DOCUMENT (document); - - if (pdf_document->search) { - pdf_document_search_free (pdf_document->search); - pdf_document->search = NULL; + tmp = rect->y1; + rect->y1 = height - rect->y2; + rect->y2 = height - tmp; } + + return matches; } static void pdf_document_find_iface_init (EvDocumentFindIface *iface) { - iface->begin = pdf_document_find_begin; - iface->get_n_results = pdf_document_find_get_n_results; - iface->get_result = pdf_document_find_get_result; - iface->page_has_results = pdf_document_find_page_has_results; - iface->get_progress = pdf_document_find_get_progress; - iface->cancel = pdf_document_find_cancel; + iface->find_text = pdf_document_find_find_text; } static void -- cgit v0.9.1