Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-07-29 14:17:57 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-07-29 14:17:57 (GMT)
commit96ab01a78dafd62f121b11010a9857cbd9a7922c (patch)
tree7434b3a318aa57d7face694144efed048ba17e68
parent596c9107204be24ac45fa02cc0cb59c238e09111 (diff)
Really make use of the orientation bit of the render context. Use the
2005-07-29 Marco Pesenti Gritti <mpg@redhat.com> * backend/ev-document-thumbnails.c: (ev_document_thumbnails_get_thumbnail): * backend/ev-document-thumbnails.h: * backend/ev-document.c: * backend/ev-document.h: * backend/ev-ps-exporter.c: (ev_ps_exporter_do_page): * backend/ev-ps-exporter.h: * pdf/ev-poppler.cc: * ps/ps-document.c: (ps_document_document_iface_init), (ps_document_ps_export_do_page): * shell/ev-jobs.c: (ev_job_thumbnail_new), (ev_job_thumbnail_run): * shell/ev-jobs.h: * shell/ev-page-cache.c: (ev_page_cache_get_size), (ev_page_cache_get): * shell/ev-page-cache.h: * shell/ev-pixbuf-cache.c: (check_job_size_and_unref), (add_job_if_needed), (ev_pixbuf_cache_add_jobs_if_needed), (ev_pixbuf_cache_set_page_range), (new_selection_pixbuf_needed): * shell/ev-pixbuf-cache.h: * shell/ev-print-job.c: (idle_print_handler): * shell/ev-sidebar-thumbnails.c: (add_range): * shell/ev-view.c: (view_update_range_and_current_page), (get_page_extents), (ev_view_size_request_dual_page), (ev_view_size_request_single_page), (draw_one_page), (clear_caches), (ev_view_set_orientation), (ev_view_rotate_right), (ev_view_rotate_left), (ev_view_zoom_for_size_presentation), (ev_view_zoom_for_size_dual_page), (ev_view_zoom_for_size_single_page), (compute_new_selection_text), (ev_view_select_all): * thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get): * tiff/tiff-document.c: (tiff_document_get_page_size), (tiff_document_get_orientation), (rotate_pixbuf), (tiff_document_render_pixbuf), (tiff_document_document_iface_init), (tiff_document_thumbnails_get_thumbnail), (tiff_document_ps_export_do_page), (tiff_document_init): Really make use of the orientation bit of the render context. Use the render context in a few more places in the backend API. This regress orientation, but now it's done right. Will try to fix it up asap...
-rw-r--r--ChangeLog43
-rw-r--r--backend/ev-document-thumbnails.c4
-rw-r--r--backend/ev-document-thumbnails.h4
-rw-r--r--backend/ev-document.c9
-rw-r--r--backend/ev-ps-exporter.c4
-rw-r--r--backend/ev-ps-exporter.h24
-rw-r--r--pdf/ev-poppler.cc98
-rw-r--r--ps/ps-document.c28
-rw-r--r--shell/ev-jobs.c9
-rw-r--r--shell/ev-jobs.h2
-rw-r--r--shell/ev-page-cache.c19
-rw-r--r--shell/ev-page-cache.h46
-rw-r--r--shell/ev-pixbuf-cache.c25
-rw-r--r--shell/ev-pixbuf-cache.h1
-rw-r--r--shell/ev-print-job.c10
-rw-r--r--shell/ev-sidebar-thumbnails.c3
-rw-r--r--shell/ev-view.c66
-rw-r--r--thumbnailer/evince-thumbnailer.c3
-rw-r--r--tiff/tiff-document.c38
19 files changed, 219 insertions, 217 deletions
diff --git a/ChangeLog b/ChangeLog
index 779e564..b6d26dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,48 @@
2005-07-29 Marco Pesenti Gritti <mpg@redhat.com>
+ * backend/ev-document-thumbnails.c:
+ (ev_document_thumbnails_get_thumbnail):
+ * backend/ev-document-thumbnails.h:
+ * backend/ev-document.c:
+ * backend/ev-document.h:
+ * backend/ev-ps-exporter.c: (ev_ps_exporter_do_page):
+ * backend/ev-ps-exporter.h:
+ * pdf/ev-poppler.cc:
+ * ps/ps-document.c: (ps_document_document_iface_init),
+ (ps_document_ps_export_do_page):
+ * shell/ev-jobs.c: (ev_job_thumbnail_new), (ev_job_thumbnail_run):
+ * shell/ev-jobs.h:
+ * shell/ev-page-cache.c: (ev_page_cache_get_size),
+ (ev_page_cache_get):
+ * shell/ev-page-cache.h:
+ * shell/ev-pixbuf-cache.c: (check_job_size_and_unref),
+ (add_job_if_needed), (ev_pixbuf_cache_add_jobs_if_needed),
+ (ev_pixbuf_cache_set_page_range), (new_selection_pixbuf_needed):
+ * shell/ev-pixbuf-cache.h:
+ * shell/ev-print-job.c: (idle_print_handler):
+ * shell/ev-sidebar-thumbnails.c: (add_range):
+ * shell/ev-view.c: (view_update_range_and_current_page),
+ (get_page_extents), (ev_view_size_request_dual_page),
+ (ev_view_size_request_single_page), (draw_one_page),
+ (clear_caches), (ev_view_set_orientation), (ev_view_rotate_right),
+ (ev_view_rotate_left), (ev_view_zoom_for_size_presentation),
+ (ev_view_zoom_for_size_dual_page),
+ (ev_view_zoom_for_size_single_page), (compute_new_selection_text),
+ (ev_view_select_all):
+ * thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get):
+ * tiff/tiff-document.c: (tiff_document_get_page_size),
+ (tiff_document_get_orientation), (rotate_pixbuf),
+ (tiff_document_render_pixbuf), (tiff_document_document_iface_init),
+ (tiff_document_thumbnails_get_thumbnail),
+ (tiff_document_ps_export_do_page), (tiff_document_init):
+
+ Really make use of the orientation bit of the render context.
+ Use the render context in a few more places in the backend API.
+ This regress orientation, but now it's done right. Will try to
+ fix it up asap...
+
+2005-07-29 Marco Pesenti Gritti <mpg@redhat.com>
+
* shell/ev-view.c: (ensure_rectangle_is_visible):
Patch by Nickolay V. Shmyrev to fix find flickering
diff --git a/backend/ev-document-thumbnails.c b/backend/ev-document-thumbnails.c
index 260d623..9bf1695 100644
--- a/backend/ev-document-thumbnails.c
+++ b/backend/ev-document-thumbnails.c
@@ -47,6 +47,7 @@ ev_document_thumbnails_get_type (void)
GdkPixbuf *
ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
gint page,
+ EvOrientation orientation,
gint size,
gboolean border)
{
@@ -55,7 +56,8 @@ ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
g_return_val_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document), NULL);
iface = EV_DOCUMENT_THUMBNAILS_GET_IFACE (document);
- return iface->get_thumbnail (document, page, size, border);
+
+ return iface->get_thumbnail (document, page, orientation, size, border);
}
void
diff --git a/backend/ev-document-thumbnails.h b/backend/ev-document-thumbnails.h
index c84e426..ea77629 100644
--- a/backend/ev-document-thumbnails.h
+++ b/backend/ev-document-thumbnails.h
@@ -23,6 +23,8 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
+#include "ev-render-context.h"
+
G_BEGIN_DECLS
#define EV_TYPE_DOCUMENT_THUMBNAILS (ev_document_thumbnails_get_type ())
@@ -42,6 +44,7 @@ struct _EvDocumentThumbnailsIface
/* Methods */
GdkPixbuf * (* get_thumbnail) (EvDocumentThumbnails *document,
gint page,
+ EvOrientation orientation,
gint size,
gboolean border);
void (* get_dimensions) (EvDocumentThumbnails *document,
@@ -60,6 +63,7 @@ GType ev_document_thumbnails_get_type (void);
GdkPixbuf *ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
gint page,
+ EvOrientation orientation,
gint size,
gboolean border);
void ev_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
diff --git a/backend/ev-document.c b/backend/ev-document.c
index 3395bf7..2778f77 100644
--- a/backend/ev-document.c
+++ b/backend/ev-document.c
@@ -226,15 +226,6 @@ ev_document_get_orientation (EvDocument *document)
}
void
-ev_document_set_orientation (EvDocument *document,
- EvOrientation orientation)
-{
- EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
-
- iface->set_orientation (document, orientation);
-}
-
-void
ev_document_info_free (EvDocumentInfo *info)
{
if (info == NULL)
diff --git a/backend/ev-ps-exporter.c b/backend/ev-ps-exporter.c
index 09ed17c..56944a6 100644
--- a/backend/ev-ps-exporter.c
+++ b/backend/ev-ps-exporter.c
@@ -58,11 +58,11 @@ ev_ps_exporter_begin (EvPSExporter *exporter, const char *filename,
}
void
-ev_ps_exporter_do_page (EvPSExporter *exporter, int page)
+ev_ps_exporter_do_page (EvPSExporter *exporter, EvRenderContext *rc)
{
EvPSExporterIface *iface = EV_PS_EXPORTER_GET_IFACE (exporter);
- iface->do_page (exporter, page);
+ iface->do_page (exporter, rc);
}
void
diff --git a/backend/ev-ps-exporter.h b/backend/ev-ps-exporter.h
index 36d2613..4115e3a 100644
--- a/backend/ev-ps-exporter.h
+++ b/backend/ev-ps-exporter.h
@@ -25,6 +25,8 @@
#include <glib-object.h>
+#include "ev-render-context.h"
+
G_BEGIN_DECLS
#define EV_TYPE_PS_EXPORTER (ev_ps_exporter_get_type ())
@@ -41,16 +43,16 @@ struct _EvPSExporterIface {
GTypeInterface base_iface;
/* Methods */
- void (* begin) (EvPSExporter *exporter,
- const char *filename,
- int first_page,
- int last_page,
- double paper_width,
- double paper_height,
- gboolean duplex);
- void (* do_page) (EvPSExporter *exporter,
- int page);
- void (* end) (EvPSExporter *exporter);
+ void (* begin) (EvPSExporter *exporter,
+ const char *filename,
+ int first_page,
+ int last_page,
+ double paper_width,
+ double paper_height,
+ gboolean duplex);
+ void (* do_page) (EvPSExporter *exporter,
+ EvRenderContext *rc);
+ void (* end) (EvPSExporter *exporter);
};
GType ev_ps_exporter_get_type (void);
@@ -58,7 +60,7 @@ void ev_ps_exporter_begin (EvPSExporter *exporter, const char *filename,
int first_page, int last_page,
double paper_width, double paper_height,
gboolean duplex);
-void ev_ps_exporter_do_page (EvPSExporter *exporter, int page);
+void ev_ps_exporter_do_page (EvPSExporter *exporter, EvRenderContext *rc);
void ev_ps_exporter_end (EvPSExporter *exporter);
G_END_DECLS
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc
index 2695e86..08b811b 100644
--- a/pdf/ev-poppler.cc
+++ b/pdf/ev-poppler.cc
@@ -57,9 +57,6 @@ struct _PdfDocument
PopplerPSFile *ps_file;
gchar *password;
- PopplerOrientation orientation;
- gboolean orientation_set;
-
PopplerFontInfo *font_info;
PopplerFontsIter *fonts_iter;
int fonts_scanned_pages;
@@ -252,11 +249,28 @@ pdf_document_get_n_pages (EvDocument *document)
/* FIXME This should not be necessary, poppler should rember it */
static void
-set_page_orientation (PdfDocument *pdf_document, PopplerPage *page)
+set_page_orientation (PdfDocument *pdf_document, PopplerPage *page, EvOrientation orientation)
{
- if (pdf_document->orientation_set) {
- poppler_page_set_orientation (page, pdf_document->orientation);
+ PopplerOrientation poppler_orientation;
+
+ switch (orientation) {
+ case EV_ORIENTATION_PORTRAIT:
+ poppler_orientation = POPPLER_ORIENTATION_PORTRAIT;
+ break;
+ case EV_ORIENTATION_LANDSCAPE:
+ poppler_orientation = POPPLER_ORIENTATION_LANDSCAPE;
+ break;
+ case EV_ORIENTATION_UPSIDEDOWN:
+ poppler_orientation = POPPLER_ORIENTATION_UPSIDEDOWN;
+ break;
+ case EV_ORIENTATION_SEASCAPE:
+ poppler_orientation = POPPLER_ORIENTATION_SEASCAPE;
+ break;
+ default:
+ g_assert_not_reached ();
}
+
+ poppler_page_set_orientation (page, poppler_orientation);
}
static void
@@ -269,7 +283,6 @@ pdf_document_get_page_size (EvDocument *document,
PopplerPage *poppler_page;
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
poppler_page_get_size (poppler_page, width, height);
g_object_unref (poppler_page);
}
@@ -345,7 +358,7 @@ pdf_document_render_pixbuf (EvDocument *document,
pdf_document = PDF_DOCUMENT (document);
poppler_page = poppler_document_get_page (pdf_document->document,
rc->page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, rc->orientation);
poppler_page_get_size (poppler_page, &width_points, &height_points);
width = (int) ((width_points * rc->scale) + 0.5);
@@ -540,7 +553,6 @@ pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
char *text;
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
g_return_val_if_fail (poppler_page != NULL, NULL);
poppler_page_get_size (poppler_page, NULL, &height);
@@ -562,11 +574,7 @@ pdf_document_get_orientation (EvDocument *document)
EvOrientation result;
PdfDocument *pdf_document = PDF_DOCUMENT (document);
- if (!pdf_document->orientation_set) {
- pdf_document->orientation = get_document_orientation (pdf_document);
- }
-
- switch (pdf_document->orientation) {
+ switch (get_document_orientation (pdf_document)) {
case POPPLER_ORIENTATION_PORTRAIT:
result = EV_ORIENTATION_PORTRAIT;
break;
@@ -587,33 +595,6 @@ pdf_document_get_orientation (EvDocument *document)
}
static void
-pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
-{
- PdfDocument *pdf_document = PDF_DOCUMENT (document);
- PopplerOrientation poppler_orientation;
-
- switch (orientation) {
- case EV_ORIENTATION_PORTRAIT:
- poppler_orientation = POPPLER_ORIENTATION_PORTRAIT;
- break;
- case EV_ORIENTATION_LANDSCAPE:
- poppler_orientation = POPPLER_ORIENTATION_LANDSCAPE;
- break;
- case EV_ORIENTATION_UPSIDEDOWN:
- poppler_orientation = POPPLER_ORIENTATION_UPSIDEDOWN;
- break;
- case EV_ORIENTATION_SEASCAPE:
- poppler_orientation = POPPLER_ORIENTATION_SEASCAPE;
- break;
- default:
- g_assert_not_reached ();
- }
-
- pdf_document->orientation = poppler_orientation;
- pdf_document->orientation_set = TRUE;
-}
-
-static void
pdf_document_document_iface_init (EvDocumentIface *iface)
{
iface->save = pdf_document_save;
@@ -626,7 +607,6 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
iface->get_text = pdf_document_get_text;
iface->can_get_text = pdf_document_can_get_text;
iface->get_info = pdf_document_get_info;
- iface->set_orientation = pdf_document_set_orientation;
iface->get_orientation = pdf_document_get_orientation;
};
@@ -861,10 +841,11 @@ pdf_document_document_links_iface_init (EvDocumentLinksIface *iface)
}
static GdkPixbuf *
-make_thumbnail_for_size (PdfDocument *pdf_document,
- gint page,
- gint size,
- gboolean border)
+make_thumbnail_for_size (PdfDocument *pdf_document,
+ gint page,
+ EvOrientation orientation,
+ gint size,
+ gboolean border)
{
PopplerPage *poppler_page;
GdkPixbuf *pixbuf, *sub_pixbuf;
@@ -873,10 +854,11 @@ make_thumbnail_for_size (PdfDocument *pdf_document,
gdouble unscaled_width, unscaled_height;
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, orientation);
g_return_val_if_fail (poppler_page != NULL, NULL);
- pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page, size, &width, &height);
+ pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page,
+ size, &width, &height);
poppler_page_get_size (poppler_page, &unscaled_width, &unscaled_height);
scale = width / unscaled_width;
@@ -908,6 +890,7 @@ make_thumbnail_for_size (PdfDocument *pdf_document,
static GdkPixbuf *
pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
gint page,
+ EvOrientation orientation,
gint size,
gboolean border)
{
@@ -918,7 +901,7 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
pdf_document = PDF_DOCUMENT (document_thumbnails);
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, orientation);
g_return_val_if_fail (poppler_page != NULL, NULL);
pixbuf = poppler_page_get_thumbnail (poppler_page);
@@ -934,7 +917,7 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
}
} else {
/* There is no provided thumbnail. We need to make one. */
- pixbuf = make_thumbnail_for_size (pdf_document, page, size, border);
+ pixbuf = make_thumbnail_for_size (pdf_document, page, orientation, size, border);
}
g_object_unref (poppler_page);
@@ -955,7 +938,6 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail
pdf_document = PDF_DOCUMENT (document_thumbnails);
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
g_return_if_fail (width != NULL);
g_return_if_fail (height != NULL);
@@ -997,7 +979,6 @@ pdf_document_search_idle_callback (void *data)
page = poppler_document_get_page (search->document->document,
search->search_page);
- set_page_orientation (pdf_document, page);
ev_document_doc_mutex_lock ();
matches = poppler_page_find_text (page, search->text);
@@ -1117,7 +1098,6 @@ pdf_document_find_get_result (EvDocumentFind *document_find,
return FALSE;
poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
poppler_page_get_size (poppler_page, NULL, &height);
rectangle->x1 = r->x1;
rectangle->y1 = height - r->y2;
@@ -1200,15 +1180,15 @@ pdf_document_ps_exporter_begin (EvPSExporter *exporter, const char *filename,
}
static void
-pdf_document_ps_exporter_do_page (EvPSExporter *exporter, int page)
+pdf_document_ps_exporter_do_page (EvPSExporter *exporter, EvRenderContext *rc)
{
PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
PopplerPage *poppler_page;
g_return_if_fail (pdf_document->ps_file != NULL);
- poppler_page = poppler_document_get_page (pdf_document->document, page);
- set_page_orientation (pdf_document, poppler_page);
+ poppler_page = poppler_document_get_page (pdf_document->document, rc->page);
+ set_page_orientation (pdf_document, poppler_page, rc->orientation);
poppler_page_render_to_ps (poppler_page, pdf_document->ps_file);
g_object_unref (poppler_page);
}
@@ -1246,7 +1226,7 @@ pdf_selection_render_selection (EvSelection *selection,
pdf_document = PDF_DOCUMENT (selection);
poppler_page = poppler_document_get_page (pdf_document->document,
rc->page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, rc->orientation);
poppler_page_get_size (poppler_page, &width_points, &height_points);
width = (int) ((width_points * rc->scale) + 0.5);
@@ -1279,7 +1259,7 @@ pdf_selection_get_selection_region (EvSelection *selection,
pdf_document = PDF_DOCUMENT (selection);
poppler_page = poppler_document_get_page (pdf_document->document,
rc->page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, rc->orientation);
retval = poppler_page_get_selection_region (poppler_page, rc->scale, (PopplerRectangle *) points);
g_object_unref (poppler_page);
@@ -1299,7 +1279,7 @@ pdf_selection_get_selection_map (EvSelection *selection,
pdf_document = PDF_DOCUMENT (selection);
poppler_page = poppler_document_get_page (pdf_document->document,
rc->page);
- set_page_orientation (pdf_document, poppler_page);
+ set_page_orientation (pdf_document, poppler_page, rc->orientation);
points.x1 = 0.0;
points.y1 = 0.0;
diff --git a/ps/ps-document.c b/ps/ps-document.c
index 4f38e6b..28c4374 100644
--- a/ps/ps-document.c
+++ b/ps/ps-document.c
@@ -1270,29 +1270,6 @@ ps_document_get_orientation (EvDocument *document)
}
static void
-ps_document_set_orientation (EvDocument *document, EvOrientation orientation)
-{
- PSDocument *ps = PS_DOCUMENT (document);
-
- g_return_if_fail (ps != NULL);
-
- switch (orientation) {
- case EV_ORIENTATION_PORTRAIT:
- ps->orientation = GTK_GS_ORIENTATION_PORTRAIT;
- break;
- case EV_ORIENTATION_LANDSCAPE:
- ps->orientation = GTK_GS_ORIENTATION_LANDSCAPE;
- break;
- case EV_ORIENTATION_UPSIDEDOWN:
- ps->orientation = GTK_GS_ORIENTATION_UPSIDEDOWN;
- break;
- case EV_ORIENTATION_SEASCAPE:
- ps->orientation = GTK_GS_ORIENTATION_SEASCAPE;
- break;
- }
-}
-
-static void
ps_document_document_iface_init (EvDocumentIface *iface)
{
iface->load = ps_document_load;
@@ -1301,7 +1278,6 @@ ps_document_document_iface_init (EvDocumentIface *iface)
iface->get_n_pages = ps_document_get_n_pages;
iface->get_page_size = ps_document_get_page_size;
iface->get_info = ps_document_get_info;
- iface->set_orientation = ps_document_set_orientation;
iface->get_orientation = ps_document_get_orientation;
}
@@ -1325,11 +1301,11 @@ ps_document_ps_export_begin (EvPSExporter *exporter, const char *filename,
}
static void
-ps_document_ps_export_do_page (EvPSExporter *exporter, int page)
+ps_document_ps_export_do_page (EvPSExporter *exporter, EvRenderContext *rc)
{
PSDocument *document = PS_DOCUMENT (exporter);
- document->ps_export_pagelist[page] = 1;
+ document->ps_export_pagelist[rc->page] = 1;
}
static void
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index 4cc0c25..677b39f 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -299,9 +299,10 @@ ev_job_render_run (EvJobRender *job)
}
EvJob *
-ev_job_thumbnail_new (EvDocument *document,
- gint page,
- gint requested_width)
+ev_job_thumbnail_new (EvDocument *document,
+ gint page,
+ EvOrientation orientation,
+ gint requested_width)
{
EvJobThumbnail *job;
@@ -309,6 +310,7 @@ ev_job_thumbnail_new (EvDocument *document,
EV_JOB (job)->document = g_object_ref (document);
job->page = page;
+ job->orientation = orientation;
job->requested_width = requested_width;
return EV_JOB (job);
@@ -324,6 +326,7 @@ ev_job_thumbnail_run (EvJobThumbnail *job)
job->thumbnail =
ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
job->page,
+ job->orientation,
job->requested_width,
TRUE);
EV_JOB (job)->finished = TRUE;
diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h
index 263f9a1..070fd4d 100644
--- a/shell/ev-jobs.h
+++ b/shell/ev-jobs.h
@@ -135,6 +135,7 @@ struct _EvJobThumbnail
EvJob parent;
gint page;
+ EvOrientation orientation;
gint requested_width;
GdkPixbuf *thumbnail;
};
@@ -192,6 +193,7 @@ void ev_job_render_run (EvJobRender *thumbnail);
GType ev_job_thumbnail_get_type (void);
EvJob *ev_job_thumbnail_new (EvDocument *document,
gint page,
+ EvOrientation orientation,
gint requested_width);
void ev_job_thumbnail_run (EvJobThumbnail *thumbnail);
diff --git a/shell/ev-page-cache.c b/shell/ev-page-cache.c
index 936328f..41acecf 100644
--- a/shell/ev-page-cache.c
+++ b/shell/ev-page-cache.c
@@ -322,11 +322,12 @@ ev_page_cache_get_title (EvPageCache *page_cache)
}
void
-ev_page_cache_get_size (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *width,
- gint *height)
+ev_page_cache_get_size (EvPageCache *page_cache,
+ gint page,
+ EvOrientation orientation,
+ gfloat scale,
+ gint *width,
+ gint *height)
{
g_return_if_fail (EV_IS_PAGE_CACHE (page_cache));
g_return_if_fail (page >= 0 && page < page_cache->n_pages);
@@ -481,11 +482,3 @@ ev_page_cache_get (EvDocument *document)
return page_cache;
}
-
-void
-ev_page_cache_clear (EvDocument *document)
-{
- g_return_if_fail (EV_IS_DOCUMENT (document));
-
- g_object_set_data (G_OBJECT (document), PAGE_CACHE_STRING, NULL);
-}
diff --git a/shell/ev-page-cache.h b/shell/ev-page-cache.h
index 2b270b0..af8532e 100644
--- a/shell/ev-page-cache.h
+++ b/shell/ev-page-cache.h
@@ -31,28 +31,29 @@ G_BEGIN_DECLS
GType ev_page_cache_get_type (void) G_GNUC_CONST;
/* Used by ev-document.c only */
-EvPageCache *ev_page_cache_new (EvDocument *document);
-gint ev_page_cache_get_n_pages (EvPageCache *page_cache);
-const char *ev_page_cache_get_title (EvPageCache *page_cache);
-void ev_page_cache_get_size (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *width,
- gint *height);
-void ev_page_cache_get_max_width (EvPageCache *page_cache,
- gfloat scale,
- gint *width);
-void ev_page_cache_get_max_height (EvPageCache *page_cache,
- gfloat scale,
- gint *height);
-void ev_page_cache_get_height_to_page (EvPageCache *page_cache,
- gint page,
- gfloat scale,
- gint *height,
- gint *dual_height);
-gint ev_page_cache_get_max_label_chars (EvPageCache *page_cache);
-char *ev_page_cache_get_page_label (EvPageCache *page_cache,
- gint page);
+EvPageCache *ev_page_cache_new (EvDocument *document);
+gint ev_page_cache_get_n_pages (EvPageCache *page_cache);
+const char *ev_page_cache_get_title (EvPageCache *page_cache);
+void ev_page_cache_get_size (EvPageCache *page_cache,
+ gint page,
+ EvOrientation orientation,
+ gfloat scale,
+ gint *width,
+ gint *height);
+void ev_page_cache_get_max_width (EvPageCache *page_cache,
+ gfloat scale,
+ gint *width);
+void ev_page_cache_get_max_height (EvPageCache *page_cache,
+ gfloat scale,
+ gint *height);
+void ev_page_cache_get_height_to_page (EvPageCache *page_cache,
+ gint page,
+ gfloat scale,
+ gint *height,
+ gint *dual_height);
+gint ev_page_cache_get_max_label_chars (EvPageCache *page_cache);
+char *ev_page_cache_get_page_label (EvPageCache *page_cache,
+ gint page);
gboolean ev_page_cache_has_nonnumeric_page_labels (EvPageCache *page_cache);
const EvDocumentInfo *ev_page_cache_get_info (EvPageCache *page_cache);
@@ -68,7 +69,6 @@ gboolean ev_page_cache_next_page (EvPageCache *page_cache);
gboolean ev_page_cache_prev_page (EvPageCache *page_cache);
EvPageCache *ev_page_cache_get (EvDocument *document);
-void ev_page_cache_clear (EvDocument *document);
G_END_DECLS
diff --git a/shell/ev-pixbuf-cache.c b/shell/ev-pixbuf-cache.c
index 0d1507d..00d71d4 100644
--- a/shell/ev-pixbuf-cache.c
+++ b/shell/ev-pixbuf-cache.c
@@ -255,6 +255,7 @@ check_job_size_and_unref (CacheJobInfo *job_info,
ev_page_cache_get_size (page_cache,
EV_JOB_RENDER (job_info->job)->rc->page,
+ EV_JOB_RENDER (job_info->job)->rc->orientation,
scale,
&width, &height);
@@ -478,6 +479,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
CacheJobInfo *job_info,
EvPageCache *page_cache,
gint page,
+ EvOrientation orientation,
gfloat scale,
EvJobPriority priority)
{
@@ -489,9 +491,8 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
if (job_info->job)
return;
- ev_page_cache_get_size (page_cache,
- page, scale,
- &width, &height);
+ ev_page_cache_get_size (page_cache, page, orientation,
+ scale, &width, &height);
if (job_info->pixbuf &&
gdk_pixbuf_get_width (job_info->pixbuf) == width &&
@@ -500,11 +501,11 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
/* make a new job now */
if (job_info->rc == NULL) {
- job_info->rc = ev_render_context_new (EV_ORIENTATION_PORTRAIT,
- page, scale);
+ job_info->rc = ev_render_context_new (orientation, page, scale);
} else {
ev_render_context_set_page (job_info->rc, page);
ev_render_context_set_scale (job_info->rc, scale);
+ ev_render_context_set_orientation (job_info->rc, orientation);
}
/* Figure out what else we need for this job */
@@ -530,6 +531,7 @@ add_job_if_needed (EvPixbufCache *pixbuf_cache,
static void
ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
+ EvOrientation orientation,
gfloat scale)
{
EvPageCache *page_cache;
@@ -544,7 +546,7 @@ ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
page = pixbuf_cache->start_page + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, orientation, scale,
EV_JOB_PRIORITY_HIGH);
}
@@ -553,7 +555,7 @@ ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, orientation, scale,
EV_JOB_PRIORITY_LOW);
}
@@ -562,7 +564,7 @@ ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
page = pixbuf_cache->end_page + 1 + i;
add_job_if_needed (pixbuf_cache, job_info,
- page_cache, page, scale,
+ page_cache, page, orientation, scale,
EV_JOB_PRIORITY_LOW);
}
@@ -572,6 +574,7 @@ void
ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
gint start_page,
gint end_page,
+ EvOrientation orientation,
gfloat scale,
GList *selection_list)
{
@@ -598,7 +601,7 @@ ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
/* Finally, we add the new jobs for all the sizes that don't have a
* pixbuf */
- ev_pixbuf_cache_add_jobs_if_needed (pixbuf_cache, scale);
+ ev_pixbuf_cache_add_jobs_if_needed (pixbuf_cache, orientation, scale);
}
GdkPixbuf *
@@ -651,8 +654,8 @@ new_selection_pixbuf_needed (EvPixbufCache *pixbuf_cache,
if (job_info->selection) {
page_cache = ev_page_cache_get (pixbuf_cache->document);
- ev_page_cache_get_size (page_cache, page, scale,
- &width, &height);
+ ev_page_cache_get_size (page_cache, page, job_info->rc->orientation,
+ scale, &width, &height);
if (width != gdk_pixbuf_get_width (job_info->selection) ||
height != gdk_pixbuf_get_height (job_info->selection))
diff --git a/shell/ev-pixbuf-cache.h b/shell/ev-pixbuf-cache.h
index 3081c3b..7af7243 100644
--- a/shell/ev-pixbuf-cache.h
+++ b/shell/ev-pixbuf-cache.h
@@ -52,6 +52,7 @@ EvPixbufCache *ev_pixbuf_cache_new (EvDocument *document);
void ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
gint start_page,
gint end_page,
+ EvOrientation orientation,
gfloat scale,
GList *selection_list);
GdkPixbuf *ev_pixbuf_cache_get_pixbuf (EvPixbufCache *pixbuf_cache,
diff --git a/shell/ev-print-job.c b/shell/ev-print-job.c
index 1f215c7..b9aded8 100644
--- a/shell/ev-print-job.c
+++ b/shell/ev-print-job.c
@@ -269,13 +269,19 @@ idle_print_handler (EvPrintJob *job)
}
if (job->next_page <= job->last_page) {
+ EvRenderContext *rc;
#if 0
g_printerr ("Printing page %d\n", job->next_page);
#endif
+ rc = ev_render_context_new (EV_ORIENTATION_PORTRAIT,
+ job->next_page, 1.0);
+
ev_document_doc_mutex_lock ();
- ev_ps_exporter_do_page (EV_PS_EXPORTER (job->document),
- job->next_page);
+ ev_ps_exporter_do_page (EV_PS_EXPORTER (job->document), rc);
ev_document_doc_mutex_unlock ();
+
+ g_object_unref (rc);
+
job->next_page++;
return TRUE;
} else { /* no more pages */
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index c2c07c8..f992d87 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -229,7 +229,8 @@ add_range (EvSidebarThumbnails *sidebar_thumbnails,
-1);
if (job == NULL && !thumbnail_set) {
- job = (EvJobThumbnail *)ev_job_thumbnail_new (priv->document, page, THUMBNAIL_WIDTH);
+ job = (EvJobThumbnail *)ev_job_thumbnail_new (priv->document, page, THUMBNAIL_WIDTH,
+ EV_ORIENTATION_PORTRAIT);
ev_job_queue_add_job (EV_JOB (job), EV_JOB_PRIORITY_HIGH);
g_object_set_data_full (G_OBJECT (job), "tree_iter",
gtk_tree_iter_copy (&iter),
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 9ddabf7..3d24c50 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -149,6 +149,7 @@ struct _EvView {
int find_result;
int spacing;
+ EvOrientation orientation;
double scale;
gboolean continuous;
@@ -531,6 +532,7 @@ view_update_range_and_current_page (EvView *view)
ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
view->start_page,
view->end_page,
+ view->orientation,
view->scale,
view->selection_info.selections);
}
@@ -786,6 +788,7 @@ get_page_extents (EvView *view,
/* Get the size of the page */
ev_page_cache_get_size (view->page_cache, page,
+ view->orientation,
view->scale,
&width, &height);
compute_border (view, width, height, border);
@@ -831,6 +834,7 @@ get_page_extents (EvView *view,
if (other_page < ev_page_cache_get_n_pages (view->page_cache)) {
ev_page_cache_get_size (view->page_cache,
other_page,
+ view->orientation,
view->scale,
&width_2, &height_2);
if (width_2 > width)
@@ -1116,12 +1120,14 @@ ev_view_size_request_dual_page (EvView *view,
/* Find the largest of the two. */
ev_page_cache_get_size (view->page_cache,
view->current_page,
+ view->orientation,
view->scale,
&width, &height);
if (view->current_page + 1 < ev_page_cache_get_n_pages (view->page_cache)) {
gint width_2, height_2;
ev_page_cache_get_size (view->page_cache,
view->current_page + 1,
+ view->orientation,
view->scale,
&width_2, &height_2);
if (width_2 > width) {
@@ -1153,6 +1159,7 @@ ev_view_size_request_single_page (EvView *view,
ev_page_cache_get_size (view->page_cache,
view->current_page,
+ view->orientation,
view->scale,
&width, &height);
compute_border (view, width, height, &border);
@@ -1605,7 +1612,8 @@ draw_one_page (EvView *view,
selection = find_selection_for_page (view, page);
ev_page_cache_get_size (view->page_cache,
- page, view->scale,
+ page, view->orientation,
+ view->scale,
&width, &height);
/* Render the document itself */
real_page_area = *page_area;
@@ -2041,8 +2049,9 @@ clear_caches (EvView *view)
view->pixbuf_cache = NULL;
}
- if (view->document) {
- ev_page_cache_clear (view->document);
+ if (view->page_cache) {
+ g_object_unref (view->page_cache);
+ view->page_cache = NULL;
}
}
@@ -2290,10 +2299,7 @@ static void
ev_view_set_orientation (EvView *view,
EvOrientation orientation)
{
- ev_document_set_orientation (view->document, orientation);
-
- clear_caches (view);
- setup_caches (view);
+ view->orientation = orientation;
gtk_widget_queue_resize (GTK_WIDGET (view));
}
@@ -2301,37 +2307,37 @@ ev_view_set_orientation (EvView *view,
void
ev_view_rotate_right (EvView *view)
{
- EvOrientation orientation, new_orientation;
+ EvOrientation orientation;
- orientation = ev_document_get_orientation (view->document);
- if (orientation == EV_ORIENTATION_PORTRAIT) {
- new_orientation = EV_ORIENTATION_LANDSCAPE;
- } else if (orientation == EV_ORIENTATION_LANDSCAPE) {
- new_orientation = EV_ORIENTATION_UPSIDEDOWN;
- } else if (orientation == EV_ORIENTATION_UPSIDEDOWN) {
- new_orientation = EV_ORIENTATION_SEASCAPE;
+ if (view->orientation == EV_ORIENTATION_PORTRAIT) {
+ orientation = EV_ORIENTATION_LANDSCAPE;
+ } else if (view->orientation == EV_ORIENTATION_LANDSCAPE) {
+ orientation = EV_ORIENTATION_UPSIDEDOWN;
+ } else if (view->orientation == EV_ORIENTATION_UPSIDEDOWN) {
+ orientation = EV_ORIENTATION_SEASCAPE;
} else {
- new_orientation = EV_ORIENTATION_PORTRAIT;
+ orientation = EV_ORIENTATION_PORTRAIT;
}
- ev_view_set_orientation (view, new_orientation);
+
+ ev_view_set_orientation (view, orientation);
}
void
ev_view_rotate_left (EvView *view)
{
- EvOrientation orientation, new_orientation;
+ EvOrientation orientation;
- orientation = ev_document_get_orientation (view->document);
- if (orientation == EV_ORIENTATION_PORTRAIT) {
- new_orientation = EV_ORIENTATION_SEASCAPE;
- } else if (orientation == EV_ORIENTATION_SEASCAPE) {
- new_orientation = EV_ORIENTATION_UPSIDEDOWN;
- } else if (orientation == EV_ORIENTATION_UPSIDEDOWN) {
- new_orientation = EV_ORIENTATION_LANDSCAPE;
+ if (view->orientation == EV_ORIENTATION_PORTRAIT) {
+ orientation = EV_ORIENTATION_SEASCAPE;
+ } else if (view->orientation == EV_ORIENTATION_SEASCAPE) {
+ orientation = EV_ORIENTATION_UPSIDEDOWN;
+ } else if (view->orientation == EV_ORIENTATION_UPSIDEDOWN) {
+ orientation = EV_ORIENTATION_LANDSCAPE;
} else {
- new_orientation = EV_ORIENTATION_PORTRAIT;
+ orientation = EV_ORIENTATION_PORTRAIT;
}
- ev_view_set_orientation (view, new_orientation);
+
+ ev_view_set_orientation (view, orientation);
}
static double
@@ -2384,6 +2390,7 @@ ev_view_zoom_for_size_presentation (EvView *view,
ev_page_cache_get_size (view->page_cache,
view->current_page,
+ view->orientation,
1.0,
&doc_width,
&doc_height);
@@ -2479,6 +2486,7 @@ ev_view_zoom_for_size_dual_page (EvView *view,
/* Find the largest of the two. */
ev_page_cache_get_size (view->page_cache,
view->current_page,
+ view->orientation,
1.0,
&doc_width, &doc_height);
@@ -2486,6 +2494,7 @@ ev_view_zoom_for_size_dual_page (EvView *view,
gint width_2, height_2;
ev_page_cache_get_size (view->page_cache,
other_page,
+ view->orientation,
1.0,
&width_2, &height_2);
if (width_2 > doc_width)
@@ -2522,6 +2531,7 @@ ev_view_zoom_for_size_single_page (EvView *view,
ev_page_cache_get_size (view->page_cache,
view->current_page,
+ view->orientation,
1.0,
&doc_width,
&doc_height);
@@ -2866,6 +2876,7 @@ compute_new_selection_text (EvView *view,
GdkPoint *point;
ev_page_cache_get_size (view->page_cache, i,
+ view->orientation,
1.0, &width, &height);
selection = g_new0 (EvViewSelection, 1);
@@ -2963,6 +2974,7 @@ ev_view_select_all (EvView *view)
EvViewSelection *selection;
ev_page_cache_get_size (view->page_cache,
+ view->orientation,
i, 1.0, &width, &height);
selection = g_new0 (EvViewSelection, 1);
diff --git a/thumbnailer/evince-thumbnailer.c b/thumbnailer/evince-thumbnailer.c
index 4e9f300..9c9bff2 100644
--- a/thumbnailer/evince-thumbnailer.c
+++ b/thumbnailer/evince-thumbnailer.c
@@ -86,7 +86,8 @@ evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail, int size)
}
pixbuf = ev_document_thumbnails_get_thumbnail
- (EV_DOCUMENT_THUMBNAILS (document), 0, size, FALSE);
+ (EV_DOCUMENT_THUMBNAILS (document), 0,
+ EV_ORIENTATION_PORTRAIT, size, FALSE);
if (pixbuf != NULL) {
const char *overlaid_icon_name = NULL;
diff --git a/tiff/tiff-document.c b/tiff/tiff-document.c
index aef7aaa..aba8851 100644
--- a/tiff/tiff-document.c
+++ b/tiff/tiff-document.c
@@ -41,7 +41,6 @@ struct _TiffDocument
TIFF *tiff;
gint n_pages;
- EvOrientation orientation;
TIFF2PSContext *ps_export_ctx;
};
@@ -171,40 +170,24 @@ tiff_document_get_page_size (EvDocument *document,
TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y_res);
h = h * (x_res / y_res);
- if (tiff_document->orientation == EV_ORIENTATION_PORTRAIT ||
- tiff_document->orientation == EV_ORIENTATION_UPSIDEDOWN) {
- *width = w;
- *height = h;
- } else {
- *width = h;
- *height = w;
- }
+ *width = w;
+ *height = h;
+
pop_handlers ();
}
static EvOrientation
tiff_document_get_orientation (EvDocument *document)
{
- TiffDocument *tiff_document = TIFF_DOCUMENT (document);
-
- return tiff_document->orientation;
-}
-
-static void
-tiff_document_set_orientation (EvDocument *document,
- EvOrientation orientation)
-{
- TiffDocument *tiff_document = TIFF_DOCUMENT (document);
-
- tiff_document->orientation = orientation;
+ return EV_ORIENTATION_PORTRAIT;
}
static GdkPixbuf *
-rotate_pixbuf (EvDocument *document, GdkPixbuf *pixbuf)
+rotate_pixbuf (EvDocument *document, EvOrientation orientation, GdkPixbuf *pixbuf)
{
TiffDocument *tiff_document = TIFF_DOCUMENT (document);
- switch (tiff_document->orientation)
+ switch (orientation)
{
case EV_ORIENTATION_LANDSCAPE:
return gdk_pixbuf_rotate_simple (pixbuf, 90);
@@ -298,7 +281,7 @@ tiff_document_render_pixbuf (EvDocument *document,
GDK_INTERP_BILINEAR);
g_object_unref (pixbuf);
- rotated_pixbuf = rotate_pixbuf (document, scaled_pixbuf);
+ rotated_pixbuf = rotate_pixbuf (document, rc->orientation, scaled_pixbuf);
g_object_unref (scaled_pixbuf);
return rotated_pixbuf;
@@ -350,12 +333,12 @@ tiff_document_document_iface_init (EvDocumentIface *iface)
iface->render_pixbuf = tiff_document_render_pixbuf;
iface->get_info = tiff_document_get_info;
iface->get_orientation = tiff_document_get_orientation;
- iface->set_orientation = tiff_document_set_orientation;
}
static GdkPixbuf *
tiff_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
gint page,
+ EvOrientation orientation,
gint size,
gboolean border)
{
@@ -420,13 +403,13 @@ tiff_document_ps_export_begin (EvPSExporter *exporter, const char *filename,
}
static void
-tiff_document_ps_export_do_page (EvPSExporter *exporter, int page)
+tiff_document_ps_export_do_page (EvPSExporter *exporter, EvRenderContext *rc)
{
TiffDocument *document = TIFF_DOCUMENT (exporter);
if (document->ps_export_ctx == NULL)
return;
- if (TIFFSetDirectory (document->tiff, page) != 1)
+ if (TIFFSetDirectory (document->tiff, rc->page) != 1)
return;
tiff2ps_process_page (document->ps_export_ctx, document->tiff,
0, 0, 0, 0, 0);
@@ -454,5 +437,4 @@ static void
tiff_document_init (TiffDocument *tiff_document)
{
tiff_document->n_pages = -1;
- tiff_document->orientation = EV_ORIENTATION_PORTRAIT;
}