]> www.fi.muni.cz Git - evince.git/commitdiff
Implement FIT and FITH links
authorMarco Pesenti Gritti <mpg@redhat.com>
Mon, 19 Sep 2005 14:34:15 +0000 (14:34 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Mon, 19 Sep 2005 14:34:15 +0000 (14:34 +0000)
2005-09-19  Marco Pesenti Gritti  <mpg@redhat.com>

        * backend/ev-link.c: (ev_link_type_get_type),
        (ev_link_new_page_xyz), (ev_link_new_page_fit),
        (ev_link_new_page_fith):
        * backend/ev-link.h:
        * pdf/ev-poppler.cc:
        * shell/ev-view.c: (goto_fith_link), (ev_view_goto_link):

        Implement FIT and FITH links

ChangeLog
backend/ev-link.c
backend/ev-link.h
pdf/ev-poppler.cc
shell/ev-view.c

index 1316b8d3c234f7fcbfe0115e3c668c79ece1b044..4a1f7eaa5079961121177ba6f91b8124588bc616 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2005-09-19  Marco Pesenti Gritti  <mpg@redhat.com>
+
+       * backend/ev-link.c: (ev_link_type_get_type),
+       (ev_link_new_page_xyz), (ev_link_new_page_fit),
+       (ev_link_new_page_fith):
+       * backend/ev-link.h:
+       * pdf/ev-poppler.cc:
+       * shell/ev-view.c: (goto_fith_link), (ev_view_goto_link):
+
+       Implement FIT and FITH links
+
 2005-09-19  Marco Pesenti Gritti  <mpg@redhat.com>
 
        * pdf/ev-poppler.cc:
index e1eb91ee5c4933761eb5a5d45b7deb3a2eff0d16..071d6af5edbcceaf83afdbd603dc586ce75d6315 100644 (file)
@@ -70,6 +70,8 @@ ev_link_type_get_type (void)
                        { EV_LINK_TYPE_TITLE, "EV_LINK_TYPE_TITLE", "title" },
                        { EV_LINK_TYPE_PAGE, "EV_LINK_TYPE_PAGE", "page" },
                        { EV_LINK_TYPE_PAGE_XYZ, "EV_LINK_TYPE_PAGE_XYZ", "page-xyz" },
+                       { EV_LINK_TYPE_PAGE_FIT, "EV_LINK_TYPE_PAGE_FIT", "page-fit" },
+                       { EV_LINK_TYPE_PAGE_FITH, "EV_LINK_TYPE_PAGE_FITH", "page-fith" },
                        { EV_LINK_TYPE_EXTERNAL_URI, "EV_LINK_TYPE_EXTERNAL_URI", "external" },
                        { 0, NULL, NULL }
                 };
@@ -356,6 +358,30 @@ ev_link_new_page_xyz (const char *title,
                                      NULL));
 }
 
+EvLink *
+ev_link_new_page_fit (const char *title,
+                     int         page)
+{
+       return EV_LINK (g_object_new (EV_TYPE_LINK,
+                                     "title", title,
+                                     "page", page,
+                                     "type", EV_LINK_TYPE_PAGE_FIT,
+                                     NULL));
+}
+
+EvLink *
+ev_link_new_page_fith (const char *title,
+                      int         page,
+                      double      top)
+{
+       return EV_LINK (g_object_new (EV_TYPE_LINK,
+                                     "title", title,
+                                     "page", page,
+                                     "type", EV_LINK_TYPE_PAGE_FITH,
+                                     "top", top,
+                                     NULL));
+}
+
 EvLink *
 ev_link_new_external (const char *title, const char *uri)
 {
index 8ee8429494eb8f435bb9272cad45b40cdabeb3e3..508e89deb39d79fc49d956ac5e21671f76b89fd8 100644 (file)
@@ -44,6 +44,8 @@ typedef enum
        EV_LINK_TYPE_TITLE,
        EV_LINK_TYPE_PAGE,
        EV_LINK_TYPE_PAGE_XYZ,
+       EV_LINK_TYPE_PAGE_FIT,
+       EV_LINK_TYPE_PAGE_FITH,
        EV_LINK_TYPE_EXTERNAL_URI,
        /* We'll probably fill this in more as we support the other types of
         * links */
@@ -60,6 +62,11 @@ EvLink              *ev_link_new_page_xyz    (const char     *title,
                                         double          top,
                                         double          left,
                                         double          zoom);
+EvLink        *ev_link_new_page_fith   (const char     *title,
+                                        int             page,
+                                        double          top);
+EvLink        *ev_link_new_page_fit    (const char     *title,
+                                        int             page);
 EvLink        *ev_link_new_external    (const char     *title,
                                         const char     *uri);
 
index 03a27a69648dee17070c00d90ae601d12b76cf40..5633840e9297db5841cbb1d3805a34c00feef4a4 100644 (file)
@@ -720,10 +720,13 @@ ev_link_from_dest (PopplerAction *action)
                                             action->goto_dest.dest->zoom);
                break;
        case POPPLER_DEST_FIT:
-               unimplemented_dest = "POPPLER_DEST_FIT";
+               link = ev_link_new_page_fit (action->any.title,
+                                            action->goto_dest.dest->page_num - 1);
                break;
        case POPPLER_DEST_FITH:
-               unimplemented_dest = "POPPLER_DEST_FITH";
+               link = ev_link_new_page_fith (action->any.title,
+                                             action->goto_dest.dest->page_num - 1,
+                                             action->goto_dest.dest->top);
                break;
        case POPPLER_DEST_FITV:
                unimplemented_dest = "POPPLER_DEST_FITV";
index 78266944ac9ad6d47292a989e6d3ffa7203ea704..fa2df5b08900ae3059f429764994d5e9f212a00f 100644 (file)
@@ -1096,6 +1096,25 @@ get_link_at_location (EvView  *view,
                return NULL;
 }
 
+static void
+goto_fith_link (EvView *view, EvLink *link)
+{
+       GdkPoint view_point;
+       EvPoint doc_point;
+       int height, page;
+
+       page = ev_link_get_page (link);
+       ev_page_cache_get_size (view->page_cache, page, 0, 1.0, NULL, &height);
+
+       ev_view_set_sizing_mode (view, EV_SIZING_BEST_FIT);
+
+       doc_point.x = 0;
+       doc_point.y = height - ev_link_get_top (link);
+       doc_point_to_view_point (view, page, &doc_point, &view_point);
+
+       gtk_adjustment_set_value (view->vadjustment, view_point.y);
+}
+
 static void
 goto_xyz_link (EvView *view, EvLink *link)
 {
@@ -1137,6 +1156,14 @@ ev_view_goto_link (EvView *view, EvLink *link)
                        page = ev_link_get_page (link);
                        ev_page_cache_set_current_page (view->page_cache, page);
                        break;
+               case EV_LINK_TYPE_PAGE_FIT:
+                       page = ev_link_get_page (link);
+                       ev_page_cache_set_current_page (view->page_cache, page);
+                       ev_view_set_sizing_mode (view, EV_SIZING_BEST_FIT);
+                       break;
+               case EV_LINK_TYPE_PAGE_FITH:
+                       goto_fith_link (view, link);
+                       break;
                case EV_LINK_TYPE_PAGE_XYZ:
                        goto_xyz_link (view, link);
                        break;