summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2013-06-14 11:08:39 +0100
committerRobin Watts <robin.watts@artifex.com>2013-06-17 15:07:08 +0100
commitb695c87abcdbe0ddc35c5e3a7ee8f5f58ee577f1 (patch)
tree31a470c889c88540235d4f70b6e1334249b92fbe /android
parente860f7240878c22d90b086827e58e1e8e055bbf8 (diff)
downloadmupdf-b695c87abcdbe0ddc35c5e3a7ee8f5f58ee577f1.tar.xz
Tweaks to ink annotation for smoothness.
Patch from "andyhan2000" to make the ink annotations smoother.
Diffstat (limited to 'android')
-rw-r--r--android/src/com/artifex/mupdfdemo/MuPDFReaderView.java71
-rw-r--r--android/src/com/artifex/mupdfdemo/PageView.java20
2 files changed, 76 insertions, 15 deletions
diff --git a/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java b/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java
index 3a1b708a..9cab70b7 100644
--- a/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java
+++ b/android/src/com/artifex/mupdfdemo/MuPDFReaderView.java
@@ -96,13 +96,7 @@ public class MuPDFReaderView extends ReaderView {
@Override
public boolean onDown(MotionEvent e) {
- switch (mMode) {
- case Drawing:
- MuPDFView pageView = (MuPDFView)getDisplayedView();
- if (pageView != null)
- pageView.startDraw(e.getX(), e.getY());
- break;
- }
+
return super.onDown(e);
}
@@ -119,10 +113,6 @@ public class MuPDFReaderView extends ReaderView {
if (pageView != null)
pageView.selectText(e1.getX(), e1.getY(), e2.getX(), e2.getY());
return true;
- case Drawing:
- if (pageView != null)
- pageView.continueDraw(e2.getX(), e2.getY());
- return true;
default:
return true;
}
@@ -148,12 +138,69 @@ public class MuPDFReaderView extends ReaderView {
}
public boolean onTouchEvent(MotionEvent event) {
- if ((event.getAction() & event.ACTION_MASK) == MotionEvent.ACTION_DOWN)
+
+ if ( mMode == Mode.Drawing )
+ {
+ float x = event.getX();
+ float y = event.getY();
+ switch (event.getAction())
+ {
+ case MotionEvent.ACTION_DOWN:
+ touch_start(x, y);
+ break;
+ case MotionEvent.ACTION_MOVE:
+ touch_move(x, y);
+ break;
+ case MotionEvent.ACTION_UP:
+ touch_up();
+ break;
+ }
+ }
+
+ if ((event.getAction() & event.getActionMasked()) == MotionEvent.ACTION_DOWN)
+ {
tapDisabled = false;
+ }
return super.onTouchEvent(event);
}
+ private float mX, mY;
+
+ private static final float TOUCH_TOLERANCE = 2;
+
+ private void touch_start(float x, float y) {
+
+ MuPDFView pageView = (MuPDFView)getDisplayedView();
+ if (pageView != null)
+ {
+ pageView.startDraw(x, y);
+ }
+ mX = x;
+ mY = y;
+ }
+
+ private void touch_move(float x, float y) {
+
+ float dx = Math.abs(x - mX);
+ float dy = Math.abs(y - mY);
+ if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE)
+ {
+ MuPDFView pageView = (MuPDFView)getDisplayedView();
+ if (pageView != null)
+ {
+ pageView.continueDraw(x, y);
+ }
+ mX = x;
+ mY = y;
+ }
+ }
+
+ private void touch_up() {
+
+ // NOOP
+ }
+
protected void onChildSetup(int i, View v) {
if (SearchTaskResult.get() != null
&& SearchTaskResult.get().pageNumber == i)
diff --git a/android/src/com/artifex/mupdfdemo/PageView.java b/android/src/com/artifex/mupdfdemo/PageView.java
index 14d6b729..200821dd 100644
--- a/android/src/com/artifex/mupdfdemo/PageView.java
+++ b/android/src/com/artifex/mupdfdemo/PageView.java
@@ -364,16 +364,30 @@ public abstract class PageView extends ViewGroup {
if (arc.size() >= 2) {
Iterator<PointF> iit = arc.iterator();
p = iit.next();
- path.moveTo(p.x*scale, p.y*scale);
+ float mX = p.x * scale;
+ float mY = p.y * scale;
+ path.moveTo(mX, mY);
while (iit.hasNext()) {
p = iit.next();
- path.lineTo(p.x*scale, p.y*scale);
+ float x = p.x * scale;
+ float y = p.y * scale;
+ path.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
+ mX = x;
+ mY = y;
}
+ path.lineTo(mX, mY);
}
}
+
+ paint.setAntiAlias(true);
+ paint.setDither(true);
+ paint.setStrokeJoin(Paint.Join.ROUND);
+ paint.setStrokeCap(Paint.Cap.ROUND);
+
paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(INK_THICKNESS*scale);
+ paint.setStrokeWidth(INK_THICKNESS * scale);
paint.setColor(INK_COLOR);
+
canvas.drawPath(path, paint);
}
}