Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-06-14 21:04:23 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-06-14 21:04:23 (GMT)
commit79986dda7231d1ef1c530909bde8e18a507a2a2a (patch)
tree4da2836164c375d4fc17c3bc3dfbc67441b2a1b3 /shell
parentc7d050d9ac60d8711e8dd6369a1991296bde282f (diff)
Add orientation api. Currently poppler api is not optimal, we need to set
2005-06-14 Marco Pesenti Gritti <mpg@redhat.com> * backend/ev-document.c: (ev_document_set_orientation): * backend/ev-document.h: * pdf/ev-poppler.cc: Add orientation api. Currently poppler api is not optimal, we need to set orientation every time we _get a page * data/evince-ui.xml: * shell/ev-window.c: (ev_window_cmd_edit_landscape), (ev_window_cmd_edit_portrait), (ev_window_cmd_edit_flip): Add orientation menu items * shell/ev-page-cache.c: (ev_page_cache_clear): * shell/ev-page-cache.h: Add api to clear the cache * shell/ev-view.c: (setup_caches), (clear_caches), (ev_view_set_document), (ev_view_zoom_out), (ev_view_set_orientation): * shell/ev-view.h: Implement orientation changing
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-page-cache.c6
-rw-r--r--shell/ev-page-cache.h3
-rw-r--r--shell/ev-view.c45
-rw-r--r--shell/ev-view.h12
-rw-r--r--shell/ev-window.c30
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",