From 5e6728daa9b09a76f2537f7c848123639165cd70 Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Tue, 05 Apr 2005 00:40:58 +0000 Subject: Make searching work again. 2005-04-04 Kristian Høgsberg Make searching work again. * backend/ev-document.c: * backend/ev-document.h: * backend/ev-document-find.c: * backend/ev-document-find.h: Change EvDocumentIface so we no longer store the current page or zoom level in the document. The consequence is that all calls that operate on the current page now instead take the page number as an extra argument, and all coordinates are now doubles in document coordinate system. * pdf/ev-poppler.cc: * pixbuf/pixbuf-document.c: * ps/ps-document.c: Update backends accordingly. --- (limited to 'backend') diff --git a/backend/ev-document-find.c b/backend/ev-document-find.c index 5c1fbe4..1be43b9 100644 --- a/backend/ev-document-find.c +++ b/backend/ev-document-find.c @@ -68,6 +68,7 @@ ev_document_find_base_init (gpointer g_class) void ev_document_find_begin (EvDocumentFind *document_find, + int page, const char *search_string, gboolean case_sensitive) { @@ -75,7 +76,7 @@ ev_document_find_begin (EvDocumentFind *document_find, g_return_if_fail (search_string != NULL); - iface->begin (document_find, search_string, case_sensitive); + iface->begin (document_find, page, search_string, case_sensitive); } void @@ -94,19 +95,21 @@ ev_document_find_page_has_results (EvDocumentFind *document_find, } int -ev_document_find_get_n_results (EvDocumentFind *document_find) +ev_document_find_get_n_results (EvDocumentFind *document_find, + int page) { EvDocumentFindIface *iface = EV_DOCUMENT_FIND_GET_IFACE (document_find); - return iface->get_n_results (document_find); + return iface->get_n_results (document_find, page); } gboolean ev_document_find_get_result (EvDocumentFind *document_find, + int page, int n_result, - GdkRectangle *rectangle) + EvRectangle *rectangle) { EvDocumentFindIface *iface = EV_DOCUMENT_FIND_GET_IFACE (document_find); - return iface->get_result (document_find, n_result, rectangle); + return iface->get_result (document_find, page, n_result, rectangle); } double diff --git a/backend/ev-document-find.h b/backend/ev-document-find.h index 49c3672..f365df1 100644 --- a/backend/ev-document-find.h +++ b/backend/ev-document-find.h @@ -26,6 +26,8 @@ #include #include +#include "ev-document.h" /* For EvRectangle */ + G_BEGIN_DECLS #define EV_TYPE_DOCUMENT_FIND (ev_document_find_get_type ()) @@ -45,15 +47,18 @@ struct _EvDocumentFindIface /* Methods */ void (* begin) (EvDocumentFind *document_find, + int page, const char *search_string, gboolean case_sensitive); void (* cancel) (EvDocumentFind *document_find); int (* page_has_results) (EvDocumentFind *document_find, int page); - int (* get_n_results) (EvDocumentFind *document_find); + int (* get_n_results) (EvDocumentFind *document_find, + int page); gboolean (* get_result) (EvDocumentFind *document_find, + int page, int n_result, - GdkRectangle *rectangle); + EvRectangle *rectangle); double (* get_progress) (EvDocumentFind *document_find); /* Signals */ @@ -64,15 +69,18 @@ struct _EvDocumentFindIface GType ev_document_find_get_type (void); void ev_document_find_begin (EvDocumentFind *document_find, + int page, const char *search_string, gboolean case_sensitive); void ev_document_find_cancel (EvDocumentFind *document_find); int ev_document_find_page_has_results (EvDocumentFind *document_find, int page); -int ev_document_find_get_n_results (EvDocumentFind *document_find); +int ev_document_find_get_n_results (EvDocumentFind *document_find, + int page); gboolean ev_document_find_get_result (EvDocumentFind *document_find, + int page, int n_result, - GdkRectangle *rectangle); + EvRectangle *rectangle); double ev_document_find_get_progress (EvDocumentFind *document_find); void ev_document_find_changed (EvDocumentFind *document_find, int page); diff --git a/backend/ev-document.c b/backend/ev-document.c index d4d6f20..aa61fc6 100644 --- a/backend/ev-document.c +++ b/backend/ev-document.c @@ -158,42 +158,10 @@ ev_document_get_n_pages (EvDocument *document) } void -ev_document_set_page (EvDocument *document, - int page) -{ - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - - LOG ("ev_document_set_page"); - iface->set_page (document, page); -} - -int -ev_document_get_page (EvDocument *document) -{ - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - int retval; - - LOG ("ev_document_get_page"); - retval = iface->get_page (document); - - return retval; -} - -void -ev_document_set_scale (EvDocument *document, - double scale) -{ - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - - LOG ("ev_document_set_scale"); - iface->set_scale (document, scale); -} - -void ev_document_get_page_size (EvDocument *document, int page, - int *width, - int *height) + double *width, + double *height) { EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); @@ -215,36 +183,22 @@ ev_document_get_page_label(EvDocument *document, } char * -ev_document_get_text (EvDocument *document, - GdkRectangle *rect) +ev_document_get_text (EvDocument *document, + int page, + EvRectangle *rect) { EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); char *retval; LOG ("ev_document_get_text"); - retval = iface->get_text (document, rect); - - return retval; -} - -EvLink * -ev_document_get_link (EvDocument *document, - int x, - int y) -{ - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - EvLink *retval; - - LOG ("ev_document_get_link"); - if (iface->get_link == NULL) - return NULL; - retval = iface->get_link (document, x, y); + retval = iface->get_text (document, page, rect); return retval; } GList * -ev_document_get_links (EvDocument *document) +ev_document_get_links (EvDocument *document, + int page) { EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); GList *retval; @@ -252,7 +206,7 @@ ev_document_get_links (EvDocument *document) LOG ("ev_document_get_link"); if (iface->get_links == NULL) return NULL; - retval = iface->get_links (document); + retval = iface->get_links (document, page); return retval; } @@ -260,7 +214,9 @@ ev_document_get_links (EvDocument *document) GdkPixbuf * -ev_document_render_pixbuf (EvDocument *document) +ev_document_render_pixbuf (EvDocument *document, + int page, + double scale) { EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); GdkPixbuf *retval; @@ -268,7 +224,7 @@ ev_document_render_pixbuf (EvDocument *document) LOG ("ev_document_render_pixbuf"); g_assert (iface->render_pixbuf); - retval = iface->render_pixbuf (document); + retval = iface->render_pixbuf (document, page, scale); return retval; } diff --git a/backend/ev-document.h b/backend/ev-document.h index e5c91b7..743b947 100644 --- a/backend/ev-document.h +++ b/backend/ev-document.h @@ -54,14 +54,17 @@ typedef enum EV_DOCUMENT_ERROR_ENCRYPTED } EvDocumentError; +typedef struct { + double x1; + double y1; + double x2; + double y2; +} EvRectangle; + struct _EvDocumentIface { GTypeInterface base_iface; - /* Signals */ - void (* page_changed) (EvDocument *document); - void (* scale_changed) (EvDocument *document); - /* Methods */ gboolean (* load) (EvDocument *document, const char *uri, @@ -70,24 +73,20 @@ struct _EvDocumentIface const char *uri, GError **error); int (* get_n_pages) (EvDocument *document); - void (* set_page) (EvDocument *document, - int page); - int (* get_page) (EvDocument *document); - void (* set_scale) (EvDocument *document, - double scale); void (* get_page_size) (EvDocument *document, int page, - int *width, - int *height); + double *width, + double *height); char * (* get_page_label) (EvDocument *document, int page); char * (* get_text) (EvDocument *document, - GdkRectangle *rect); - EvLink * (* get_link) (EvDocument *document, - int x, - int y); - GList * (* get_links) (EvDocument *document); - GdkPixbuf * (* render_pixbuf) (EvDocument *document); + int page, + EvRectangle *rect); + GList * (* get_links) (EvDocument *document, + int page); + GdkPixbuf * (* render_pixbuf) (EvDocument *document, + int page, + double scale); }; GType ev_document_get_type (void); @@ -104,24 +103,20 @@ gboolean ev_document_save (EvDocument *document, GError **error); char *ev_document_get_title (EvDocument *document); int ev_document_get_n_pages (EvDocument *document); -void ev_document_set_page (EvDocument *document, - int page); -int ev_document_get_page (EvDocument *document); -void ev_document_set_scale (EvDocument *document, - double scale); void ev_document_get_page_size (EvDocument *document, int page, - int *width, - int *height); + double *width, + double *height); char *ev_document_get_page_label(EvDocument *document, - int page); + int page); char *ev_document_get_text (EvDocument *document, - GdkRectangle *rect); -EvLink *ev_document_get_link (EvDocument *document, - int x, - int y); -GList *ev_document_get_links (EvDocument *document); -GdkPixbuf *ev_document_render_pixbuf (EvDocument *document); + int page, + EvRectangle *rect); +GList *ev_document_get_links (EvDocument *document, + int page); +GdkPixbuf *ev_document_render_pixbuf (EvDocument *document, + int page, + double scale); G_END_DECLS diff --git a/backend/ev-jobs.c b/backend/ev-jobs.c index 8265aeb..0a5f69f 100644 --- a/backend/ev-jobs.c +++ b/backend/ev-jobs.c @@ -206,11 +206,11 @@ ev_job_render_run (EvJobRender *job) g_mutex_lock (EV_DOC_MUTEX); - ev_document_set_page (EV_JOB (job)->document, job->page); - ev_document_set_scale (EV_JOB (job)->document, job->scale); - job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document); + job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document, + job->page, + job->scale); if (job->include_links) - job->link_mapping = ev_document_get_links (EV_JOB (job)->document); + job->link_mapping = ev_document_get_links (EV_JOB (job)->document, job->page); EV_JOB (job)->finished = TRUE; g_mutex_unlock (EV_DOC_MUTEX); diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c index 08d1be4..7960cb4 100644 --- a/backend/ev-page-cache.c +++ b/backend/ev-page-cache.c @@ -5,8 +5,8 @@ typedef struct _EvPageCacheInfo { - gint width; - gint height; + double width; + double height; } EvPageCacheInfo; @@ -21,8 +21,8 @@ struct _EvPageCache char **page_labels; gboolean uniform; - gint uniform_width; - gint uniform_height; + double uniform_width; + double uniform_height; EvPageCacheInfo *size_cache; }; @@ -105,10 +105,9 @@ _ev_page_cache_new (EvDocument *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++) { - gint page_width = 0; - gint page_height = 0; + 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); -- cgit v0.9.1