summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2017-04-08 13:35:29 +0800
committerSebastian Rasmussen <sebras@gmail.com>2017-04-20 19:47:03 +0800
commitfe4432dde91c5d7cc74b968109dd80685b25457e (patch)
treeb2abfab1ff788a2964eed1272a9bba4dc7855790
parentb6c7919f8fc926f026c50938ef38eddbd13d259f (diff)
downloadmupdf-fe4432dde91c5d7cc74b968109dd80685b25457e.tar.xz
jni: Implement missing interfaces.
-rw-r--r--platform/java/mupdf_native.c143
-rw-r--r--platform/java/mupdf_native.h16
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/Rect.java2
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/StrokeState.java2
4 files changed, 151 insertions, 12 deletions
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index ce0df3db..f7f33525 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -3098,6 +3098,27 @@ FUN(Pixmap_clearWithValue)(JNIEnv *env, jobject self, jint value)
jni_rethrow(env, ctx);
}
+JNIEXPORT void JNICALL
+FUN(Pixmap_saveAsPNG)(JNIEnv *env, jobject self, jstring jfilename)
+{
+ fz_context *ctx = get_context(env);
+ fz_pixmap *pixmap = from_Pixmap(env, self);
+ const char *filename = "null";
+
+ if (!ctx) return;
+ if (!jfilename) { jni_throw_arg(env, "filename must not be null"); return; }
+
+ filename = (*env)->GetStringUTFChars(env, jfilename, NULL);
+ if (!filename) return;
+
+ fz_try(ctx)
+ fz_save_pixmap_as_png(ctx, pixmap, filename);
+ fz_always(ctx)
+ (*env)->ReleaseStringUTFChars(env, jfilename, filename);
+ fz_catch(ctx)
+ jni_rethrow(env, ctx);
+}
+
JNIEXPORT jint JNICALL
FUN(Pixmap_getX)(JNIEnv *env, jobject self)
{
@@ -3531,6 +3552,33 @@ FUN(Path_walk)(JNIEnv *env, jobject self, jobject obj)
jni_rethrow(env, ctx);
}
+/* Rect interface */
+
+JNIEXPORT void JNICALL
+FUN(Rect_adjustForStroke)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm)
+{
+ fz_context *ctx = get_context(env);
+ fz_rect rect = from_Rect(env, self);
+ fz_stroke_state *stroke = from_StrokeState(env, jstroke);
+ fz_matrix ctm = from_Matrix(env, jctm);
+
+ if (!ctx) return;
+ if (!stroke) { jni_throw_arg(env, "stroke must not be null"); return; }
+
+ fz_try(ctx)
+ fz_adjust_rect_for_stroke(ctx, &rect, stroke, &ctm);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return;
+ }
+
+ (*env)->SetFloatField(env, self, fid_Rect_x0, rect.x0);
+ (*env)->SetFloatField(env, self, fid_Rect_x1, rect.x1);
+ (*env)->SetFloatField(env, self, fid_Rect_y0, rect.y0);
+ (*env)->SetFloatField(env, self, fid_Rect_y1, rect.y1);
+}
+
/* StrokeState interface */
JNIEXPORT void JNICALL
@@ -3637,7 +3685,6 @@ FUN(StrokeState_getDashes)(JNIEnv *env, jobject self)
jfloatArray arr;
if (!ctx || !stroke) return NULL;
- if (!stroke) { jni_throw_arg(env, "stroke must not be null"); return NULL; }
if (stroke->dash_len == 0)
return NULL; /* there are no dashes, so return NULL instead of empty array */
@@ -3703,6 +3750,27 @@ FUN(Text_newNative)(JNIEnv *env, jobject self)
return jlong_cast(text);
}
+JNIEXPORT jlong JNICALL
+FUN(Text_cloneNative)(JNIEnv *env, jobject self, jobject jold)
+{
+ fz_context *ctx = get_context(env);
+ fz_text *old = from_Text(env, jold);
+ fz_text *text = NULL;
+
+ if (!ctx) return 0;
+ if (!old) { jni_throw_arg(env, "old must not be null"); return 0; }
+
+ fz_try(ctx)
+ text = fz_clone_text(ctx, old);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return 0;
+ }
+
+ return jlong_cast(text);
+}
+
JNIEXPORT jobject JNICALL
FUN(Text_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm)
{
@@ -4249,12 +4317,63 @@ FUN(Document_openNativeWithPath)(JNIEnv *env, jclass cls, jstring jfilename)
return to_Document_safe_own(ctx, env, doc);
}
+JNIEXPORT jobject JNICALL
+FUN(Document_openNativeWithBuffer)(JNIEnv *env, jclass cls, jobject jbuffer, jstring jmagic)
+{
+ fz_context *ctx = get_context(env);
+ fz_document *doc = NULL;
+ const char *magic = NULL;
+ fz_stream *stream = NULL;
+ int n;
+ jbyte *buffer = NULL;
+ fz_buffer *buf = NULL;
+
+ if (!ctx) return NULL;
+ if (!jmagic) { jni_throw_arg(env, "magic must not be null"); return NULL; }
+
+ magic = (*env)->GetStringUTFChars(env, jmagic, NULL);
+ if (!magic) return NULL;
+
+ n = (*env)->GetArrayLength(env, jbuffer);
+
+ buffer = (*env)->GetByteArrayElements(env, jbuffer, NULL);
+ if (!buffer) {
+ if (magic)
+ (*env)->ReleaseStringUTFChars(env, jmagic, magic);
+ jni_throw_io(env, "cannot get bytes to read");
+ return NULL;
+ }
+
+ fz_try(ctx)
+ {
+ buf = fz_new_buffer(ctx, n);
+ fz_append_data(ctx, buf, buffer, n);
+ stream = fz_open_buffer(ctx, buf);
+ doc = fz_open_document_with_stream(ctx, magic, stream);
+ }
+ fz_always(ctx)
+ {
+ fz_drop_stream(ctx, stream);
+ fz_drop_buffer(ctx, buf);
+ (*env)->ReleaseByteArrayElements(env, jbuffer, buffer, 0);
+ if (magic)
+ (*env)->ReleaseStringUTFChars(env, jmagic, magic);
+ }
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return NULL;
+ }
+
+ return to_Document_safe_own(ctx, env, doc);
+}
+
JNIEXPORT jboolean JNICALL
FUN(Document_recognize)(JNIEnv *env, jclass self, jstring jmagic)
{
fz_context *ctx = get_context(env);
const char *magic = NULL;
- jboolean recognized;
+ jboolean recognized = JNI_FALSE;
if (!ctx) return JNI_FALSE;
if (jmagic)
@@ -7621,6 +7740,26 @@ FUN(PDFObject_asFloat)(JNIEnv *env, jobject self)
return f;
}
+JNIEXPORT jint JNICALL
+FUN(PDFObject_asIndirect)(JNIEnv *env, jobject self)
+{
+ fz_context *ctx = get_context(env);
+ pdf_obj *obj = from_PDFObject(env, self);
+ int ind = 0;
+
+ if (!ctx || !obj) return 0;
+
+ fz_try(ctx)
+ ind = pdf_to_num(ctx, obj);
+ fz_catch(ctx)
+ {
+ jni_rethrow(env, ctx);
+ return 0;
+ }
+
+ return ind;
+}
+
JNIEXPORT jstring JNICALL
FUN(PDFObject_asString)(JNIEnv *env, jobject self)
{
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h
index ead7fbbd..cb51e015 100644
--- a/platform/java/mupdf_native.h
+++ b/platform/java/mupdf_native.h
@@ -2750,6 +2750,14 @@ extern "C" {
#ifdef __cplusplus
extern "C" {
#endif
+/*
+ * Class: com_artifex_mupdf_fitz_Rect
+ * Method: adjustForStroke
+ * Signature: (Lcom/artifex/mupdf/fitz/StrokeState;Lcom/artifex/mupdf/fitz/Matrix;)V
+ */
+JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Rect_adjustForStroke
+ (JNIEnv *, jobject, jobject, jobject);
+
#ifdef __cplusplus
}
#endif
@@ -2836,14 +2844,6 @@ JNIEXPORT jlong JNICALL Java_com_artifex_mupdf_fitz_StrokeState_newNative
/*
* Class: com_artifex_mupdf_fitz_StrokeState
- * Method: adjustRectForStroke
- * Signature: (Lcom/artifex/mupdf/fitz/Rect;Lcom/artifex/mupdf/fitz/Matrix;)V
- */
-JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_StrokeState_adjustRectForStroke
- (JNIEnv *, jobject, jobject, jobject);
-
-/*
- * Class: com_artifex_mupdf_fitz_StrokeState
* Method: getStartCap
* Signature: ()I
*/
diff --git a/platform/java/src/com/artifex/mupdf/fitz/Rect.java b/platform/java/src/com/artifex/mupdf/fitz/Rect.java
index f35c290e..6f68b3ac 100644
--- a/platform/java/src/com/artifex/mupdf/fitz/Rect.java
+++ b/platform/java/src/com/artifex/mupdf/fitz/Rect.java
@@ -30,6 +30,8 @@ public class Rect
this(r.x0, r.y0, r.x1, r.y1);
}
+ public native void adjustForStroke(StrokeState state, Matrix ctm);
+
public String toString()
{
return "[" + x0 + " " + y0 + " " + x1 + " " + y1 + "]";
diff --git a/platform/java/src/com/artifex/mupdf/fitz/StrokeState.java b/platform/java/src/com/artifex/mupdf/fitz/StrokeState.java
index c29291fc..824e54b9 100644
--- a/platform/java/src/com/artifex/mupdf/fitz/StrokeState.java
+++ b/platform/java/src/com/artifex/mupdf/fitz/StrokeState.java
@@ -42,8 +42,6 @@ public class StrokeState
pointer = newNative(startCap, dashCap, endCap, lineJoin, lineWidth, miterLimit, dashPhase, dash);
}
- public native void adjustRectForStroke(Rect rect, Matrix ctm);
-
public native int getStartCap();
public native int getDashCap();
public native int getEndCap();