From 9f8ec2d921de1c31da212c8486ab2bda85d51bf9 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 07 Sep 2005 12:36:54 +0000 Subject: Implement xyz links, still not functional. Links are a total mess, will 2005-09-07 Marco Pesenti Gritti * backend/ev-document.h: * backend/ev-link.c: (ev_link_type_get_type), (ev_link_get_top), (ev_link_get_left), (ev_link_get_zoom), (ev_link_get_property), (ev_link_set_property), (ev_window_dispose), (ev_link_class_init), (ev_link_new_page), (ev_link_new_page_xyz): * backend/ev-link.h: * pdf/ev-poppler.cc: * shell/ev-view.c: (doc_point_to_view_point), (scroll_to_xyz_link), (go_to_link), (tip_from_link): Implement xyz links, still not functional. Links are a total mess, will need to refactor and bugfix a lot :( --- (limited to 'pdf/ev-poppler.cc') diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc index bbcb978..769c78a 100644 --- a/pdf/ev-poppler.cc +++ b/pdf/ev-poppler.cc @@ -703,18 +703,94 @@ pdf_document_links_has_document_links (EvDocumentLinks *document_links) } static EvLink * -ev_link_from_action (PopplerAction *action) +ev_link_from_dest (PopplerAction *action) { EvLink *link; + const char *unimplemented_dest = NULL; + + switch (action->goto_dest.dest->type) { + case POPPLER_DEST_UNKNOWN: + unimplemented_dest = "POPPLER_DEST_UNKNOWN"; + break; + case POPPLER_DEST_XYZ: + link = ev_link_new_page_xyz (action->any.title, + action->goto_dest.dest->page_num - 1, + action->goto_dest.dest->left, + action->goto_dest.dest->top, + action->goto_dest.dest->zoom); + break; + case POPPLER_DEST_FIT: + unimplemented_dest = "POPPLER_DEST_FIT"; + break; + case POPPLER_DEST_FITH: + unimplemented_dest = "POPPLER_DEST_FITH"; + break; + case POPPLER_DEST_FITV: + unimplemented_dest = "POPPLER_DEST_FITV"; + break; + case POPPLER_DEST_FITR: + unimplemented_dest = "POPPLER_DEST_FITR"; + break; + case POPPLER_DEST_FITB: + unimplemented_dest = "POPPLER_DEST_FITB"; + break; + case POPPLER_DEST_FITBH: + unimplemented_dest = "POPPLER_DEST_FITBH"; + break; + case POPPLER_DEST_FITBV: + unimplemented_dest = "POPPLER_DEST_FITBV"; + break; + } + + if (unimplemented_dest) { + g_warning ("Unimplemented destination: %s, please post a bug report with a testcase.", + unimplemented_dest); + } + + link = ev_link_new_page (action->any.title, action->goto_dest.dest->page_num - 1); + + return link; +} + +static EvLink * +ev_link_from_action (PopplerAction *action) +{ + EvLink *link = NULL; const char *title; + const char *unimplemented_action = NULL; title = action->any.title; - - if (action->type == POPPLER_ACTION_GOTO_DEST) { - link = ev_link_new_page (title, action->goto_dest.dest->page_num - 1); - } else if (action->type == POPPLER_ACTION_URI) { + + switch (action->type) { + case POPPLER_ACTION_UNKNOWN: + g_warning ("Unknown action"); + break; + case POPPLER_ACTION_GOTO_DEST: + link = ev_link_from_dest (action); + break; + case POPPLER_ACTION_GOTO_REMOTE: + unimplemented_action = "POPPLER_ACTION_GOTO_REMOTE"; + break; + case POPPLER_ACTION_LAUNCH: + unimplemented_action = "POPPLER_ACTION_LAUNCH"; + break; + case POPPLER_ACTION_URI: link = ev_link_new_external (title, action->uri.uri); - } else { + break; + case POPPLER_ACTION_NAMED: + unimplemented_action = "POPPLER_ACTION_NAMED"; + break; + case POPPLER_ACTION_MOVIE: + unimplemented_action = "POPPLER_ACTION_MOVIE"; + break; + } + + if (unimplemented_action) { + g_warning ("Unimplemented action: %s, please post a bug report with a testcase.", + unimplemented_action); + } + + if (link == NULL) { link = ev_link_new_title (title); } -- cgit v0.9.1