Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--backend/ev-link.c26
-rw-r--r--backend/ev-link.h7
-rw-r--r--pdf/ev-poppler.cc7
-rw-r--r--shell/ev-view.c27
5 files changed, 76 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 1316b8d..4a1f7ea 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
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:
Return 0 results when search is not in progress.
diff --git a/backend/ev-link.c b/backend/ev-link.c
index e1eb91e..071d6af 100644
--- a/backend/ev-link.c
+++ b/backend/ev-link.c
@@ -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 }
};
@@ -357,6 +359,30 @@ ev_link_new_page_xyz (const char *title,
}
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)
{
return EV_LINK (g_object_new (EV_TYPE_LINK,
diff --git a/backend/ev-link.h b/backend/ev-link.h
index 8ee8429..508e89d 100644
--- a/backend/ev-link.h
+++ b/backend/ev-link.h
@@ -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);
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc
index 03a27a6..5633840 100644
--- a/pdf/ev-poppler.cc
+++ b/pdf/ev-poppler.cc
@@ -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";
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 7826694..fa2df5b 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -1097,6 +1097,25 @@ get_link_at_location (EvView *view,
}
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)
{
GdkPoint view_point;
@@ -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;