X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-view.c;h=c366b04c4f18dce855d60558b15e55ba42ad31e8;hb=0b77ab6efe83e32698b0f1390916c1a7d7738261;hp=a4032e9eca6c8a618480d5d476d3c57965678c0e;hpb=6c9ba464fdfc4b92f5d472705a53eb3f476431fb;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index a4032e9e..c366b04c 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1322,6 +1322,9 @@ ev_view_motion_notify_event (GtkWidget *widget, { EvView *view = EV_VIEW (widget); + if (!view->document) + return FALSE; + if (view->pressed_button == 1) { GdkRectangle selection; @@ -1371,7 +1374,7 @@ ev_view_motion_notify_event (GtkWidget *widget, return TRUE; } - } else if (view->pressed_button <= 0 && view->document) { + } else if (view->pressed_button <= 0) { EvLink *link; link = get_link_at_location (view, event->x + view->scroll_x, event->y + view->scroll_y); @@ -1899,6 +1902,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 +1940,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 +1954,8 @@ ev_view_set_document (EvView *view, G_CALLBACK (find_changed_cb), view); } - view->page_cache = ev_document_get_page_cache (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 +2145,54 @@ ev_view_zoom_out (EvView *view) ev_view_set_zoom (view, ZOOM_OUT_FACTOR, TRUE); } +static 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)); +} + +void +ev_view_rotate_right (EvView *view) +{ + EvOrientation orientation, new_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; + } else { + new_orientation = EV_ORIENTATION_PORTRAIT; + } + ev_view_set_orientation (view, new_orientation); +} + +void +ev_view_rotate_left (EvView *view) +{ + EvOrientation orientation, new_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; + } else { + new_orientation = EV_ORIENTATION_PORTRAIT; + } + ev_view_set_orientation (view, new_orientation); +} + static double zoom_for_size_fit_width (int doc_width, int doc_height, @@ -2505,7 +2573,7 @@ ev_view_find_next (EvView *view) int n_results, n_pages; EvDocumentFind *find = EV_DOCUMENT_FIND (view->document); - page_cache = ev_document_get_page_cache (view->document); + page_cache = ev_page_cache_get (view->document); n_results = ev_document_find_get_n_results (find, view->current_page); n_pages = ev_page_cache_get_n_pages (page_cache); @@ -2534,7 +2602,7 @@ ev_view_find_previous (EvView *view) EvDocumentFind *find = EV_DOCUMENT_FIND (view->document); EvPageCache *page_cache; - page_cache = ev_document_get_page_cache (view->document); + page_cache = ev_page_cache_get (view->document); n_results = ev_document_find_get_n_results (find, view->current_page);