From 62fe02de29a64f4a642bc41964dfe5ba69f39ab7 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Fri, 10 Nov 2017 13:25:05 +0100 Subject: jni: Update for StructuredText highlight and copy changes. --- platform/java/mupdf_native.c | 37 ++++++++++++++++++---- platform/java/mupdf_native.h | 8 ++--- .../src/com/artifex/mupdf/fitz/StructuredText.java | 4 +-- 3 files changed, 36 insertions(+), 13 deletions(-) (limited to 'platform/java') diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c index 4a2274f7..6efa4f7f 100644 --- a/platform/java/mupdf_native.c +++ b/platform/java/mupdf_native.c @@ -18,6 +18,7 @@ #include #include #include +#include #ifdef HAVE_ANDROID #include @@ -128,6 +129,8 @@ static jfieldID fid_PDFGraftMap_pointer; static jfieldID fid_PDFObject_pointer; static jfieldID fid_PDFObject_Null; static jfieldID fid_Pixmap_pointer; +static jfieldID fid_Point_x; +static jfieldID fid_Point_y; static jfieldID fid_Rect_x0; static jfieldID fid_Rect_x1; static jfieldID fid_Rect_y0; @@ -539,6 +542,8 @@ static int find_fids(JNIEnv *env) cls_Point = get_class(&err, env, PKG"Point"); mid_Point_init = get_method(&err, env, "", "(FF)V"); + fid_Point_x = get_field(&err, env, "x", "F"); + fid_Point_y = get_field(&err, env, "y", "F"); cls_Rect = get_class(&err, env, PKG"Rect"); fid_Rect_x0 = get_field(&err, env, "x0", "F"); @@ -1667,6 +1672,22 @@ static inline fz_matrix from_Matrix(JNIEnv *env, jobject jmat) return mat; } +static inline fz_point from_Point(JNIEnv *env, jobject jpt) +{ + fz_point pt; + + if (!jpt) + { + pt.x = pt.y = 0; + return pt; + } + + pt.x = (*env)->GetFloatField(env, jpt, fid_Point_x); + pt.y = (*env)->GetFloatField(env, jpt, fid_Point_y); + + return pt; +} + static inline fz_rect from_Rect(JNIEnv *env, jobject jrect) { fz_rect rect; @@ -5760,18 +5781,19 @@ FUN(StructuredText_search)(JNIEnv *env, jobject self, jstring jneedle) } JNIEXPORT jobject JNICALL -FUN(StructuredText_highlight)(JNIEnv *env, jobject self, jobject jrect) +FUN(StructuredText_highlight)(JNIEnv *env, jobject self, jobject jpt1, jobject jpt2) { fz_context *ctx = get_context(env); fz_stext_page *text = from_StructuredText(env, self); - fz_rect rect = from_Rect(env, jrect); - fz_rect hits[256]; + fz_point pt1 = from_Point(env, jpt1); + fz_point pt2 = from_Point(env, jpt2); + fz_rect hits[1000]; int n = 0; if (!ctx || !text) return NULL; fz_try(ctx) - n = fz_highlight_selection(ctx, text, rect, hits, nelem(hits)); + n = fz_highlight_selection(ctx, text, pt1, pt2, hits, nelem(hits)); fz_catch(ctx) { jni_rethrow(env, ctx); @@ -5782,11 +5804,12 @@ FUN(StructuredText_highlight)(JNIEnv *env, jobject self, jobject jrect) } JNIEXPORT jobject JNICALL -FUN(StructuredText_copy)(JNIEnv *env, jobject self, jobject jrect) +FUN(StructuredText_copy)(JNIEnv *env, jobject self, jobject jpt1, jobject jpt2) { fz_context *ctx = get_context(env); fz_stext_page *text = from_StructuredText(env, self); - fz_rect rect = from_Rect(env, jrect); + fz_point pt1 = from_Point(env, jpt1); + fz_point pt2 = from_Point(env, jpt2); jobject jstring = NULL; char *s = NULL; @@ -5795,7 +5818,7 @@ FUN(StructuredText_copy)(JNIEnv *env, jobject self, jobject jrect) fz_var(s); fz_try(ctx) - s = fz_copy_selection(ctx, text, rect); + s = fz_copy_selection(ctx, text, pt1, pt2, 0); fz_catch(ctx) { jni_rethrow(env, ctx); diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h index d6a3251a..ee715713 100644 --- a/platform/java/mupdf_native.h +++ b/platform/java/mupdf_native.h @@ -3041,18 +3041,18 @@ JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_StructuredText_search /* * Class: com_artifex_mupdf_fitz_StructuredText * Method: highlight - * Signature: (Lcom/artifex/mupdf/fitz/Rect;)[Lcom/artifex/mupdf/fitz/Rect; + * Signature: (Lcom/artifex/mupdf/fitz/Point;Lcom/artifex/mupdf/fitz/Point;)[Lcom/artifex/mupdf/fitz/Rect; */ JNIEXPORT jobjectArray JNICALL Java_com_artifex_mupdf_fitz_StructuredText_highlight - (JNIEnv *, jobject, jobject); + (JNIEnv *, jobject, jobject, jobject); /* * Class: com_artifex_mupdf_fitz_StructuredText * Method: copy - * Signature: (Lcom/artifex/mupdf/fitz/Rect;)Ljava/lang/String; + * Signature: (Lcom/artifex/mupdf/fitz/Point;Lcom/artifex/mupdf/fitz/Point;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_artifex_mupdf_fitz_StructuredText_copy - (JNIEnv *, jobject, jobject); + (JNIEnv *, jobject, jobject, jobject); /* * Class: com_artifex_mupdf_fitz_StructuredText diff --git a/platform/java/src/com/artifex/mupdf/fitz/StructuredText.java b/platform/java/src/com/artifex/mupdf/fitz/StructuredText.java index 7407f0ae..8633e9b3 100644 --- a/platform/java/src/com/artifex/mupdf/fitz/StructuredText.java +++ b/platform/java/src/com/artifex/mupdf/fitz/StructuredText.java @@ -16,8 +16,8 @@ public class StructuredText } public native Rect[] search(String needle); - public native Rect[] highlight(Rect rect); - public native String copy(Rect rect); + public native Rect[] highlight(Point a, Point b); + public native String copy(Point a, Point b); public native TextBlock[] getBlocks(); -- cgit v1.2.3