Kaydet (Commit) 86548b6b authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl Kaydeden (comit) Miklos Vajna

android: move graphic selection, use a touch event to transmit

Initiali implementation moving of graphic selection in
TextCursorView. Transmit start and end coordinates of the move
using a touch event with a special type "GraphicSelectionStart"
and "GraphicSelectionEnd" set.

In LOKitThread process the event and delegate the request to the
TileProvider (setGraphicSelectionStart/setGraphicSelectionEnd).

Change-Id: Iccceeb3d4de2fc1761b23fc5ede99d00d5e803aa
üst b0537786
...@@ -304,10 +304,14 @@ public class LOKitThread extends Thread { ...@@ -304,10 +304,14 @@ public class LOKitThread extends Thread {
mTileProvider.mouseButtonUp(documentCoordinate, 1); mTileProvider.mouseButtonUp(documentCoordinate, 1);
mTileProvider.mouseButtonDown(documentCoordinate, 2); mTileProvider.mouseButtonDown(documentCoordinate, 2);
mTileProvider.mouseButtonUp(documentCoordinate, 2); mTileProvider.mouseButtonUp(documentCoordinate, 2);
} else { // "SingleTap" } else if (touchType.equals("SingleTap")) {
mInvalidationHandler.changeStateTo(InvalidationHandler.OverlayState.TRANSITION); mInvalidationHandler.changeStateTo(InvalidationHandler.OverlayState.TRANSITION);
mTileProvider.mouseButtonDown(documentCoordinate, 1); mTileProvider.mouseButtonDown(documentCoordinate, 1);
mTileProvider.mouseButtonUp(documentCoordinate, 1); mTileProvider.mouseButtonUp(documentCoordinate, 1);
} else if (touchType.equals("GraphicSelectionStart")) {
mTileProvider.setGraphicSelectionStart(documentCoordinate);
} else if (touchType.equals("GraphicSelectionEnd")) {
mTileProvider.setGraphicSelectionEnd(documentCoordinate);
} }
} }
......
...@@ -12,10 +12,12 @@ import android.content.Context; ...@@ -12,10 +12,12 @@ import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.RectF; import android.graphics.RectF;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
...@@ -29,7 +31,7 @@ import java.util.List; ...@@ -29,7 +31,7 @@ import java.util.List;
/** /**
* Text cursor view responsible to show the cursor drawable on the screen. * Text cursor view responsible to show the cursor drawable on the screen.
*/ */
public class TextCursorView extends View { public class TextCursorView extends View implements View.OnTouchListener {
private static final String LOGTAG = TextCursorView.class.getSimpleName(); private static final String LOGTAG = TextCursorView.class.getSimpleName();
private static final float CURSOR_WIDTH = 2f; private static final float CURSOR_WIDTH = 2f;
...@@ -51,6 +53,10 @@ public class TextCursorView extends View { ...@@ -51,6 +53,10 @@ public class TextCursorView extends View {
private Paint mGraphicHandleFillPaint = new Paint(); private Paint mGraphicHandleFillPaint = new Paint();
private float mRadius = 20.0f; private float mRadius = 20.0f;
private boolean mGraphicSelectionVisible; private boolean mGraphicSelectionVisible;
private PointF mTouchStart = new PointF();
private PointF mDeltaPoint = new PointF();
private boolean mGraphicSelectionMove = false;
private LayerView mLayerView;
public TextCursorView(Context context) { public TextCursorView(Context context) {
super(context); super(context);
...@@ -67,9 +73,12 @@ public class TextCursorView extends View { ...@@ -67,9 +73,12 @@ public class TextCursorView extends View {
initialize(); initialize();
} }
/**
* Initialize the selection and cursor view.
*/
private void initialize() { private void initialize() {
if (!mInitialized) { if (!mInitialized) {
postDelayed(cursorAnimation, 500); setOnTouchListener(this);
mCursorPaint.setColor(Color.BLACK); mCursorPaint.setColor(Color.BLACK);
mCursorPaint.setAlpha(0xFF); mCursorPaint.setAlpha(0xFF);
...@@ -87,6 +96,8 @@ public class TextCursorView extends View { ...@@ -87,6 +96,8 @@ public class TextCursorView extends View {
mGraphicHandleFillPaint.setColor(Color.WHITE); mGraphicHandleFillPaint.setColor(Color.WHITE);
mGraphicSelectionVisible = false; mGraphicSelectionVisible = false;
postDelayed(cursorAnimation, 500);
mInitialized = true; mInitialized = true;
} }
} }
...@@ -171,6 +182,12 @@ public class TextCursorView extends View { ...@@ -171,6 +182,12 @@ public class TextCursorView extends View {
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicHandleFillPaint); canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicHandleFillPaint);
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicSelectionPaint); canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicSelectionPaint);
if (mGraphicSelectionMove) {
RectF one = new RectF(mGraphicScaledSelection);
one.offset(mDeltaPoint.x, mDeltaPoint.y);
canvas.drawRect(one, mGraphicSelectionPaint);
}
} }
} }
...@@ -213,6 +230,54 @@ public class TextCursorView extends View { ...@@ -213,6 +230,54 @@ public class TextCursorView extends View {
mGraphicSelectionVisible = false; mGraphicSelectionVisible = false;
invalidate(); invalidate();
} }
@Override
public boolean onTouch(View view, MotionEvent event) {
if (mLayerView == null) {
mLayerView = LOKitShell.getLayerView();
if (mLayerView == null) {
return false;
}
}
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN: {
mTouchStart.x = event.getX();
mTouchStart.y = event.getY();
if (mGraphicSelectionVisible && mGraphicScaledSelection.contains(mTouchStart.x, mTouchStart.y)) {
mGraphicSelectionMove = true;
PointF documentPoint = mLayerView.getLayerClient().convertViewPointToLayerPoint(mTouchStart);
Log.i(LOGTAG, "Down: " + documentPoint);
LOKitShell.sendTouchEvent("GraphicSelectionStart", documentPoint);
return true;
}
}
case MotionEvent.ACTION_UP: {
if (mGraphicSelectionMove) {
mGraphicSelectionMove = false;
mTouchStart.offset(mDeltaPoint.x, mDeltaPoint.y);
PointF documentPoint = mLayerView.getLayerClient().convertViewPointToLayerPoint(mTouchStart);
Log.i(LOGTAG, "Up: " + documentPoint);
LOKitShell.sendTouchEvent("GraphicSelectionEnd", documentPoint);
mTouchStart.x = 0.0f;
mTouchStart.y = 0.0f;
mDeltaPoint.x = 0.0f;
mDeltaPoint.y = 0.0f;
invalidate();
return true;
}
}
case MotionEvent.ACTION_MOVE: {
if (mGraphicSelectionMove) {
mDeltaPoint.x = event.getX() - mTouchStart.x;
mDeltaPoint.y = event.getY() - mTouchStart.y;
invalidate();
return true;
}
}
}
return false;
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment