From 79358b9f05196807b427734a9b209e70e270a61f Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Thu, 20 Aug 2015 12:39:31 +0100 Subject: GProof: Fix Android JNI functions for multipage files. Explicitly pass the page number into separation related functions. --- platform/android/jni/mupdf.c | 41 ++++++++++++++++++---- .../src/com/artifex/mupdfdemo/MuPDFCore.java | 23 +++++++----- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/platform/android/jni/mupdf.c b/platform/android/jni/mupdf.c index 6abb805f..1af19433 100644 --- a/platform/android/jni/mupdf.c +++ b/platform/android/jni/mupdf.c @@ -2791,25 +2791,45 @@ JNI_FN(MuPDFCore_gprfSupportedInternal)(JNIEnv * env) } JNIEXPORT int JNICALL -JNI_FN(MuPDFCore_getNumSepsOnPageInternal)(JNIEnv *env, jobject thiz) +JNI_FN(MuPDFCore_getNumSepsOnPageInternal)(JNIEnv *env, jobject thiz, int page) { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; + int i; - return fz_count_separations_on_page(ctx, glo->pages[glo->current].page); + for (i = 0; i < NUM_CACHE; i++) + { + if (glo->pages[i].page != NULL && glo->pages[i].number == page) + break; + } + if (i == NUM_CACHE) + return 0; + + LOGE("Counting seps on page %d", page); + + return fz_count_separations_on_page(ctx, glo->pages[i].page); } JNIEXPORT void JNICALL -JNI_FN(MuPDFCore_controlSepOnPageInternal)(JNIEnv *env, jobject thiz, int sep, jboolean disable) +JNI_FN(MuPDFCore_controlSepOnPageInternal)(JNIEnv *env, jobject thiz, int page, int sep, jboolean disable) { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; + int i; + + for (i = 0; i < NUM_CACHE; i++) + { + if (glo->pages[i].page != NULL && glo->pages[i].number == page) + break; + } + if (i == NUM_CACHE) + return; - fz_control_separation_on_page(ctx, glo->pages[glo->current].page, sep, disable); + fz_control_separation_on_page(ctx, glo->pages[i].page, sep, disable); } JNIEXPORT jobject JNICALL -JNI_FN(MuPDFCore_getSepInternal)(JNIEnv *env, jobject thiz, int sep) +JNI_FN(MuPDFCore_getSepInternal)(JNIEnv *env, jobject thiz, int page, int sep) { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; @@ -2819,8 +2839,17 @@ JNI_FN(MuPDFCore_getSepInternal)(JNIEnv *env, jobject thiz, int sep) jobject jname; jclass sepClass; jmethodID ctor; + int i; + + for (i = 0; i < NUM_CACHE; i++) + { + if (glo->pages[i].page != NULL && glo->pages[i].number == page) + break; + } + if (i == NUM_CACHE) + return NULL; - name = fz_get_separation_on_page(ctx, glo->pages[glo->current].page, sep, &rgb, &cmyk); + name = fz_get_separation_on_page(ctx, glo->pages[i].page, sep, &rgb, &cmyk); jname = name ? (*env)->NewStringUTF(env, name) : NULL; sepClass = (*env)->FindClass(env, PACKAGENAME "/Separation"); diff --git a/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java b/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java index 29e443c0..53b9d565 100644 --- a/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java +++ b/platform/android/src/com/artifex/mupdfdemo/MuPDFCore.java @@ -92,9 +92,9 @@ public class MuPDFCore private native void abortCookie(long cookie); private native String startProofInternal(); private native void endProofInternal(String filename); - private native int getNumSepsOnPageInternal(); - private native int controlSepOnPageInternal(int sep, boolean disable); - private native Separation getSepInternal(int sep); + private native int getNumSepsOnPageInternal(int page); + private native int controlSepOnPageInternal(int page, int sep, boolean disable); + private native Separation getSepInternal(int page, int sep); public native boolean javascriptSupported(); @@ -379,15 +379,20 @@ public class MuPDFCore return gprfSupportedInternal(); } - public synchronized int getNumSepsOnPage() { - return getNumSepsOnPageInternal(); + public static boolean isProofing() + { + return mIsProofing; + } + + public synchronized int getNumSepsOnPage(int page) { + return getNumSepsOnPageInternal(page); } - public synchronized int controlSepOnPage(int sep, boolean disable) { - return controlSepOnPageInternal(sep, disable); + public synchronized int controlSepOnPage(int page, int sep, boolean disable) { + return controlSepOnPageInternal(page, sep, disable); } - public synchronized Separation getSep(int sep) { - return getSepInternal(sep); + public synchronized Separation getSep(int page, int sep) { + return getSepInternal(page, sep); } } -- cgit v1.2.3