diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ev-jobs.c | 9 | ||||
-rw-r--r-- | shell/ev-jobs.h | 2 | ||||
-rw-r--r-- | shell/ev-page-cache.c | 19 | ||||
-rw-r--r-- | shell/ev-page-cache.h | 46 | ||||
-rw-r--r-- | shell/ev-pixbuf-cache.c | 25 | ||||
-rw-r--r-- | shell/ev-pixbuf-cache.h | 1 | ||||
-rw-r--r-- | shell/ev-print-job.c | 10 | ||||
-rw-r--r-- | shell/ev-sidebar-thumbnails.c | 3 | ||||
-rw-r--r-- | shell/ev-view.c | 66 |
9 files changed, 101 insertions, 80 deletions
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); |