From 9b4acc78d2a56a5f79d69f50e72197930509505e Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Tue, 26 Apr 2016 20:11:49 +0200 Subject: Add fz_close_device function. Garbage collected languages need a way to signal that they are done with a device other than freeing it. Call it implicitly on fz_drop_device; so take care not to call it again in case it has been explicitly called already. --- platform/java/com/artifex/mupdf/fitz/Device.java | 1 + .../java/com/artifex/mupdf/fitz/NativeDevice.java | 2 ++ platform/java/mupdf_native.c | 23 ++++++++++++++++++++-- platform/java/mupdf_native.h | 8 ++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) (limited to 'platform/java') diff --git a/platform/java/com/artifex/mupdf/fitz/Device.java b/platform/java/com/artifex/mupdf/fitz/Device.java index b4e87481..71f0ba54 100644 --- a/platform/java/com/artifex/mupdf/fitz/Device.java +++ b/platform/java/com/artifex/mupdf/fitz/Device.java @@ -38,6 +38,7 @@ public class Device * }; */ + public void close() {} public void fillPath(Path path, boolean evenOdd, Matrix ctm, ColorSpace cs, float color[], float alpha) {} public void strokePath(Path path, StrokeState stroke, Matrix ctm, ColorSpace cs, float color[], float alpha) {} public void clipPath(Path path, boolean evenOdd, Matrix ctm) {} diff --git a/platform/java/com/artifex/mupdf/fitz/NativeDevice.java b/platform/java/com/artifex/mupdf/fitz/NativeDevice.java index 968c5f09..6ea7b0a5 100644 --- a/platform/java/com/artifex/mupdf/fitz/NativeDevice.java +++ b/platform/java/com/artifex/mupdf/fitz/NativeDevice.java @@ -17,6 +17,8 @@ public class NativeDevice extends Device super(p); } + public native final void close(); + public native final void fillPath(Path path, boolean evenOdd, Matrix ctm, ColorSpace cs, float color[], float alpha); public native final void strokePath(Path path, StrokeState stroke, Matrix ctm, ColorSpace cs, float color[], float alpha); public native final void clipPath(Path path, boolean evenOdd, Matrix ctm); diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c index ad8d5ccc..e835a76d 100644 --- a/platform/java/mupdf_native.c +++ b/platform/java/mupdf_native.c @@ -1284,7 +1284,7 @@ fz_java_device_end_tile(fz_context *ctx, fz_device *dev) } static void -fz_java_device_drop_imp(fz_context *ctx, fz_device *dev) +fz_java_device_close(fz_context *ctx, fz_device *dev) { fz_java_device *jdev = (fz_java_device *)dev; JNIEnv *env = jdev->env; @@ -1303,7 +1303,7 @@ static fz_device *fz_new_java_device(fz_context *ctx, JNIEnv *env, jobject self) dev->self = (*env)->NewGlobalRef(env, self); - dev->super.drop_imp = fz_java_device_drop_imp; + dev->super.close = fz_java_device_close; dev->super.fill_path = fz_java_device_fill_path; dev->super.stroke_path = fz_java_device_stroke_path; @@ -1445,6 +1445,25 @@ FUN(NativeDevice_finalize)(JNIEnv *env, jobject self) } } +JNIEXPORT void JNICALL +FUN(NativeDevice_close)(JNIEnv *env, jobject self) +{ + fz_context *ctx = get_context(env); + fz_device *dev = from_Device(env, self, ctx); + NativeDeviceInfo *info; + + if (ctx == NULL || dev == NULL) + return; + + info = lockNativeDevice(env, self); + fz_try(ctx) + fz_close_device(ctx, dev); + fz_always(ctx) + unlockNativeDevice(env, info); + fz_catch(ctx) + jni_rethrow(env, ctx); +} + JNIEXPORT void JNICALL FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) { diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h index 95f17084..4b88903e 100644 --- a/platform/java/mupdf_native.h +++ b/platform/java/mupdf_native.h @@ -838,6 +838,14 @@ extern "C" { JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_NativeDevice_finalize (JNIEnv *, jobject); +/* + * Class: com_artifex_mupdf_fitz_NativeDevice + * Method: close + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_NativeDevice_close + (JNIEnv *, jobject); + /* * Class: com_artifex_mupdf_fitz_NativeDevice * Method: fillPath -- cgit v1.2.3