summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/jni/mupdf.c54
-rw-r--r--android/src/com/artifex/mupdfdemo/Annotation.java18
-rw-r--r--android/src/com/artifex/mupdfdemo/MuPDFActivity.java9
-rw-r--r--android/src/com/artifex/mupdfdemo/MuPDFCore.java5
-rw-r--r--android/src/com/artifex/mupdfdemo/MuPDFView.java1
-rw-r--r--android/src/com/artifex/mupdfdemo/PageView.java1
-rw-r--r--android/src/com/artifex/mupdfdemo/ReaderView.java2
7 files changed, 78 insertions, 12 deletions
diff --git a/android/jni/mupdf.c b/android/jni/mupdf.c
index 47134334..d2aa124f 100644
--- a/android/jni/mupdf.c
+++ b/android/jni/mupdf.c
@@ -1678,6 +1678,60 @@ JNI_FN(MuPDFCore_getWidgetAreasInternal)(JNIEnv * env, jobject thiz, int pageNum
return arr;
}
+JNIEXPORT jobjectArray JNICALL
+JNI_FN(MuPDFCore_getAnnotationsInternal)(JNIEnv * env, jobject thiz, int pageNumber)
+{
+ jclass annotClass;
+ jmethodID ctor;
+ jobjectArray arr;
+ jobject jannot;
+ fz_annot *annot;
+ fz_matrix ctm;
+ float zoom;
+ int count;
+ page_cache *pc;
+ globals *glo = get_globals(env, thiz);
+
+ annotClass = (*env)->FindClass(env, PACKAGENAME "/Annotation");
+ if (annotClass == NULL) return NULL;
+ ctor = (*env)->GetMethodID(env, annotClass, "<init>", "(FFFFI)V");
+ if (ctor == NULL) return NULL;
+
+ JNI_FN(MuPDFCore_gotoPageInternal)(env, thiz, pageNumber);
+ pc = &glo->pages[glo->current];
+ if (pc->number != pageNumber || pc->page == NULL)
+ return NULL;
+
+ zoom = glo->resolution / 72;
+ fz_scale(&ctm, zoom, zoom);
+
+ count = 0;
+ for (annot = fz_first_annot(glo->doc, pc->page); annot; annot = fz_next_annot(glo->doc, 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))
+ {
+ fz_rect rect;
+ fz_annot_type type = fz_get_annot_type(annot);
+ fz_bound_annot(glo->doc, annot, &rect);
+ fz_transform_rect(&rect, &ctm);
+
+ jannot = (*env)->NewObject(env, annotClass, ctor,
+ (float)rect.x0, (float)rect.y0, (float)rect.x1, (float)rect.y1, type);
+ if (jannot == NULL) return NULL;
+ (*env)->SetObjectArrayElement(env, arr, count, jannot);
+ (*env)->DeleteLocalRef(env, jannot);
+
+ count ++;
+ }
+
+ return arr;
+}
+
JNIEXPORT int JNICALL
JNI_FN(MuPDFCore_passClickEventInternal)(JNIEnv * env, jobject thiz, int pageNumber, float x, float y)
{
diff --git a/android/src/com/artifex/mupdfdemo/Annotation.java b/android/src/com/artifex/mupdfdemo/Annotation.java
new file mode 100644
index 00000000..709b66cc
--- /dev/null
+++ b/android/src/com/artifex/mupdfdemo/Annotation.java
@@ -0,0 +1,18 @@
+package com.artifex.mupdfdemo;
+
+import android.graphics.RectF;
+
+public class Annotation extends RectF {
+ enum Type {
+ TEXT, LINK, FREETEXT, LINE, SQUARE, CIRCLE, POLYGON, POLYLINE, HIGHLIGHT,
+ UNDERLINE, SQUIGGLY, STRIKEOUT, STAMP, CARET, INK, POPUP, FILEATTACHMENT,
+ SOUND, MOVIE, WIDGET, SCREEN, PRINTERMARK, TRAPNET, WATERMARK, A3D
+ }
+
+ public final Type type;
+
+ public Annotation(float x0, float y0, float x1, float y1, int _type) {
+ super(x0, y0, x1, y1);
+ type = Type.values()[_type];
+ }
+}
diff --git a/android/src/com/artifex/mupdfdemo/MuPDFActivity.java b/android/src/com/artifex/mupdfdemo/MuPDFActivity.java
index cb9769fe..a9729725 100644
--- a/android/src/com/artifex/mupdfdemo/MuPDFActivity.java
+++ b/android/src/com/artifex/mupdfdemo/MuPDFActivity.java
@@ -1,15 +1,13 @@
package com.artifex.mupdfdemo;
-import java.util.concurrent.Executor;
import java.io.InputStream;
-import java.io.FileInputStream;
+import java.util.concurrent.Executor;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -17,19 +15,14 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Color;
-import android.graphics.PorterDuff;
-import android.graphics.RectF;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.method.PasswordTransformationMethod;
-import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.Menu;
-import android.view.MotionEvent;
-import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
diff --git a/android/src/com/artifex/mupdfdemo/MuPDFCore.java b/android/src/com/artifex/mupdfdemo/MuPDFCore.java
index a432371a..ec8fd513 100644
--- a/android/src/com/artifex/mupdfdemo/MuPDFCore.java
+++ b/android/src/com/artifex/mupdfdemo/MuPDFCore.java
@@ -49,6 +49,7 @@ public class MuPDFCore
private native int getFocusedWidgetTypeInternal();
private native LinkInfo [] getPageLinksInternal(int page);
private native RectF[] getWidgetAreasInternal(int page);
+ private native Annotation[] getAnnotationsInternal(int page);
private native OutlineItem [] getOutlineInternal();
private native boolean hasOutlineInternal();
private native boolean needsPasswordInternal();
@@ -196,6 +197,10 @@ public class MuPDFCore
return getWidgetAreasInternal(page);
}
+ public synchronized Annotation [] getAnnoations(int page) {
+ return getAnnotationsInternal(page);
+ }
+
public synchronized RectF [] searchPage(int page, String text) {
gotoPage(page);
return searchPage(text);
diff --git a/android/src/com/artifex/mupdfdemo/MuPDFView.java b/android/src/com/artifex/mupdfdemo/MuPDFView.java
index 919ac516..d2b8ac10 100644
--- a/android/src/com/artifex/mupdfdemo/MuPDFView.java
+++ b/android/src/com/artifex/mupdfdemo/MuPDFView.java
@@ -1,7 +1,6 @@
package com.artifex.mupdfdemo;
import android.graphics.PointF;
-import android.graphics.Rect;
import android.graphics.RectF;
public interface MuPDFView {
diff --git a/android/src/com/artifex/mupdfdemo/PageView.java b/android/src/com/artifex/mupdfdemo/PageView.java
index 04065174..b6b533bd 100644
--- a/android/src/com/artifex/mupdfdemo/PageView.java
+++ b/android/src/com/artifex/mupdfdemo/PageView.java
@@ -4,7 +4,6 @@ import java.util.ArrayList;
import java.util.Iterator;
import android.content.ClipData;
-import android.content.ClipboardManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
diff --git a/android/src/com/artifex/mupdfdemo/ReaderView.java b/android/src/com/artifex/mupdfdemo/ReaderView.java
index 540ad381..9e738cac 100644
--- a/android/src/com/artifex/mupdfdemo/ReaderView.java
+++ b/android/src/com/artifex/mupdfdemo/ReaderView.java
@@ -7,7 +7,6 @@ import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
import android.util.AttributeSet;
-import android.util.Log;
import android.util.SparseArray;
import android.view.GestureDetector;
import android.view.MotionEvent;
@@ -232,7 +231,6 @@ public class ReaderView extends AdapterView<Adapter>
int left = -(v.getLeft() + mXScroll + remainingX);
int top = -(v.getTop() + mYScroll + remainingY);
// docWidth/Height are the width/height of the scaled document e.g. 2000x3000
- int docWidth = v.getMeasuredWidth();
int docHeight = v.getMeasuredHeight();
int xOffset, yOffset;