diff options
-rw-r--r-- | android/jni/mupdf.c | 16 | ||||
-rw-r--r-- | android/src/com/artifex/mupdf/LinkInfoRemote.java | 18 | ||||
-rw-r--r-- | android/src/com/artifex/mupdf/LinkInfoVisitor.java | 1 | ||||
-rw-r--r-- | android/src/com/artifex/mupdf/MuPDFActivity.java | 7 |
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 { |