[evince] djvu: Use dpi of pages to compute scaling factor
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evince] djvu: Use dpi of pages to compute scaling factor
- Date: Sat, 2 Feb 2013 15:09:29 +0000 (UTC)
commit d73ba192af4b61d795715dd3cc0e64c7e85469a1
Author: Josà Aliste <jaliste src gnome org>
Date: Fri Jan 11 00:52:49 2013 +0100
djvu: Use dpi of pages to compute scaling factor
https://bugzilla.gnome.org/show_bug.cgi?id=580891
backend/djvu/djvu-document.c | 54 +++++++++++++++++++++++------------------
1 files changed, 30 insertions(+), 24 deletions(-)
---
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
index 5a3561c..7bb655c 100644
--- a/backend/djvu/djvu-document.c
+++ b/backend/djvu/djvu-document.c
@@ -36,8 +36,6 @@
#include <glib/gi18n-lib.h>
#include <string.h>
-#define SCALE_FACTOR 0.2
-
enum {
PROP_0,
PROP_TITLE
@@ -278,7 +276,8 @@ static void
document_get_page_size (DjvuDocument *djvu_document,
gint page,
double *width,
- double *height)
+ double *height,
+ double *dpi)
{
ddjvu_pageinfo_t info;
ddjvu_status_t r;
@@ -289,8 +288,12 @@ document_get_page_size (DjvuDocument *djvu_document,
if (r >= DDJVU_JOB_FAILED)
djvu_handle_events(djvu_document, TRUE, NULL);
- *width = info.width * SCALE_FACTOR;
- *height = info.height * SCALE_FACTOR;
+ if (width)
+ *width = info.width * 72.0 / info.dpi;
+ if (height)
+ *height = info.height * 72.0 / info.dpi;
+ if (dpi)
+ *dpi = info.dpi;
}
static void
@@ -304,7 +307,7 @@ djvu_document_get_page_size (EvDocument *document,
g_return_if_fail (djvu_document->d_document);
document_get_page_size (djvu_document, page->index,
- width, height);
+ width, height, NULL);
}
static cairo_surface_t *
@@ -327,8 +330,10 @@ djvu_document_render (EvDocument *document,
while (!ddjvu_page_decoding_done (d_page))
djvu_handle_events(djvu_document, TRUE, NULL);
- page_width = ddjvu_page_get_width (d_page) * rc->scale * SCALE_FACTOR + 0.5;
- page_height = ddjvu_page_get_height (d_page) * rc->scale * SCALE_FACTOR + 0.5;
+ document_get_page_size (djvu_document, rc->page->index, &page_width, &page_height, NULL);
+
+ page_width = page_width * rc->scale + 0.5;
+ page_height = page_height * rc->scale + 0.5;
switch (rc->rotation) {
case 90:
@@ -494,16 +499,15 @@ djvu_selection_get_selected_text (EvSelection *selection,
EvRectangle *points)
{
DjvuDocument *djvu_document = DJVU_DOCUMENT (selection);
- double width, height;
+ double width, height, dpi;
EvRectangle rectangle;
gchar *text;
-
- djvu_document_get_page_size (EV_DOCUMENT (djvu_document),
- page, &width, &height);
- rectangle.x1 = points->x1 / SCALE_FACTOR;
- rectangle.y1 = (height - points->y2) / SCALE_FACTOR;
- rectangle.x2 = points->x2 / SCALE_FACTOR;
- rectangle.y2 = (height - points->y1) / SCALE_FACTOR;
+
+ document_get_page_size (djvu_document, page->index, &width, &height, &dpi);
+ rectangle.x1 = points->x1 * dpi / 72.0;
+ rectangle.y1 = (height - points->y2) * dpi / 72.0;
+ rectangle.x2 = points->x2 * dpi / 72.0;
+ rectangle.y2 = (height - points->y1) * dpi / 72.0;
text = djvu_text_copy (djvu_document, page->index, &rectangle);
@@ -611,7 +615,7 @@ djvu_document_find_find_text (EvDocumentFind *document,
{
DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
miniexp_t page_text;
- gdouble width, height;
+ gdouble width, height, dpi;
GList *matches = NULL, *l;
g_return_val_if_fail (text != NULL, NULL);
@@ -632,23 +636,22 @@ djvu_document_find_find_text (EvDocumentFind *document,
djvu_text_page_free (tpage);
ddjvu_miniexp_release (djvu_document->d_document, page_text);
}
-
if (!matches)
return NULL;
- document_get_page_size (djvu_document, page->index, &width, &height);
+ document_get_page_size (djvu_document, page->index, &width, &height, &dpi);
for (l = matches; l && l->data; l = g_list_next (l)) {
EvRectangle *r = (EvRectangle *)l->data;
gdouble tmp;
tmp = r->y1;
- r->x1 *= SCALE_FACTOR;
- r->x2 *= SCALE_FACTOR;
+ r->x1 *= 72.0 / dpi;
+ r->x2 *= 72.0 / dpi;
tmp = r->y1;
- r->y1 = height - r->y2 * SCALE_FACTOR;
- r->y2 = height - tmp * SCALE_FACTOR;
+ r->y1 = height - r->y2 * 72.0 / dpi;
+ r->y2 = height - tmp * 72.0 / dpi;
}
@@ -672,7 +675,10 @@ static EvMappingList *
djvu_document_links_get_links (EvDocumentLinks *document_links,
EvPage *page)
{
- return djvu_links_get_links (document_links, page->index, SCALE_FACTOR);
+ gdouble dpi;
+
+ document_get_page_size (DJVU_DOCUMENT (document_links), page->index, NULL, NULL, &dpi);
+ return djvu_links_get_links (document_links, page->index, 72.0 / dpi);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]