X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=shell%2Fev-view.c;h=311504b147e4116a9e6b844ad92bfbbe709d11d6;hb=f693b48e9ca24fec37c190cdb90682c67e8e6c28;hp=b1e9733648c3a6376dd0ef5628399687a451986c;hpb=78165c67e4a06cdb7e1e868bc9b43924b5719292;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index b1e97336..311504b1 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -329,11 +329,14 @@ scroll_to_current_page (EvView *view, GtkOrientation orientation) if (orientation == GTK_ORIENTATION_VERTICAL) { if (view->continuous) { gtk_adjustment_clamp_page (view->vadjustment, - view_point.y - view->spacing, + view_point.y - view->spacing / 2, view_point.y + view->vadjustment->page_size); } else { gtk_adjustment_set_value (view->vadjustment, - view_point.y); + CLAMP (view_point.y, + view->vadjustment->lower, + view->vadjustment->upper - + view->vadjustment->page_size)); } } else { if (view->dual_page) { @@ -417,6 +420,8 @@ view_set_adjustment_values (EvView *view, static void view_update_range_and_current_page (EvView *view) { + gint current_page; + if (view->pending_scroll != SCROLL_TO_KEEP_POSITION) return; @@ -427,7 +432,6 @@ view_update_range_and_current_page (EvView *view) } else if (view->continuous) { GdkRectangle current_area, unused, page_area; GtkBorder border; - gint current_page; gboolean found = FALSE; int i; @@ -455,28 +459,33 @@ view_update_range_and_current_page (EvView *view) } } - current_page = ev_page_cache_get_current_page (view->page_cache); - - if (current_page < view->start_page || current_page > view->end_page) { - view->current_page = view->start_page; - ev_page_cache_set_current_page (view->page_cache, view->start_page); - } } else { if (view->dual_page) { - if (view->current_page % 2 == 0) { + if (view->current_page % 2 == DUAL_EVEN_LEFT) { view->start_page = view->current_page; if (view->current_page + 1 < ev_page_cache_get_n_pages (view->page_cache)) view->end_page = view->start_page + 1; else view->end_page = view->start_page; } else { - view->start_page = view->current_page - 1; + if (view->current_page - 1 < 0) + view->start_page = view->current_page; + else + view->start_page = view->current_page - 1; view->end_page = view->current_page; } } else { view->start_page = view->current_page; view->end_page = view->current_page; } + + } + + current_page = ev_page_cache_get_current_page (view->page_cache); + + if (current_page < view->start_page || current_page > view->end_page) { + view->current_page = view->start_page; + ev_page_cache_set_current_page (view->page_cache, view->start_page); } ev_pixbuf_cache_set_page_range (view->pixbuf_cache, @@ -575,7 +584,7 @@ ev_view_scroll (EvView *view, /* At the top of a page, assign the upper bound limit of previous page */ } else if (value == (adjustment->lower)) { value = adjustment->upper - adjustment->page_size; - ev_page_cache_set_current_page (view->page_cache, view->current_page - 1); + ev_view_previous_page (view); /* Jump to the top */ } else { value = MAX (value - increment, adjustment->lower); @@ -588,7 +597,7 @@ ev_view_scroll (EvView *view, /* At the bottom of a page, assign the lower bound limit of next page */ } else if (value == (adjustment->upper - adjustment->page_size)) { value = 0; - ev_page_cache_set_current_page (view->page_cache, view->current_page + 1); + ev_view_next_page (view); /* Jump to the bottom */ } else { value = MIN (value + increment, adjustment->upper - adjustment->page_size); @@ -714,7 +723,7 @@ get_page_y_offset (EvView *view, int page, double zoom, int *y_offset) if (view->dual_page) { ev_page_cache_get_height_to_page (view->page_cache, page, view->rotation, zoom, NULL, &offset); - offset += (page / 2 + 1) * view->spacing + (page / 2) * (border.top + border.bottom); + offset += ((page + DUAL_EVEN_LEFT) / 2 + 1) * view->spacing + ((page + DUAL_EVEN_LEFT) / 2 ) * (border.top + border.bottom); } else { ev_page_cache_get_height_to_page (view->page_cache, page, view->rotation, zoom, &offset, NULL); @@ -757,9 +766,9 @@ get_page_extents (EvView *view, max_width = max_width + border->left + border->right; /* Get the location of the bounding box */ if (view->dual_page) { - x = view->spacing + (page % 2) * (max_width + view->spacing); + x = view->spacing + ((page % 2 == DUAL_EVEN_LEFT) ? 0 : 1) * (max_width + view->spacing); x = x + MAX (0, widget->allocation.width - (max_width * 2 + view->spacing * 3)) / 2; - if (page % 2 == 0) + if (page % 2 == DUAL_EVEN_LEFT) x = x + (max_width - width - border->left - border->right); } else { x = view->spacing; @@ -779,10 +788,11 @@ get_page_extents (EvView *view, GtkBorder overall_border; gint other_page; - other_page = page ^ 1; + other_page = (page % 2 == DUAL_EVEN_LEFT) ? page + 1: page - 1; /* First, we get the bounding box of the two pages */ - if (other_page < ev_page_cache_get_n_pages (view->page_cache)) { + if (other_page < ev_page_cache_get_n_pages (view->page_cache) + && (0 <= other_page)) { ev_page_cache_get_size (view->page_cache, other_page, view->rotation, @@ -800,7 +810,7 @@ get_page_extents (EvView *view, y = view->spacing; /* Adjust for being the left or right page */ - if (page % 2 == 0) + if (page % 2 == DUAL_EVEN_LEFT) x = x + max_width - width; else x = x + (max_width + overall_border.left + overall_border.right) + view->spacing; @@ -3935,6 +3945,9 @@ ev_view_next_page (EvView *view) if (page < ev_page_cache_get_n_pages (view->page_cache)) { ev_page_cache_set_current_page (view->page_cache, page); return TRUE; + } else if (ev_view_get_dual_page (view) && page == ev_page_cache_get_n_pages (view->page_cache)) { + ev_page_cache_set_current_page (view->page_cache, page - 1); + return TRUE; } else { return FALSE; } @@ -3953,7 +3966,10 @@ ev_view_previous_page (EvView *view) if (page >= 0) { ev_page_cache_set_current_page (view->page_cache, page); return TRUE; - } else { + } else if (ev_view_get_dual_page (view) && page == -1) { + ev_page_cache_set_current_page (view->page_cache, 0); + return TRUE; + } else { return FALSE; } }