From eb3d8c8e3df570e32e2591eeb650de55dba2f613 Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Sat, 07 Jan 2006 13:18:28 +0000 Subject: Dual mode places even pages to the left. Fix for the bug #309393. * shell/ev-page-cache.c: (build_height_to_page), (ev_page_cache_get_height_to_page): * shell/ev-page-cache.h: * shell/ev-view.c: (view_update_range_and_current_page), (get_page_y_offset), (get_page_extents), (ev_view_next_page), (ev_view_previous_page): Dual mode places even pages to the left. Fix for the bug #309393. * shell/ev-view.h: * shell/ev-window.c: (update_action_sensitivity), (setup_view_from_metadata), (view_menu_popup_cb): Don't restore presentation in empty windows, more intelligent next page behaviour in dual mode. * shell/ev-pixbuf-cache.c: (check_job_size_and_unref), (ev_pixbuf_cache_clear_job_sizes): Cleanup job callback on removal. Fix for the bug #325886. --- (limited to 'shell/ev-page-cache.c') diff --git a/shell/ev-page-cache.c b/shell/ev-page-cache.c index a79ba05..389bafc 100644 --- a/shell/ev-page-cache.c +++ b/shell/ev-page-cache.c @@ -117,54 +117,73 @@ build_height_to_page (EvPageCache *page_cache) g_free (page_cache->height_to_page); g_free (page_cache->dual_height_to_page); - page_cache->height_to_page = g_new0(double, page_cache->n_pages); - page_cache->dual_height_to_page = g_new0(double, page_cache->n_pages / 2 + 1); + page_cache->height_to_page = g_new0(double, page_cache->n_pages + 1); + page_cache->dual_height_to_page = g_new0(double, page_cache->n_pages + 2); saved_height = 0; - for (i = 0; i < page_cache->n_pages; i++) { + for (i = 0; i <= page_cache->n_pages; i++) { if (page_cache->uniform) { if (!swap) { uniform_height = page_cache->uniform_height; } else { uniform_height = page_cache->uniform_width; } - page_cache->height_to_page [i] = (i + 1) * uniform_height; + page_cache->height_to_page [i] = i * uniform_height; } else { if (!swap) { page_height = page_cache->size_cache [i].height; } else { page_height = page_cache->size_cache [i].width; } - page_cache->height_to_page [i] = saved_height + page_height; - saved_height = page_cache->height_to_page [i]; + page_cache->height_to_page [i] = saved_height; + saved_height += page_height; } } - - saved_height = 0; - for (i = 0; i < page_cache->n_pages; i += 2) { + + if (DUAL_EVEN_LEFT && !page_cache->uniform) { + if (!swap) { + saved_height = page_cache->size_cache [0].height; + } else { + saved_height = page_cache->size_cache [0].width; + } + } else { + saved_height = 0; + } + for (i = DUAL_EVEN_LEFT; i < page_cache->n_pages + 2; i += 2) { if (page_cache->uniform) { if (!swap) { uniform_height = page_cache->uniform_height; } else { uniform_height = page_cache->uniform_width; } - page_cache->dual_height_to_page [i / 2] = (i / 2 + 1) * uniform_height; + page_cache->dual_height_to_page [i] = ((i + DUAL_EVEN_LEFT) / 2) * uniform_height; + if (i + 1 < page_cache->n_pages + 2) + page_cache->dual_height_to_page [i + 1] = ((i + DUAL_EVEN_LEFT) / 2) * uniform_height; } else { - if (!swap) { - page_height = page_cache->size_cache [i].height; - next_page_height = page_cache->size_cache [i + 1].height; + if (i + 1 < page_cache->n_pages) { + if (!swap) { + next_page_height = page_cache->size_cache [i + 1].height; + } else { + next_page_height = page_cache->size_cache [i + 1].width; + } } else { - page_height = page_cache->size_cache [i].width; - next_page_height = page_cache->size_cache [i + 1].width; + next_page_height = 0; } - if (i == page_cache->n_pages - 1) { - page_cache->dual_height_to_page [i / 2] = - saved_height + page_height; + if (i < page_cache->n_pages) { + if (!swap) { + page_height = page_cache->size_cache [i].height; + } else { + page_height = page_cache->size_cache [i].width; + } + } else { + page_height = 0; } - else { - page_cache->dual_height_to_page [i / 2] = saved_height + - MAX(page_height, next_page_height); - saved_height = page_cache->dual_height_to_page [i / 2]; + if (i + 1 < page_cache->n_pages + 2) { + page_cache->dual_height_to_page [i] = saved_height; + page_cache->dual_height_to_page [i + 1] = saved_height; + saved_height += MAX(page_height, next_page_height); + } else { + page_cache->dual_height_to_page [i] = saved_height; } } } @@ -428,27 +447,18 @@ ev_page_cache_get_height_to_page (EvPageCache *page_cache, gint *height, gint *dual_height) { - double result = 0.0; - double dual_result = 0.0; - g_return_if_fail (EV_IS_PAGE_CACHE (page_cache)); if (page_cache->rotation != rotation) { page_cache->rotation = rotation; build_height_to_page (page_cache); } - - if (page > 0) - result = page_cache->height_to_page [page - 1]; if (height) - *height = result * scale; + *height = page_cache->height_to_page [page] * scale; - if (page > 1) - dual_result = page_cache->dual_height_to_page [page / 2 - 1]; - if (dual_height) - *dual_height = dual_result * scale; + *dual_height = page_cache->dual_height_to_page [page] * scale; } gint -- cgit v0.9.1