Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/backend
diff options
context:
space:
mode:
authorJonathan 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)
commit4e8b4b4da36dd24ed5d3a19918dfcfdcc9840fac (patch)
tree104cb9178d984d6e5b493460499f35bcd5b916f6 /backend
parent34a00793dc5c883672765f5c18ab001b22effa5d (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.c54
-rw-r--r--backend/ev-page-cache.h52
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