diff options
author | Paul Gardiner <paul@glidos.net> | 2012-03-07 16:35:30 +0000 |
---|---|---|
committer | Paul Gardiner <paul@glidos.net> | 2012-03-15 11:37:50 +0000 |
commit | e98837c7b917f0801b446792ab642e669c371395 (patch) | |
tree | 0db909df2b70649a567e7b58fbe4e966782eff06 /android/jni | |
parent | b5faea0723a43d0ae4953da6edffcb52b46ba315 (diff) | |
download | mupdf-e98837c7b917f0801b446792ab642e669c371395.tar.xz |
Android app: highlighting and inhibiting of links
Diffstat (limited to 'android/jni')
-rw-r--r-- | android/jni/mupdf.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/android/jni/mupdf.c b/android/jni/mupdf.c index 822095ec..537c90c3 100644 --- a/android/jni/mupdf.c +++ b/android/jni/mupdf.c @@ -557,6 +557,63 @@ Java_com_artifex_mupdf_MuPDFCore_destroying(JNIEnv * env, jobject thiz) doc = NULL; } +JNIEXPORT jobjectArray JNICALL +Java_com_artifex_mupdf_MuPDFCore_getPageLinksInternal(JNIEnv * env, jobject thiz, int pageNumber) +{ + jclass linkInfoClass; + jmethodID ctor; + jobjectArray arr; + jobject linkInfo; + fz_matrix ctm; + float zoom; + fz_link *list; + fz_link *link; + int count; + + linkInfoClass = (*env)->FindClass(env, "com/artifex/mupdf/LinkInfo"); + if (linkInfoClass == NULL) return NULL; + ctor = (*env)->GetMethodID(env, linkInfoClass, "<init>", "(FFFFI)V"); + if (ctor == NULL) return NULL; + + Java_com_artifex_mupdf_MuPDFCore_gotoPageInternal(env, thiz, pageNumber); + if (currentPageNumber == -1 || currentPage == NULL) + return NULL; + + zoom = resolution / 72; + ctm = fz_scale(zoom, zoom); + + list = fz_load_links(doc, currentPage); + count = 0; + for (link = list; link; link = link->next) + { + if (link->dest.kind == FZ_LINK_GOTO) + count++ ; + } + + arr = (*env)->NewObjectArray(env, count, linkInfoClass, NULL); + if (arr == NULL) return NULL; + + count = 0; + for (link = list; link; link = link->next) + { + if (link->dest.kind == FZ_LINK_GOTO) + { + fz_rect rect = fz_transform_rect(ctm, link->rect); + + linkInfo = (*env)->NewObject(env, linkInfoClass, ctor, + (float)rect.x0, (float)rect.y0, (float)rect.x1, (float)rect.y1, + link->dest.ld.gotor.page); + if (linkInfo == NULL) return NULL; + (*env)->SetObjectArrayElement(env, arr, count, linkInfo); + (*env)->DeleteLocalRef(env, linkInfo); + + count ++; + } + } + + return arr; +} + JNIEXPORT int JNICALL Java_com_artifex_mupdf_MuPDFCore_getPageLink(JNIEnv * env, jobject thiz, int pageNumber, float x, float y) { |