summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/jni/mupdf.c16
-rw-r--r--android/src/com/artifex/mupdf/LinkInfoRemote.java18
-rw-r--r--android/src/com/artifex/mupdf/LinkInfoVisitor.java1
-rw-r--r--android/src/com/artifex/mupdf/MuPDFActivity.java7
4 files changed, 41 insertions, 1 deletions
diff --git a/android/jni/mupdf.c b/android/jni/mupdf.c
index 7e18b3e7..69257051 100644
--- a/android/jni/mupdf.c
+++ b/android/jni/mupdf.c
@@ -1039,8 +1039,10 @@ Java_com_artifex_mupdf_MuPDFCore_getPageLinksInternal(JNIEnv * env, jobject thiz
jclass linkInfoClass;
jclass linkInfoInternalClass;
jclass linkInfoExternalClass;
+ jclass linkInfoRemoteClass;
jmethodID ctorInternal;
jmethodID ctorExternal;
+ jmethodID ctorRemote;
jobjectArray arr;
jobject linkInfo;
fz_matrix ctm;
@@ -1057,10 +1059,14 @@ Java_com_artifex_mupdf_MuPDFCore_getPageLinksInternal(JNIEnv * env, jobject thiz
if (linkInfoInternalClass == NULL) return NULL;
linkInfoExternalClass = (*env)->FindClass(env, "com/artifex/mupdf/LinkInfoExternal");
if (linkInfoExternalClass == NULL) return NULL;
+ linkInfoRemoteClass = (*env)->FindClass(env, "com/artifex/mupdf/LinkInfoRemote");
+ if (linkInfoRemoteClass == NULL) return NULL;
ctorInternal = (*env)->GetMethodID(env, linkInfoInternalClass, "<init>", "(FFFFI)V");
if (ctorInternal == NULL) return NULL;
ctorExternal = (*env)->GetMethodID(env, linkInfoExternalClass, "<init>", "(FFFFLjava/lang/String;)V");
if (ctorExternal == NULL) return NULL;
+ ctorRemote = (*env)->GetMethodID(env, linkInfoRemoteClass, "<init>", "(FFFFLjava/lang/String;IZ)V");
+ if (ctorRemote == NULL) return NULL;
Java_com_artifex_mupdf_MuPDFCore_gotoPageInternal(env, thiz, pageNumber);
pc = &glo->pages[glo->current];
@@ -1077,6 +1083,7 @@ Java_com_artifex_mupdf_MuPDFCore_getPageLinksInternal(JNIEnv * env, jobject thiz
switch (link->dest.kind)
{
case FZ_LINK_GOTO:
+ case FZ_LINK_GOTOR:
case FZ_LINK_URI:
count++ ;
}
@@ -1100,6 +1107,15 @@ Java_com_artifex_mupdf_MuPDFCore_getPageLinksInternal(JNIEnv * env, jobject thiz
break;
}
+ case FZ_LINK_GOTOR:
+ {
+ jstring juri = (*env)->NewStringUTF(env, link->dest.ld.gotor.file_spec);
+ linkInfo = (*env)->NewObject(env, linkInfoRemoteClass, ctorRemote,
+ (float)rect.x0, (float)rect.y0, (float)rect.x1, (float)rect.y1,
+ juri, link->dest.ld.gotor.page, link->dest.ld.gotor.new_window ? JNI_TRUE : JNI_FALSE);
+ break;
+ }
+
case FZ_LINK_URI:
{
jstring juri = (*env)->NewStringUTF(env, link->dest.ld.uri.uri);
diff --git a/android/src/com/artifex/mupdf/LinkInfoRemote.java b/android/src/com/artifex/mupdf/LinkInfoRemote.java
new file mode 100644
index 00000000..7d5c302f
--- /dev/null
+++ b/android/src/com/artifex/mupdf/LinkInfoRemote.java
@@ -0,0 +1,18 @@
+package com.artifex.mupdf;
+
+public class LinkInfoRemote extends LinkInfo {
+ final public String fileSpec;
+ final public int pageNumber;
+ final public boolean newWindow;
+
+ public LinkInfoRemote(float l, float t, float r, float b, String f, int p, boolean n) {
+ super(l, t, r, b);
+ fileSpec = f;
+ pageNumber = p;
+ newWindow = n;
+ }
+
+ public void acceptVisitor(LinkInfoVisitor visitor) {
+ visitor.visitRemote(this);
+ }
+}
diff --git a/android/src/com/artifex/mupdf/LinkInfoVisitor.java b/android/src/com/artifex/mupdf/LinkInfoVisitor.java
index 348334a7..13dd863d 100644
--- a/android/src/com/artifex/mupdf/LinkInfoVisitor.java
+++ b/android/src/com/artifex/mupdf/LinkInfoVisitor.java
@@ -3,4 +3,5 @@ package com.artifex.mupdf;
abstract public class LinkInfoVisitor {
public abstract void visitInternal(LinkInfoInternal li);
public abstract void visitExternal(LinkInfoExternal li);
+ public abstract void visitRemote(LinkInfoRemote li);
}
diff --git a/android/src/com/artifex/mupdf/MuPDFActivity.java b/android/src/com/artifex/mupdf/MuPDFActivity.java
index 4a548637..0c35cadf 100644
--- a/android/src/com/artifex/mupdf/MuPDFActivity.java
+++ b/android/src/com/artifex/mupdf/MuPDFActivity.java
@@ -360,11 +360,16 @@ public class MuPDFActivity extends Activity
link.acceptVisitor(new LinkInfoVisitor() {
@Override
public void visitInternal(LinkInfoInternal li) {
+ // Clicked on an internal (GoTo) link
mDocView.setDisplayedViewIndex(li.pageNumber);
}
@Override
public void visitExternal(LinkInfoExternal li) {
- // Clicked on an external link: li.url
+ // Clicked on an external (URI) link: li.url
+ }
+ @Override
+ public void visitRemote(LinkInfoRemote li) {
+ // Clicked on a remote (GoToR) link
}
});
} else {