diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2015-01-21 16:42:45 +0100 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2015-02-17 18:05:39 +0100 |
commit | f84a189d5f94250e46d2cbd1a75aba00130e2dd6 (patch) | |
tree | 8ee614ab90de1baa8941f91ae4946ed5c2e70721 /platform/android/jni/mupdf.c | |
parent | 681039767f2ccc72e236246178893eb0989169c9 (diff) | |
download | mupdf-f84a189d5f94250e46d2cbd1a75aba00130e2dd6.tar.xz |
Add ctx parameter and remove embedded contexts for API regularity.
Purge several embedded contexts:
Remove embedded context in fz_output.
Remove embedded context in fz_stream.
Remove embedded context in fz_device.
Remove fz_rebind_stream (since it is no longer necessary).
Remove embedded context in svg_device.
Remove embedded context in XML parser.
Add ctx argument to fz_document functions.
Remove embedded context in fz_document.
Remove embedded context in pdf_document.
Remove embedded context in pdf_obj.
Make fz_page independent of fz_document in the interface.
We shouldn't need to pass the document to all functions handling a page.
If a page is tied to the source document, it's redundant; otherwise it's
just pointless.
Fix reference counting oddity in fz_new_image_from_pixmap.
Diffstat (limited to 'platform/android/jni/mupdf.c')
-rw-r--r-- | platform/android/jni/mupdf.c | 298 |
1 files changed, 157 insertions, 141 deletions
diff --git a/platform/android/jni/mupdf.c b/platform/android/jni/mupdf.c index 1486e75a..5e6506be 100644 --- a/platform/android/jni/mupdf.c +++ b/platform/android/jni/mupdf.c @@ -137,7 +137,7 @@ static void drop_page_cache(globals *glo, page_cache *pc) pc->page_list = NULL; fz_drop_display_list(ctx, pc->annot_list); pc->annot_list = NULL; - fz_free_page(doc, pc->page); + fz_free_page(ctx, pc->page); pc->page = NULL; drop_changed_rects(ctx, &pc->changed_rects); drop_changed_rects(ctx, &pc->hq_changed_rects); @@ -180,27 +180,28 @@ static void show_alert(globals *glo, pdf_alert_event *alert) pthread_mutex_unlock(&glo->fin_lock2); } -static void event_cb(pdf_doc_event *event, void *data) +static void event_cb(fz_context *ctx, pdf_document *doc, pdf_doc_event *event, void *data) { globals *glo = (globals *)data; switch (event->type) { case PDF_DOCUMENT_EVENT_ALERT: - show_alert(glo, pdf_access_alert_event(event)); + show_alert(glo, pdf_access_alert_event(ctx, event)); break; } } static void alerts_init(globals *glo) { - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); if (!idoc || glo->alerts_initialised) return; if (idoc) - pdf_enable_js(idoc); + pdf_enable_js(ctx, idoc); glo->alerts_active = 0; glo->alert_request = 0; @@ -211,20 +212,21 @@ static void alerts_init(globals *glo) pthread_cond_init(&glo->alert_request_cond, NULL); pthread_cond_init(&glo->alert_reply_cond, NULL); - pdf_set_doc_event_callback(idoc, event_cb, glo); + pdf_set_doc_event_callback(ctx, idoc, event_cb, glo); LOGT("alert_init"); glo->alerts_initialised = 1; } static void alerts_fin(globals *glo) { - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); if (!glo->alerts_initialised) return; LOGT("Enter alerts_fin"); if (idoc) - pdf_set_doc_event_callback(idoc, NULL, NULL); + pdf_set_doc_event_callback(ctx, idoc, NULL, NULL); // Set alerts_active false and wake up show_alert and waitForAlertInternal, pthread_mutex_lock(&glo->alert_lock); @@ -330,7 +332,7 @@ JNI_FN(MuPDFCore_openFile)(JNIEnv * env, jobject thiz, jstring jfilename) fz_catch(ctx) { LOGE("Failed: %s", ctx->error->message); - fz_drop_document(glo->doc); + fz_drop_document(ctx, glo->doc); glo->doc = NULL; fz_drop_context(ctx); glo->ctx = NULL; @@ -350,7 +352,7 @@ typedef struct buffer_state_s } buffer_state; -static int bufferStreamNext(fz_stream *stream, int max) +static int bufferStreamNext(fz_context *ctx, fz_stream *stream, int max) { buffer_state *bs = (buffer_state *)stream->state; globals *glo = bs->globals; @@ -382,7 +384,7 @@ static void bufferStreamClose(fz_context *ctx, void *state) fz_free(ctx, state); } -static void bufferStreamSeek(fz_stream *stream, int offset, int whence) +static void bufferStreamSeek(fz_context *ctx, fz_stream *stream, int offset, int whence) { buffer_state *bs = (buffer_state *)stream->state; globals *glo = bs->globals; @@ -459,7 +461,7 @@ JNI_FN(MuPDFCore_openBuffer)(JNIEnv * env, jobject thiz, jstring jmagic) { bs = fz_malloc_struct(ctx, buffer_state); bs->globals = glo; - stream = fz_new_stream(ctx, bs, bufferStreamNext, bufferStreamClose, NULL); + stream = fz_new_stream(ctx, bs, bufferStreamNext, bufferStreamClose); stream->seek = bufferStreamSeek; glo->colorspace = fz_device_rgb(ctx); @@ -479,12 +481,12 @@ JNI_FN(MuPDFCore_openBuffer)(JNIEnv * env, jobject thiz, jstring jmagic) } fz_always(ctx) { - fz_drop_stream(stream); + fz_drop_stream(ctx, stream); } fz_catch(ctx) { LOGE("Failed: %s", ctx->error->message); - fz_drop_document(glo->doc); + fz_drop_document(ctx, glo->doc); glo->doc = NULL; fz_drop_context(ctx); glo->ctx = NULL; @@ -506,7 +508,7 @@ JNI_FN(MuPDFCore_countPagesInternal)(JNIEnv *env, jobject thiz) fz_try(ctx) { - count = fz_count_pages(glo->doc); + count = fz_count_pages(ctx, glo->doc); } fz_catch(ctx) { @@ -520,8 +522,9 @@ JNI_FN(MuPDFCore_fileFormatInternal)(JNIEnv * env, jobject thiz) { char info[64]; globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; - fz_meta(glo->doc, FZ_META_FORMAT_INFO, info, sizeof(info)); + fz_meta(ctx, glo->doc, FZ_META_FORMAT_INFO, info, sizeof(info)); return (*env)->NewStringUTF(env, info); } @@ -533,11 +536,12 @@ JNI_FN(MuPDFCore_isUnencryptedPDFInternal)(JNIEnv * env, jobject thiz) if (glo == NULL) return JNI_FALSE; - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); if (idoc == NULL) return JNI_FALSE; // Not a PDF - int cryptVer = pdf_crypt_version(idoc); + int cryptVer = pdf_crypt_version(ctx, idoc); return (cryptVer == 0) ? JNI_TRUE : JNI_FALSE; } @@ -600,9 +604,9 @@ JNI_FN(MuPDFCore_gotoPageInternal)(JNIEnv *env, jobject thiz, int page) { fz_rect rect; LOGI("Load page %d", pc->number); - pc->page = fz_load_page(glo->doc, pc->number); + pc->page = fz_load_page(ctx, glo->doc, pc->number); zoom = glo->resolution / 72; - fz_bound_page(glo->doc, pc->page, &pc->media_box); + fz_bound_page(ctx, pc->page, &pc->media_box); fz_scale(&ctm, zoom, zoom); rect = pc->media_box; fz_round_rect(&bbox, fz_transform_rect(&rect, &ctm)); @@ -635,25 +639,27 @@ JNIEXPORT jboolean JNICALL JNI_FN(MuPDFCore_javascriptSupported)(JNIEnv *env, jobject thiz) { globals *glo = get_globals(env, thiz); - pdf_document *idoc = pdf_specifics(glo->doc); - return pdf_js_supported(idoc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); + return pdf_js_supported(ctx, idoc); } static void update_changed_rects(globals *glo, page_cache *pc, pdf_document *idoc) { + fz_context *ctx = glo->ctx; fz_annot *annot; - pdf_update_page(idoc, (pdf_page *)pc->page); - while ((annot = (fz_annot *)pdf_poll_changed_annot(idoc, (pdf_page *)pc->page)) != NULL) + pdf_update_page(ctx, idoc, (pdf_page *)pc->page); + while ((annot = (fz_annot *)pdf_poll_changed_annot(ctx, idoc, (pdf_page *)pc->page)) != NULL) { /* FIXME: We bound the annot twice here */ rect_node *node = fz_malloc_struct(glo->ctx, rect_node); - fz_bound_annot(glo->doc, annot, &node->rect); + fz_bound_annot(ctx, pc->page, annot, &node->rect); node->next = pc->changed_rects; pc->changed_rects = node; node = fz_malloc_struct(glo->ctx, rect_node); - fz_bound_annot(glo->doc, annot, &node->rect); + fz_bound_annot(ctx, pc->page, annot, &node->rect); node->next = pc->hq_changed_rects; pc->hq_changed_rects = node; } @@ -712,7 +718,7 @@ JNI_FN(MuPDFCore_drawPage)(JNIEnv *env, jobject thiz, jobject bitmap, fz_try(ctx) { fz_irect pixbbox; - pdf_document *idoc = pdf_specifics(doc); + pdf_document *idoc = pdf_specifics(ctx, doc); if (idoc) { @@ -729,8 +735,8 @@ JNI_FN(MuPDFCore_drawPage)(JNIEnv *env, jobject thiz, jobject bitmap, /* Render to list */ pc->page_list = fz_new_display_list(ctx); dev = fz_new_list_device(ctx, pc->page_list); - fz_run_page_contents(doc, pc->page, dev, &fz_identity, cookie); - fz_drop_device(dev); + fz_run_page_contents(ctx, pc->page, dev, &fz_identity, cookie); + fz_drop_device(ctx, dev); dev = NULL; if (cookie != NULL && cookie->abort) { @@ -744,9 +750,9 @@ JNI_FN(MuPDFCore_drawPage)(JNIEnv *env, jobject thiz, jobject bitmap, fz_annot *annot; pc->annot_list = fz_new_display_list(ctx); dev = fz_new_list_device(ctx, pc->annot_list); - for (annot = fz_first_annot(doc, pc->page); annot; annot = fz_next_annot(doc, annot)) - fz_run_annot(doc, pc->page, annot, dev, &fz_identity, cookie); - fz_drop_device(dev); + for (annot = fz_first_annot(ctx, pc->page); annot; annot = fz_next_annot(ctx, pc->page, annot)) + fz_run_annot(ctx, pc->page, annot, dev, &fz_identity, cookie); + fz_drop_device(ctx, dev); dev = NULL; if (cookie != NULL && cookie->abort) { @@ -793,12 +799,12 @@ JNI_FN(MuPDFCore_drawPage)(JNIEnv *env, jobject thiz, jobject bitmap, for (i=0; i<100;i++) { #endif if (pc->page_list) - fz_run_display_list(pc->page_list, dev, &ctm, &rect, cookie); + fz_run_display_list(ctx, pc->page_list, dev, &ctm, &rect, cookie); if (cookie != NULL && cookie->abort) fz_throw(ctx, FZ_ERROR_GENERIC, "Render aborted"); if (pc->annot_list) - fz_run_display_list(pc->annot_list, dev, &ctm, &rect, cookie); + fz_run_display_list(ctx, pc->annot_list, dev, &ctm, &rect, cookie); if (cookie != NULL && cookie->abort) fz_throw(ctx, FZ_ERROR_GENERIC, "Render aborted"); @@ -808,14 +814,14 @@ JNI_FN(MuPDFCore_drawPage)(JNIEnv *env, jobject thiz, jobject bitmap, LOGI("100 renders in %d (%d per sec)", time, CLOCKS_PER_SEC); } #endif - fz_drop_device(dev); + fz_drop_device(ctx, dev); dev = NULL; fz_drop_pixmap(ctx, pix); LOGI("Rendered"); } fz_always(ctx) { - fz_drop_device(dev); + fz_drop_device(ctx, dev); dev = NULL; } fz_catch(ctx) @@ -884,7 +890,7 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, return JNI_FN(MuPDFCore_drawPage)(env, thiz, bitmap, pageW, pageH, patchX, patchY, patchW, patchH, (jlong)(intptr_t)cookie); } - idoc = pdf_specifics(doc); + idoc = pdf_specifics(ctx, doc); fz_var(pix); fz_var(dev); @@ -927,8 +933,8 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, /* Render to list */ pc->page_list = fz_new_display_list(ctx); dev = fz_new_list_device(ctx, pc->page_list); - fz_run_page_contents(doc, pc->page, dev, &fz_identity, cookie); - fz_drop_device(dev); + fz_run_page_contents(ctx, pc->page, dev, &fz_identity, cookie); + fz_drop_device(ctx, dev); dev = NULL; if (cookie != NULL && cookie->abort) { @@ -941,9 +947,9 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, if (pc->annot_list == NULL) { pc->annot_list = fz_new_display_list(ctx); dev = fz_new_list_device(ctx, pc->annot_list); - for (annot = fz_first_annot(doc, pc->page); annot; annot = fz_next_annot(doc, annot)) - fz_run_annot(doc, pc->page, annot, dev, &fz_identity, cookie); - fz_drop_device(dev); + for (annot = fz_first_annot(ctx, pc->page); annot; annot = fz_next_annot(ctx, pc->page, annot)) + fz_run_annot(ctx, pc->page, annot, dev, &fz_identity, cookie); + fz_drop_device(ctx, dev); dev = NULL; if (cookie != NULL && cookie->abort) { @@ -990,16 +996,16 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, fz_clear_pixmap_rect_with_value(ctx, pix, 0xff, &abox); dev = fz_new_draw_device_with_bbox(ctx, pix, &abox); if (pc->page_list) - fz_run_display_list(pc->page_list, dev, &ctm, &arect, cookie); + fz_run_display_list(ctx, pc->page_list, dev, &ctm, &arect, cookie); if (cookie != NULL && cookie->abort) fz_throw(ctx, FZ_ERROR_GENERIC, "Render aborted"); if (pc->annot_list) - fz_run_display_list(pc->annot_list, dev, &ctm, &arect, cookie); + fz_run_display_list(ctx, pc->annot_list, dev, &ctm, &arect, cookie); if (cookie != NULL && cookie->abort) fz_throw(ctx, FZ_ERROR_GENERIC, "Render aborted"); - fz_drop_device(dev); + fz_drop_device(ctx, dev); dev = NULL; } } @@ -1012,7 +1018,7 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, } fz_always(ctx) { - fz_drop_device(dev); + fz_drop_device(ctx, dev); dev = NULL; } fz_catch(ctx) @@ -1027,17 +1033,17 @@ JNI_FN(MuPDFCore_updatePageInternal)(JNIEnv *env, jobject thiz, jobject bitmap, } static int -charat(fz_text_page *page, int idx) +charat(fz_context *ctx, fz_text_page *page, int idx) { fz_char_and_box cab; - return fz_text_char_at(&cab, page, idx)->c; + return fz_text_char_at(ctx, &cab, page, idx)->c; } static fz_rect -bboxcharat(fz_text_page *page, int idx) +bboxcharat(fz_context *ctx, fz_text_page *page, int idx) { fz_char_and_box cab; - return fz_text_char_at(&cab, page, idx)->bbox; + return fz_text_char_at(ctx, &cab, page, idx)->bbox; } static int @@ -1120,8 +1126,9 @@ JNIEXPORT jboolean JNICALL JNI_FN(MuPDFCore_needsPasswordInternal)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; - return fz_needs_password(glo->doc) ? JNI_TRUE : JNI_FALSE; + return fz_needs_password(ctx, glo->doc) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL @@ -1130,12 +1137,13 @@ JNI_FN(MuPDFCore_authenticatePasswordInternal)(JNIEnv *env, jobject thiz, jstrin const char *pw; int result; globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; pw = (*env)->GetStringUTFChars(env, password, NULL); if (pw == NULL) return JNI_FALSE; - result = fz_authenticate_password(glo->doc, (char *)pw); + result = fz_authenticate_password(ctx, glo->doc, (char *)pw); (*env)->ReleaseStringUTFChars(env, password, pw); return result; } @@ -1144,7 +1152,8 @@ JNIEXPORT jboolean JNICALL JNI_FN(MuPDFCore_hasOutlineInternal)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); - fz_outline *outline = fz_load_outline(glo->doc); + fz_context *ctx = glo->ctx; + fz_outline *outline = fz_load_outline(ctx, glo->doc); fz_drop_outline(glo->ctx, outline); return (outline == NULL) ? JNI_FALSE : JNI_TRUE; @@ -1160,6 +1169,7 @@ JNI_FN(MuPDFCore_getOutlineInternal)(JNIEnv * env, jobject thiz) fz_outline *outline; int nItems; globals *glo = get_globals(env, thiz); + fz_context *ctx = glo->ctx; jobjectArray ret; olClass = (*env)->FindClass(env, PACKAGENAME "/OutlineItem"); @@ -1167,7 +1177,7 @@ JNI_FN(MuPDFCore_getOutlineInternal)(JNIEnv * env, jobject thiz) ctor = (*env)->GetMethodID(env, olClass, "<init>", "(ILjava/lang/String;I)V"); if (ctor == NULL) return NULL; - outline = fz_load_outline(glo->doc); + outline = fz_load_outline(ctx, glo->doc); nItems = countOutlineItems(outline); arr = (*env)->NewObjectArray(env, @@ -1226,8 +1236,8 @@ JNI_FN(MuPDFCore_searchPage)(JNIEnv * env, jobject thiz, jstring jtext) sheet = fz_new_text_sheet(ctx); text = fz_new_text_page(ctx); dev = fz_new_text_device(ctx, sheet, text); - fz_run_page(doc, pc->page, dev, &ctm, NULL); - fz_drop_device(dev); + fz_run_page(ctx, pc->page, dev, &ctm, NULL); + fz_drop_device(ctx, dev); dev = NULL; hit_count = fz_search_text_page(ctx, text, str, glo->hit_bbox, MAX_SEARCH_HITS); @@ -1236,7 +1246,7 @@ JNI_FN(MuPDFCore_searchPage)(JNIEnv * env, jobject thiz, jstring jtext) { fz_drop_text_page(ctx, text); fz_drop_text_sheet(ctx, sheet); - fz_drop_device(dev); + fz_drop_device(ctx, dev); } fz_catch(ctx) { @@ -1316,8 +1326,8 @@ JNI_FN(MuPDFCore_text)(JNIEnv * env, jobject thiz) sheet = fz_new_text_sheet(ctx); text = fz_new_text_page(ctx); dev = fz_new_text_device(ctx, sheet, text); - fz_run_page(doc, pc->page, dev, &ctm, NULL); - fz_drop_device(dev); + fz_run_page(ctx, pc->page, dev, &ctm, NULL); + fz_drop_device(ctx, dev); dev = NULL; barr = (*env)->NewObjectArray(env, text->len, textBlockClass, NULL); @@ -1356,7 +1366,7 @@ JNI_FN(MuPDFCore_text)(JNIEnv * env, jobject thiz) { fz_text_char *ch = &span->text[c]; fz_rect bbox; - fz_text_char_bbox(&bbox, span, c); + fz_text_char_bbox(ctx, &bbox, span, c); jobject cobj = (*env)->NewObject(env, textCharClass, ctor, bbox.x0, bbox.y0, bbox.x1, bbox.y1, ch->c); if (cobj == NULL) fz_throw(ctx, FZ_ERROR_GENERIC, "NewObjectfailed"); @@ -1380,7 +1390,7 @@ JNI_FN(MuPDFCore_text)(JNIEnv * env, jobject thiz) { fz_drop_text_page(ctx, text); fz_drop_text_sheet(ctx, sheet); - fz_drop_device(dev); + fz_drop_device(ctx, dev); } fz_catch(ctx) { @@ -1424,31 +1434,31 @@ JNI_FN(MuPDFCore_textAsHtml)(JNIEnv * env, jobject thiz) sheet = fz_new_text_sheet(ctx); text = fz_new_text_page(ctx); dev = fz_new_text_device(ctx, sheet, text); - fz_run_page(doc, pc->page, dev, &ctm, NULL); - fz_drop_device(dev); + fz_run_page(ctx, pc->page, dev, &ctm, NULL); + fz_drop_device(ctx, dev); dev = NULL; fz_analyze_text(ctx, sheet, text); buf = fz_new_buffer(ctx, 256); out = fz_new_output_with_buffer(ctx, buf); - fz_printf(out, "<html>\n"); - fz_printf(out, "<style>\n"); - fz_printf(out, "body{margin:0;}\n"); - fz_printf(out, "div.page{background-color:white;}\n"); - fz_printf(out, "div.block{margin:0pt;padding:0pt;}\n"); - fz_printf(out, "div.metaline{display:table;width:100%%}\n"); - fz_printf(out, "div.line{display:table-row;}\n"); - fz_printf(out, "div.cell{display:table-cell;padding-left:0.25em;padding-right:0.25em}\n"); - //fz_printf(out, "p{margin:0;padding:0;}\n"); - fz_printf(out, "</style>\n"); - fz_printf(out, "<body style=\"margin:0\"><div style=\"padding:10px\" id=\"content\">"); + fz_printf(ctx, out, "<html>\n"); + fz_printf(ctx, out, "<style>\n"); + fz_printf(ctx, out, "body{margin:0;}\n"); + fz_printf(ctx, out, "div.page{background-color:white;}\n"); + fz_printf(ctx, out, "div.block{margin:0pt;padding:0pt;}\n"); + fz_printf(ctx, out, "div.metaline{display:table;width:100%%}\n"); + fz_printf(ctx, out, "div.line{display:table-row;}\n"); + fz_printf(ctx, out, "div.cell{display:table-cell;padding-left:0.25em;padding-right:0.25em}\n"); + //fz_printf(ctx, out, "p{margin:0;padding:0;}\n"); + fz_printf(ctx, out, "</style>\n"); + fz_printf(ctx, out, "<body style=\"margin:0\"><div style=\"padding:10px\" id=\"content\">"); fz_print_text_page_html(ctx, out, text); - fz_printf(out, "</div></body>\n"); - fz_printf(out, "<style>\n"); + fz_printf(ctx, out, "</div></body>\n"); + fz_printf(ctx, out, "<style>\n"); fz_print_text_sheet(ctx, out, sheet); - fz_printf(out, "</style>\n</html>\n"); - fz_drop_output(out); + fz_printf(ctx, out, "</style>\n</html>\n"); + fz_drop_output(ctx, out); out = NULL; bArray = (*env)->NewByteArray(env, buf->len); @@ -1461,8 +1471,8 @@ JNI_FN(MuPDFCore_textAsHtml)(JNIEnv * env, jobject thiz) { fz_drop_text_page(ctx, text); fz_drop_text_sheet(ctx, sheet); - fz_drop_device(dev); - fz_drop_output(out); + fz_drop_device(ctx, dev); + fz_drop_output(ctx, out); fz_drop_buffer(ctx, buf); } fz_catch(ctx) @@ -1484,7 +1494,7 @@ JNI_FN(MuPDFCore_addMarkupAnnotationInternal)(JNIEnv * env, jobject thiz, jobjec globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; fz_document *doc = glo->doc; - pdf_document *idoc = pdf_specifics(doc); + pdf_document *idoc = pdf_specifics(ctx, doc); page_cache *pc = &glo->pages[glo->current]; jclass pt_cls; jfieldID x_fid, y_fid; @@ -1556,10 +1566,10 @@ JNI_FN(MuPDFCore_addMarkupAnnotationInternal)(JNIEnv * env, jobject thiz, jobjec fz_transform_point(&pts[i], &ctm); } - annot = (fz_annot *)pdf_create_annot(idoc, (pdf_page *)pc->page, type); + annot = (fz_annot *)pdf_create_annot(ctx, idoc, (pdf_page *)pc->page, type); - pdf_set_markup_annot_quadpoints(idoc, (pdf_annot *)annot, pts, n); - pdf_set_markup_appearance(idoc, (pdf_annot *)annot, color, alpha, line_thickness, line_height); + pdf_set_markup_annot_quadpoints(ctx, idoc, (pdf_annot *)annot, pts, n); + pdf_set_markup_appearance(ctx, idoc, (pdf_annot *)annot, color, alpha, line_thickness, line_height); dump_annotation_display_lists(glo); } @@ -1583,7 +1593,7 @@ JNI_FN(MuPDFCore_addInkAnnotationInternal)(JNIEnv * env, jobject thiz, jobjectAr globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; fz_document *doc = glo->doc; - pdf_document *idoc = pdf_specifics(doc); + pdf_document *idoc = pdf_specifics(ctx, doc); page_cache *pc = &glo->pages[glo->current]; jclass pt_cls; jfieldID x_fid, y_fid; @@ -1651,9 +1661,9 @@ JNI_FN(MuPDFCore_addInkAnnotationInternal)(JNIEnv * env, jobject thiz, jobjectAr (*env)->DeleteLocalRef(env, arc); } - annot = (fz_annot *)pdf_create_annot(idoc, (pdf_page *)pc->page, FZ_ANNOT_INK); + annot = (fz_annot *)pdf_create_annot(ctx, idoc, (pdf_page *)pc->page, FZ_ANNOT_INK); - pdf_set_ink_annot_list(idoc, (pdf_annot *)annot, pts, counts, n, color, INK_THICKNESS); + pdf_set_ink_annot_list(ctx, idoc, (pdf_annot *)annot, pts, counts, n, color, INK_THICKNESS); dump_annotation_display_lists(glo); } @@ -1678,7 +1688,7 @@ JNI_FN(MuPDFCore_deleteAnnotationInternal)(JNIEnv * env, jobject thiz, int annot globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; fz_document *doc = glo->doc; - pdf_document *idoc = pdf_specifics(doc); + pdf_document *idoc = pdf_specifics(ctx, doc); page_cache *pc = &glo->pages[glo->current]; fz_annot *annot; int i; @@ -1688,13 +1698,13 @@ JNI_FN(MuPDFCore_deleteAnnotationInternal)(JNIEnv * env, jobject thiz, int annot fz_try(ctx) { - annot = fz_first_annot(glo->doc, pc->page); + annot = fz_first_annot(ctx, pc->page); for (i = 0; i < annot_index && annot; i++) - annot = fz_next_annot(glo->doc, annot); + annot = fz_next_annot(ctx, pc->page, annot); if (annot) { - pdf_delete_annot(idoc, (pdf_page *)pc->page, (pdf_annot *)annot); + pdf_delete_annot(ctx, idoc, (pdf_page *)pc->page, (pdf_annot *)annot); dump_annotation_display_lists(glo); } } @@ -1718,7 +1728,7 @@ static void close_doc(globals *glo) alerts_fin(glo); - fz_drop_document(glo->doc); + fz_drop_document(glo->ctx, glo->doc); glo->doc = NULL; } @@ -1795,7 +1805,7 @@ JNI_FN(MuPDFCore_getPageLinksInternal)(JNIEnv * env, jobject thiz, int pageNumbe zoom = glo->resolution / 72; fz_scale(&ctm, zoom, zoom); - list = fz_load_links(glo->doc, pc->page); + list = fz_load_links(glo->ctx, pc->page); count = 0; for (link = list; link; link = link->next) { @@ -1883,6 +1893,7 @@ JNI_FN(MuPDFCore_getWidgetAreasInternal)(JNIEnv * env, jobject thiz, int pageNum globals *glo = get_globals(env, thiz); if (glo == NULL) return NULL; + fz_context *ctx = glo->ctx; rectFClass = (*env)->FindClass(env, "android/graphics/RectF"); if (rectFClass == NULL) return NULL; @@ -1894,7 +1905,7 @@ JNI_FN(MuPDFCore_getWidgetAreasInternal)(JNIEnv * env, jobject thiz, int pageNum if (pc->number != pageNumber || pc->page == NULL) return NULL; - idoc = pdf_specifics(glo->doc); + idoc = pdf_specifics(ctx, glo->doc); if (idoc == NULL) return NULL; @@ -1902,17 +1913,17 @@ JNI_FN(MuPDFCore_getWidgetAreasInternal)(JNIEnv * env, jobject thiz, int pageNum fz_scale(&ctm, zoom, zoom); count = 0; - for (widget = pdf_first_widget(idoc, (pdf_page *)pc->page); widget; widget = pdf_next_widget(widget)) + for (widget = pdf_first_widget(ctx, idoc, (pdf_page *)pc->page); widget; widget = pdf_next_widget(ctx, widget)) count ++; arr = (*env)->NewObjectArray(env, count, rectFClass, NULL); if (arr == NULL) return NULL; count = 0; - for (widget = pdf_first_widget(idoc, (pdf_page *)pc->page); widget; widget = pdf_next_widget(widget)) + for (widget = pdf_first_widget(ctx, idoc, (pdf_page *)pc->page); widget; widget = pdf_next_widget(ctx, widget)) { fz_rect rect; - pdf_bound_widget(widget, &rect); + pdf_bound_widget(ctx, widget, &rect); fz_transform_rect(&rect, &ctm); rectF = (*env)->NewObject(env, rectFClass, ctor, @@ -1942,6 +1953,7 @@ JNI_FN(MuPDFCore_getAnnotationsInternal)(JNIEnv * env, jobject thiz, int pageNum globals *glo = get_globals(env, thiz); if (glo == NULL) return NULL; + fz_context *ctx = glo->ctx; annotClass = (*env)->FindClass(env, PACKAGENAME "/Annotation"); if (annotClass == NULL) return NULL; @@ -1957,18 +1969,18 @@ JNI_FN(MuPDFCore_getAnnotationsInternal)(JNIEnv * env, jobject thiz, int pageNum fz_scale(&ctm, zoom, zoom); count = 0; - for (annot = fz_first_annot(glo->doc, pc->page); annot; annot = fz_next_annot(glo->doc, annot)) + for (annot = fz_first_annot(ctx, pc->page); annot; annot = fz_next_annot(ctx, pc->page, annot)) count ++; arr = (*env)->NewObjectArray(env, count, annotClass, NULL); if (arr == NULL) return NULL; count = 0; - for (annot = fz_first_annot(glo->doc, pc->page); annot; annot = fz_next_annot(glo->doc, annot)) + for (annot = fz_first_annot(ctx, pc->page); annot; annot = fz_next_annot(ctx, pc->page, annot)) { fz_rect rect; - fz_annot_type type = pdf_annot_type((pdf_annot *)annot); - fz_bound_annot(glo->doc, annot, &rect); + fz_annot_type type = pdf_annot_type(ctx, (pdf_annot *)annot); + fz_bound_annot(ctx, pc->page, annot, &rect); fz_transform_rect(&rect, &ctm); jannot = (*env)->NewObject(env, annotClass, ctor, @@ -1989,7 +2001,7 @@ JNI_FN(MuPDFCore_passClickEventInternal)(JNIEnv * env, jobject thiz, int pageNum globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; fz_matrix ctm; - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); float zoom; fz_point p; pdf_ui_event event; @@ -2021,9 +2033,9 @@ JNI_FN(MuPDFCore_passClickEventInternal)(JNIEnv * env, jobject thiz, int pageNum event.etype = PDF_EVENT_TYPE_POINTER; event.event.pointer.pt = p; event.event.pointer.ptype = PDF_POINTER_DOWN; - changed = pdf_pass_event(idoc, (pdf_page *)pc->page, &event); + changed = pdf_pass_event(ctx, idoc, (pdf_page *)pc->page, &event); event.event.pointer.ptype = PDF_POINTER_UP; - changed |= pdf_pass_event(idoc, (pdf_page *)pc->page, &event); + changed |= pdf_pass_event(ctx, idoc, (pdf_page *)pc->page, &event); if (changed) { dump_annotation_display_lists(glo); } @@ -2045,14 +2057,14 @@ JNI_FN(MuPDFCore_getFocusedWidgetTextInternal)(JNIEnv * env, jobject thiz) fz_try(ctx) { - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); if (idoc) { - pdf_widget *focus = pdf_focused_widget(idoc); + pdf_widget *focus = pdf_focused_widget(ctx, idoc); if (focus) - text = pdf_text_widget_text(idoc, focus); + text = pdf_text_widget_text(ctx, idoc, focus); } } fz_catch(ctx) @@ -2080,15 +2092,15 @@ JNI_FN(MuPDFCore_setFocusedWidgetTextInternal)(JNIEnv * env, jobject thiz, jstri fz_try(ctx) { - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); if (idoc) { - pdf_widget *focus = pdf_focused_widget(idoc); + pdf_widget *focus = pdf_focused_widget(ctx, idoc); if (focus) { - result = pdf_text_widget_set_text(idoc, focus, (char *)text); + result = pdf_text_widget_set_text(ctx, idoc, focus, (char *)text); dump_annotation_display_lists(glo); } } @@ -2108,7 +2120,7 @@ JNI_FN(MuPDFCore_getFocusedWidgetChoiceOptions)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; int type; int nopts, i; @@ -2119,20 +2131,20 @@ JNI_FN(MuPDFCore_getFocusedWidgetChoiceOptions)(JNIEnv * env, jobject thiz) if (idoc == NULL) return NULL; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return NULL; - type = pdf_widget_get_type(focus); + type = pdf_widget_get_type(ctx, focus); if (type != PDF_WIDGET_TYPE_LISTBOX && type != PDF_WIDGET_TYPE_COMBOBOX) return NULL; fz_var(opts); fz_try(ctx) { - nopts = pdf_choice_widget_options(idoc, focus, NULL); + nopts = pdf_choice_widget_options(ctx, idoc, focus, NULL); opts = fz_malloc(ctx, nopts * sizeof(*opts)); - (void)pdf_choice_widget_options(idoc, focus, opts); + (void)pdf_choice_widget_options(ctx, idoc, focus, opts); } fz_catch(ctx) { @@ -2164,7 +2176,7 @@ JNI_FN(MuPDFCore_getFocusedWidgetChoiceSelected)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; int type; int nsel, i; @@ -2175,20 +2187,20 @@ JNI_FN(MuPDFCore_getFocusedWidgetChoiceSelected)(JNIEnv * env, jobject thiz) if (idoc == NULL) return NULL; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return NULL; - type = pdf_widget_get_type(focus); + type = pdf_widget_get_type(ctx, focus); if (type != PDF_WIDGET_TYPE_LISTBOX && type != PDF_WIDGET_TYPE_COMBOBOX) return NULL; fz_var(sel); fz_try(ctx) { - nsel = pdf_choice_widget_value(idoc, focus, NULL); + nsel = pdf_choice_widget_value(ctx, idoc, focus, NULL); sel = fz_malloc(ctx, nsel * sizeof(*sel)); - (void)pdf_choice_widget_value(idoc, focus, sel); + (void)pdf_choice_widget_value(ctx, idoc, focus, sel); } fz_catch(ctx) { @@ -2220,7 +2232,7 @@ JNI_FN(MuPDFCore_setFocusedWidgetChoiceSelectedInternal)(JNIEnv * env, jobject t { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; int type; int nsel, i; @@ -2230,11 +2242,11 @@ JNI_FN(MuPDFCore_setFocusedWidgetChoiceSelectedInternal)(JNIEnv * env, jobject t if (idoc == NULL) return; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return; - type = pdf_widget_get_type(focus); + type = pdf_widget_get_type(ctx, focus); if (type != PDF_WIDGET_TYPE_LISTBOX && type != PDF_WIDGET_TYPE_COMBOBOX) return; @@ -2258,7 +2270,7 @@ JNI_FN(MuPDFCore_setFocusedWidgetChoiceSelectedInternal)(JNIEnv * env, jobject t fz_try(ctx) { - pdf_choice_widget_set_value(idoc, focus, nsel, sel); + pdf_choice_widget_set_value(ctx, idoc, focus, nsel, sel); dump_annotation_display_lists(glo); } fz_catch(ctx) @@ -2277,18 +2289,19 @@ JNIEXPORT int JNICALL JNI_FN(MuPDFCore_getFocusedWidgetTypeInternal)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; - if (idoc == NULL) + if (ctx, idoc == NULL) return NONE; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return NONE; - switch (pdf_widget_get_type(focus)) + switch (pdf_widget_get_type(ctx, focus)) { case PDF_WIDGET_TYPE_TEXT: return TEXT; case PDF_WIDGET_TYPE_LISTBOX: return LISTBOX; @@ -2311,13 +2324,14 @@ JNIEXPORT int JNICALL JNI_FN(MuPDFCore_getFocusedWidgetSignatureState)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; - if (idoc == NULL) + if (ctx, idoc == NULL) return Signature_NoSupport; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return Signature_NoSupport; @@ -2325,26 +2339,27 @@ JNI_FN(MuPDFCore_getFocusedWidgetSignatureState)(JNIEnv * env, jobject thiz) if (!pdf_signatures_supported()) return Signature_NoSupport; - return pdf_dict_gets(((pdf_annot *)focus)->obj, "V") ? Signature_Signed : Signature_Unsigned; + return pdf_dict_gets(ctx, ((pdf_annot *)focus)->obj, "V") ? Signature_Signed : Signature_Unsigned; } JNIEXPORT jstring JNICALL JNI_FN(MuPDFCore_checkFocusedSignatureInternal)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; char ebuf[256] = "Failed"; if (idoc == NULL) goto exit; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) goto exit; - if (pdf_check_signature(idoc, focus, glo->current_path, ebuf, sizeof(ebuf))) + if (pdf_check_signature(ctx, idoc, focus, glo->current_path, ebuf, sizeof(ebuf))) { strcpy(ebuf, "Signature is valid"); } @@ -2358,7 +2373,7 @@ JNI_FN(MuPDFCore_signFocusedSignatureInternal)(JNIEnv * env, jobject thiz, jstri { globals *glo = get_globals(env, thiz); fz_context *ctx = glo->ctx; - pdf_document *idoc = pdf_specifics(glo->doc); + pdf_document *idoc = pdf_specifics(ctx, glo->doc); pdf_widget *focus; const char *keyfile; const char *password; @@ -2367,7 +2382,7 @@ JNI_FN(MuPDFCore_signFocusedSignatureInternal)(JNIEnv * env, jobject thiz, jstri if (idoc == NULL) return JNI_FALSE; - focus = pdf_focused_widget(idoc); + focus = pdf_focused_widget(ctx, idoc); if (focus == NULL) return JNI_FALSE; @@ -2380,7 +2395,7 @@ JNI_FN(MuPDFCore_signFocusedSignatureInternal)(JNIEnv * env, jobject thiz, jstri fz_var(res); fz_try(ctx) { - pdf_sign_signature(idoc, focus, keyfile, password); + pdf_sign_signature(ctx, idoc, focus, keyfile, password); dump_annotation_display_lists(glo); res = JNI_TRUE; } @@ -2521,9 +2536,10 @@ JNIEXPORT jboolean JNICALL JNI_FN(MuPDFCore_hasChangesInternal)(JNIEnv * env, jobject thiz) { globals *glo = get_globals(env, thiz); - pdf_document *idoc = pdf_specifics(glo->doc); + fz_context *ctx = glo->ctx; + pdf_document *idoc = pdf_specifics(ctx, glo->doc); - return (idoc && pdf_has_unsaved_changes(idoc)) ? JNI_TRUE : JNI_FALSE; + return (idoc && pdf_has_unsaved_changes(ctx, idoc)) ? JNI_TRUE : JNI_FALSE; } static char *tmp_path(char *path) @@ -2593,7 +2609,7 @@ JNI_FN(MuPDFCore_saveInternal)(JNIEnv * env, jobject thiz) if (!err) { - fz_write_document(glo->doc, tmp, &opts); + fz_write_document(ctx, glo->doc, tmp, &opts); written = 1; } } |