diff options
author | Jonathan Blandford <jrb@redhat.com> | 2005-03-31 15:34:35 (GMT) |
---|---|---|
committer | Jonathan Blandford <jrb@src.gnome.org> | 2005-03-31 15:34:35 (GMT) |
commit | e8096c18ba580156072e8c84103bee6f6d3f0bfc (patch) | |
tree | 4da3a4264a48a6830e7b12ec734ee4dc34de2b65 /shell/ev-view.c | |
parent | 52ba586fff36cceccb753342a38deff970b18107 (diff) |
Remove pixbuf backend for now
Thu Mar 31 01:21:58 2005 Jonathan Blandford <jrb@redhat.com>
* Makefile.am: Remove pixbuf backend for now
* configure.ac: Require poppler-glib instead of just poppler.
* backend/ev-document-thumbnails.h: Add a comment
* backend/ev-document.h:
* backend/ev-document.c: (ev_document_class_init),
(ev_document_load), (ev_document_get_link),
(ev_document_get_links): Remove 3 methods and add get_links.
Also, made 0 based.
* backend/ev-jobs.c: (ev_job_render_new), (ev_job_render_run):
* backend/ev-jobs.h: now EvJobRender can grab the links for a document.
* backend/ev-link.c: (ev_link_set_title),
(ev_link_mapping_free_foreach), (ev_link_mapping_free),
(ev_link_mapping_find):
* backend/ev-link.h: Allow NULL titles. Also, introduce a mapping link.
* backend/ev-page-cache.c: (ev_page_cache_init),
(_ev_page_cache_new), (ev_page_cache_set_current_page),
(ev_page_cache_get_size), (ev_page_cache_next_page),
(ev_page_cache_prev_page): Fix to be 0 based.
* pdf/Makefile.am:
* pdf/ev-poppler.h:
* pdf/ev-poppler.cc: New backend.
* ps/ps-document.c: (ps_document_init), (ps_document_set_page),
(ps_document_get_page), (ps_document_document_iface_init):
* shell/ev-pixbuf-cache.h:
* shell/ev-pixbuf-cache.c: (ev_pixbuf_cache_init),
(dispose_cache_job_info), (job_finished_cb), (move_one_job),
(ev_pixbuf_cache_update_range), (copy_job_to_job_info),
(add_job_if_needed), (ev_pixbuf_cache_set_page_range),
(ev_pixbuf_cache_get_pixbuf), (ev_pixbuf_cache_get_link_mapping):
Fix up code to grab a page cache per each doc. Also, fix to be 0
based.
* shell/ev-sidebar-thumbnails.c:
(ev_sidebar_tree_selection_changed), (page_changed_cb),
(ev_sidebar_thumbnails_set_document): Fix to be 0 based.
* shell/ev-view.c: (status_message_from_link),
(find_page_at_location), (get_link_at_location),
(ev_view_motion_notify_event), (ev_view_button_release_event),
(ev_view_init): Use the new link code. Fix to be 0 based.
* shell/ev-window.c: (update_action_sensitivity),
(document_supports_sidebar): 0 based.
Diffstat (limited to 'shell/ev-view.c')
-rw-r--r-- | shell/ev-view.c | 75 |
1 files changed, 58 insertions, 17 deletions
diff --git a/shell/ev-view.c b/shell/ev-view.c index 9921ed4..97e0c54 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -704,14 +704,15 @@ static char * status_message_from_link (EvLink *link) { EvLinkType type; - char *msg; + char *msg = NULL; int page; type = ev_link_get_link_type (link); switch (type) { case EV_LINK_TYPE_TITLE: - msg = g_strdup (ev_link_get_title (link)); + if (ev_link_get_title (link)) + msg = g_strdup (ev_link_get_title (link)); break; case EV_LINK_TYPE_PAGE: page = ev_link_get_page (link); @@ -721,7 +722,7 @@ status_message_from_link (EvLink *link) msg = g_strdup (ev_link_get_uri (link)); break; default: - msg = NULL; + break; } return msg; @@ -799,6 +800,56 @@ ev_view_set_cursor (EvView *view, EvViewCursor new_cursor) } } + +static void +find_page_at_location (EvView *view, + gdouble x, + gdouble y, + gint *page, + gint *x_offset, + gint *y_offset) +{ + GtkBorder border; + gint width, height; + + ev_page_cache_get_size (view->page_cache, + view->current_page, + view->scale, + &width, &height); + ev_document_misc_get_page_border_size (width, height, &border); + + x -= (border.left + view->spacing); + y -= (border.top + view->spacing); + + if ((x < 0) || (y < 0) || + (x >= width) || (y >= height)) { + *page = -1; + return; + } + *page = view->current_page; + *x_offset = (gint) x; + *y_offset = (gint) y; +} + +static EvLink * +get_link_at_location (EvView *view, + gdouble x, + gdouble y) +{ + gint page; + gint x_offset, y_offset; + GList *link_mapping; + + find_page_at_location (view, x, y, &page, &x_offset, &y_offset); + if (page == -1) + return NULL; + + link_mapping = ev_pixbuf_cache_get_link_mapping (view->pixbuf_cache, page); + + return ev_link_mapping_find (link_mapping, x_offset /view->scale, y_offset /view->scale); +} + + static gboolean ev_view_motion_notify_event (GtkWidget *widget, GdkEventMotion *event) @@ -816,13 +867,10 @@ ev_view_motion_notify_event (GtkWidget *widget, view_rect_to_doc_rect (view, &selection, &view->selection); gtk_widget_queue_draw (widget); - } else if (FALSE && view->document) { + } else if (view->document) { EvLink *link; - g_mutex_lock (EV_DOC_MUTEX); - link = ev_document_get_link (view->document, event->x, event->y); - g_mutex_unlock (EV_DOC_MUTEX); - + link = get_link_at_location (view, event->x, event->y); if (link) { char *msg; @@ -830,8 +878,6 @@ ev_view_motion_notify_event (GtkWidget *widget, ev_view_set_status (view, msg); ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK); g_free (msg); - - g_object_unref (link); } else { ev_view_set_status (view, NULL); if (view->cursor == EV_VIEW_CURSOR_LINK) { @@ -856,14 +902,9 @@ ev_view_button_release_event (GtkWidget *widget, } else if (view->document) { EvLink *link; - g_mutex_lock (EV_DOC_MUTEX); - link = ev_document_get_link (view->document, - event->x, - event->y); - g_mutex_unlock (EV_DOC_MUTEX); + link = get_link_at_location (view, event->x, event->y); if (link) { ev_view_go_to_link (view, link); - g_object_unref (link); } } @@ -1089,7 +1130,7 @@ ev_view_init (EvView *view) view->spacing = 10; view->scale = 1.0; - view->current_page = 1; + view->current_page = 0; view->pressed_button = -1; view->cursor = EV_VIEW_CURSOR_NORMAL; } |