Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2005-04-05 00:40:58 (GMT)
committer Kristian Høgsberg <krh@src.gnome.org>2005-04-05 00:40:58 (GMT)
commit5e6728daa9b09a76f2537f7c848123639165cd70 (patch)
tree5025ca7e39a8b82ffecf70292de02360cf98973c /backend
parent0278ffdb57c2e17e33acb52bb5569d746246f671 (diff)
Make searching work again.
2005-04-04 Kristian Høgsberg <krh@redhat.com> 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.
Diffstat (limited to 'backend')
-rw-r--r--backend/ev-document-find.c13
-rw-r--r--backend/ev-document-find.h16
-rw-r--r--backend/ev-document.c70
-rw-r--r--backend/ev-document.h57
-rw-r--r--backend/ev-jobs.c8
-rw-r--r--backend/ev-page-cache.c13
6 files changed, 69 insertions, 108 deletions
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 <glib.h>
#include <gdk/gdk.h>
+#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);