diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ev-page-cache.c | 6 | ||||
-rw-r--r-- | shell/ev-page-cache.h | 3 | ||||
-rw-r--r-- | shell/ev-view.c | 45 | ||||
-rw-r--r-- | shell/ev-view.h | 12 | ||||
-rw-r--r-- | shell/ev-window.c | 30 |
5 files changed, 82 insertions, 14 deletions
diff --git a/shell/ev-page-cache.c b/shell/ev-page-cache.c index 6c44c9f..936328f 100644 --- a/shell/ev-page-cache.c +++ b/shell/ev-page-cache.c @@ -482,4 +482,10 @@ 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 b0bf6cc..2b270b0 100644 --- a/shell/ev-page-cache.h +++ b/shell/ev-page-cache.h @@ -67,7 +67,8 @@ void ev_page_cache_set_link (EvPageCache *page_cache, 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); +EvPageCache *ev_page_cache_get (EvDocument *document); +void ev_page_cache_clear (EvDocument *document); G_END_DECLS diff --git a/shell/ev-view.c b/shell/ev-view.c index ff05be2..3e31d29 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1899,6 +1899,28 @@ ev_view_new (void) return view; } +static void +setup_caches (EvView *view) +{ + view->page_cache = ev_page_cache_get (view->document); + g_signal_connect (view->page_cache, "page-changed", G_CALLBACK (page_changed_cb), view); + view->pixbuf_cache = ev_pixbuf_cache_new (view->document); + g_signal_connect (view->pixbuf_cache, "job-finished", G_CALLBACK (job_finished_cb), view); +} + +static void +clear_caches (EvView *view) +{ + if (view->pixbuf_cache) { + g_object_unref (view->pixbuf_cache); + view->pixbuf_cache = NULL; + } + + if (view->document) { + ev_page_cache_clear (view->document); + } +} + void ev_view_set_document (EvView *view, EvDocument *document) @@ -1915,10 +1937,7 @@ ev_view_set_document (EvView *view, } - if (view->pixbuf_cache) { - g_object_unref (view->pixbuf_cache); - view->pixbuf_cache = NULL; - } + clear_caches (view); view->document = document; view->find_page = 0; @@ -1932,10 +1951,8 @@ ev_view_set_document (EvView *view, G_CALLBACK (find_changed_cb), view); } - view->page_cache = ev_page_cache_get (view->document); - g_signal_connect (view->page_cache, "page-changed", G_CALLBACK (page_changed_cb), view); - view->pixbuf_cache = ev_pixbuf_cache_new (view->document); - g_signal_connect (view->pixbuf_cache, "job-finished", G_CALLBACK (job_finished_cb), view); + + setup_caches (view); } gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -2125,6 +2142,18 @@ ev_view_zoom_out (EvView *view) ev_view_set_zoom (view, ZOOM_OUT_FACTOR, TRUE); } +void +ev_view_set_orientation (EvView *view, + EvOrientation orientation) +{ + ev_document_set_orientation (view->document, orientation); + + clear_caches (view); + setup_caches (view); + + gtk_widget_queue_resize (GTK_WIDGET (view)); +} + static double zoom_for_size_fit_width (int doc_width, int doc_height, diff --git a/shell/ev-view.h b/shell/ev-view.h index 4243761..2244ae0 100644 --- a/shell/ev-view.h +++ b/shell/ev-view.h @@ -85,12 +85,14 @@ void ev_view_set_zoom (EvView *view, double factor, gboolean relative); double ev_view_get_zoom (EvView *view); +void ev_view_set_zoom_for_size (EvView *view, + int width, + int height, + int vsb_width, + int hsb_height); +void ev_view_set_orientation (EvView *view, + EvOrientation orientation); -void ev_view_set_zoom_for_size (EvView *view, - int width, - int height, - int vsb_width, - int hsb_height); /* Find */ gboolean ev_view_can_find_next (EvView *view); void ev_view_find_next (EvView *view); diff --git a/shell/ev-window.c b/shell/ev-window.c index 46ae9a2..12fa3d8 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -1782,6 +1782,27 @@ ev_window_cmd_edit_toolbar_cb (GtkDialog *dialog, gint response, gpointer data) } static void +ev_window_cmd_edit_landscape (GtkAction *action, EvWindow *ev_window) +{ + ev_view_set_orientation (EV_VIEW (ev_window->priv->view), + EV_ORIENTATION_LANDSCAPE); +} + +static void +ev_window_cmd_edit_portrait (GtkAction *action, EvWindow *ev_window) +{ + ev_view_set_orientation (EV_VIEW (ev_window->priv->view), + EV_ORIENTATION_PORTRAIT); +} + +static void +ev_window_cmd_edit_flip (GtkAction *action, EvWindow *ev_window) +{ + ev_view_set_orientation (EV_VIEW (ev_window->priv->view), + EV_ORIENTATION_SEASCAPE); +} + +static void ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window) { GtkWidget *dialog; @@ -2474,6 +2495,15 @@ static const GtkActionEntry entries[] = { { "EditToolbar", NULL, N_("T_oolbar"), NULL, N_("Customize the toolbar"), G_CALLBACK (ev_window_cmd_edit_toolbar) }, + { "EditLandscape", NULL, N_("_Landscape"), NULL, + N_("Change the document orientation to landscape"), + G_CALLBACK (ev_window_cmd_edit_landscape) }, + { "EditPortrait", NULL, N_("_Portrait"), NULL, + N_("Change the document orientation to portrait"), + G_CALLBACK (ev_window_cmd_edit_portrait) }, + { "EditFlip", NULL, N_("_Flip"), NULL, + N_("Flip the document"), + G_CALLBACK (ev_window_cmd_edit_flip) }, /* View menu */ { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus", |