diff options
author | Jonathan Blandford <jrb@redhat.com> | 2005-04-23 17:13:40 (GMT) |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2005-04-23 17:13:40 (GMT) |
commit | 4e8b4b4da36dd24ed5d3a19918dfcfdcc9840fac (patch) | |
tree | 104cb9178d984d6e5b493460499f35bcd5b916f6 /backend | |
parent | 34a00793dc5c883672765f5c18ab001b22effa5d (diff) |
Add Continuous and Dual page modes.
Sat Apr 23 13:13:04 2005 Jonathan Blandford <jrb@redhat.com>
* TODO:
* backend/ev-page-cache.c: (_ev_page_cache_new),
(ev_page_cache_get_max_width_size),
(ev_page_cache_get_max_height_size):
* backend/ev-page-cache.h:
* data/evince-ui.xml:
* shell/ev-pixbuf-cache.c: (ev_pixbuf_cache_init):
* shell/ev-view.c: (view_update_adjustments),
(view_update_range_and_current_page), (get_bounding_box_size),
(ev_view_size_request_continuous_and_dual_page),
(ev_view_size_request_continuous),
(ev_view_size_request_dual_page),
(ev_view_size_request_single_page), (ev_view_size_request),
(ev_view_size_allocate), (get_page_extents), (draw_one_page),
(ev_view_bin_expose), (ev_view_expose_event),
(ev_view_set_property), (ev_view_get_property),
(ev_view_class_init), (ev_view_init), (ev_view_new),
(page_changed_cb), (ev_view_zoom), (ev_view_set_continuous),
(ev_view_set_dual_page), (ev_view_set_full_screen),
(ev_view_set_presentation), (ev_view_set_sizing_mode),
(ev_view_can_zoom_in), (ev_view_can_zoom_out), (ev_view_zoom_in),
(ev_view_zoom_out), (zoom_for_size_fit_width),
(zoom_for_size_best_fit),
(ev_view_zoom_for_size_continuous_and_dual_page),
(ev_view_zoom_for_size_continuous),
(ev_view_zoom_for_size_dual_page),
(ev_view_zoom_for_size_single_page), (ev_view_set_zoom_for_size),
(ev_view_show_cursor), (ev_sizing_mode_get_type):
* shell/ev-view.h:
* shell/ev-window.c: (update_action_sensitivity),
(ev_window_cmd_continuous), (ev_window_cmd_dual),
(ev_window_cmd_view_best_fit), (ev_window_cmd_view_page_width),
(update_sizing_buttons), (ev_window_cmd_view_zoom_in),
(ev_window_cmd_view_zoom_out), (update_view_size),
(ev_window_set_sizing_mode), (ev_window_init):
Add Continuous and Dual page modes.
Diffstat (limited to 'backend')
-rw-r--r-- | backend/ev-page-cache.c | 54 | ||||
-rw-r--r-- | backend/ev-page-cache.h | 52 |
2 files changed, 85 insertions, 21 deletions
diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c index a6d7822..6e559cb 100644 --- a/backend/ev-page-cache.c +++ b/backend/ev-page-cache.c @@ -24,6 +24,11 @@ struct _EvPageCache double uniform_width; double uniform_height; + double max_width_page_width; + double max_width_page_height; + double max_height_page_width; + double max_height_page_height; + EvPageCacheInfo *size_cache; }; @@ -104,6 +109,10 @@ _ev_page_cache_new (EvDocument *document) page_cache->uniform = TRUE; page_cache->n_pages = ev_document_get_n_pages (document); page_cache->page_labels = g_new0 (char *, page_cache->n_pages); + page_cache->max_width_page_width = 0; + page_cache->max_width_page_height = 0; + page_cache->max_height_page_width = 0; + page_cache->max_height_page_height = 0; doc_info = ev_document_get_info (document); if (doc_info->fields_mask & EV_DOCUMENT_INFO_TITLE) { @@ -120,6 +129,16 @@ _ev_page_cache_new (EvDocument *document) ev_document_get_page_size (document, i, &page_width, &page_height); page_cache->page_labels[i] = ev_document_get_page_label (document, i); + if (page_width > page_cache->max_width_page_width) { + page_cache->max_width_page_width = page_width; + page_cache->max_width_page_height = page_height; + } + + if (page_height > page_cache->max_height_page_height) { + page_cache->max_height_page_width = page_width; + page_cache->max_height_page_height = page_height; + } + if (i == 0) { page_cache->uniform_width = page_width; page_cache->uniform_height = page_height; @@ -151,6 +170,8 @@ _ev_page_cache_new (EvDocument *document) /* make some sanity check assertions */ if (! page_cache->uniform) g_assert (page_cache->size_cache != NULL); + if (page_cache->uniform) + g_assert (page_cache->uniform_width > 0 && page_cache->uniform_height > 0); ev_document_doc_mutex_unlock (); @@ -279,6 +300,39 @@ ev_page_cache_get_size (EvPageCache *page_cache, *height = (*height) * scale; } + + +/* Note that these aren't necessarily from the same page. + */ +void +ev_page_cache_get_max_width_size (EvPageCache *page_cache, + gfloat scale, + gint *width, + gint *height) +{ + g_return_if_fail (EV_IS_PAGE_CACHE (page_cache)); + + if (width) + *width = page_cache->max_width_page_width * scale; + if (height) + *height = page_cache->max_width_page_height * scale; +} + +void +ev_page_cache_get_max_height_size (EvPageCache *page_cache, + gfloat scale, + gint *width, + gint *height) +{ + g_return_if_fail (EV_IS_PAGE_CACHE (page_cache)); + + if (width) + *width = page_cache->max_height_page_width * scale; + if (height) + *height = page_cache->max_height_page_height * scale; +} + + gchar * ev_page_cache_get_page_label (EvPageCache *page_cache, gint page) diff --git a/backend/ev-page-cache.h b/backend/ev-page-cache.h index 24f5262..96a1a5f 100644 --- a/backend/ev-page-cache.h +++ b/backend/ev-page-cache.h @@ -28,29 +28,39 @@ G_BEGIN_DECLS #define EV_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_CACHE, EvPageCache)) #define EV_IS_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PAGE_CACHE)) -GType ev_page_cache_get_type (void) G_GNUC_CONST; +GType ev_page_cache_get_type (void) G_GNUC_CONST; + /* Used by ev-document.c only */ -EvPageCache *_ev_page_cache_new (EvDocument *document); - -gint ev_page_cache_get_n_pages (EvPageCache *page_cache); -char *ev_page_cache_get_title (EvPageCache *page_cache); -void ev_page_cache_get_size (EvPageCache *page_cache, - gint page, - gfloat scale, - gint *width, - gint *height); -char *ev_page_cache_get_page_label (EvPageCache *page_cache, - gint page); +EvPageCache *_ev_page_cache_new (EvDocument *document); +gint ev_page_cache_get_n_pages (EvPageCache *page_cache); +char *ev_page_cache_get_title (EvPageCache *page_cache); +void ev_page_cache_get_size (EvPageCache *page_cache, + gint page, + gfloat scale, + gint *width, + gint *height); +void ev_page_cache_get_max_width_size (EvPageCache *page_cache, + gfloat scale, + gint *width, + gint *height); +void ev_page_cache_get_max_height_size (EvPageCache *page_cache, + gfloat scale, + gint *width, + gint *height); +char *ev_page_cache_get_page_label (EvPageCache *page_cache, + gint page); + /* Navigation */ -gint ev_page_cache_get_current_page (EvPageCache *page_cache); -void ev_page_cache_set_current_page (EvPageCache *page_cache, - int page); -gboolean ev_page_cache_set_page_label (EvPageCache *page_cache, - const char *page_label); -void ev_page_cache_set_link (EvPageCache *page_cache, - EvLink *link); -gboolean ev_page_cache_next_page (EvPageCache *page_cache); -gboolean ev_page_cache_prev_page (EvPageCache *page_cache); +gint ev_page_cache_get_current_page (EvPageCache *page_cache); +void ev_page_cache_set_current_page (EvPageCache *page_cache, + int page); +gboolean ev_page_cache_set_page_label (EvPageCache *page_cache, + const char *page_label); +void ev_page_cache_set_link (EvPageCache *page_cache, + EvLink *link); +gboolean ev_page_cache_next_page (EvPageCache *page_cache); +gboolean ev_page_cache_prev_page (EvPageCache *page_cache); + G_END_DECLS |