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

android: add graphic selection to TextCursorLayer{View}

Change-Id: I13d26dd8b38d0b6817f3d0dbcb8a063fef559c2a
üst a14d2925
......@@ -107,4 +107,28 @@ public class TextCursorLayer extends Layer {
}
});
}
public void showGraphicSelection() {
LOKitShell.getMainHandler().post(new Runnable() {
public void run() {
mCursorView.showGraphicSelection();
}
});
}
public void hideGraphicSelection() {
LOKitShell.getMainHandler().post(new Runnable() {
public void run() {
mCursorView.hideGraphicSelection();
}
});
}
public void changeGraphicSelection(final RectF rectangle) {
LOKitShell.getMainHandler().post(new Runnable() {
public void run() {
mCursorView.changeGraphicSelection(rectangle);
}
});
}
}
......@@ -28,16 +28,22 @@ public class TextCursorView extends View {
private boolean mInitialized = false;
private RectF mCursorPosition = new RectF();
private RectF mCursorScaledPosition = new RectF();
private Paint mCursorPaint = new Paint();
private int mCursorAlpha = 0;
private boolean mCursorVisible;
private List<RectF> mSelections = new ArrayList<RectF>();
private List<RectF> mScaledSelections = new ArrayList<RectF>();
private Paint mCursorPaint = new Paint();
private Paint mSelectionPaint = new Paint();
private boolean mCursorVisible;
private boolean mSelectionsVisible;
private RectF mGraphicSelection = new RectF();
private RectF mGraphicScaledSelection = new RectF();
private Paint mGraphicSelectionPaint = new Paint();
private Paint mGraphicHandleFillPaint = new Paint();
private float mRadius = 20.0f;
private boolean mGraphicSelectionVisible;
public TextCursorView(Context context) {
super(context);
initialize();
......@@ -59,13 +65,20 @@ public class TextCursorView extends View {
mCursorPaint.setColor(Color.BLACK);
mCursorPaint.setAlpha(0xFF);
mCursorVisible = false;
mSelectionPaint.setColor(Color.BLUE);
mSelectionPaint.setAlpha(50);
mSelectionsVisible = false;
mGraphicSelectionPaint.setStyle(Paint.Style.STROKE);
mGraphicSelectionPaint.setColor(Color.BLACK);
mGraphicSelectionPaint.setStrokeWidth(2);
mGraphicHandleFillPaint.setStyle(Paint.Style.FILL);
mGraphicHandleFillPaint.setColor(Color.WHITE);
mGraphicSelectionVisible = false;
mInitialized = true;
}
}
......@@ -78,6 +91,7 @@ public class TextCursorView extends View {
}
mCursorPosition = position;
ImmutableViewportMetrics metrics = layerView.getViewportMetrics();
repositionWithViewport(metrics.viewportRectLeft, metrics.viewportRectTop, metrics.zoomFactor);
}
......@@ -95,6 +109,19 @@ public class TextCursorView extends View {
repositionWithViewport(metrics.viewportRectLeft, metrics.viewportRectTop, metrics.zoomFactor);
}
public void changeGraphicSelection(RectF rectangle) {
LayerView layerView = LOKitShell.getLayerView();
if (layerView == null) {
Log.e(LOGTAG, "Can't position selections because layerView is null");
return;
}
mGraphicSelection = rectangle;
ImmutableViewportMetrics metrics = layerView.getViewportMetrics();
repositionWithViewport(metrics.viewportRectLeft, metrics.viewportRectTop, metrics.zoomFactor);
}
public void repositionWithViewport(float x, float y, float zoom) {
mCursorScaledPosition = RectUtils.scale(mCursorPosition, zoom);
mCursorScaledPosition.offset(-x, -y);
......@@ -106,6 +133,9 @@ public class TextCursorView extends View {
scaledSelection.offset(-x, -y);
mScaledSelections.add(scaledSelection);
}
mGraphicScaledSelection = RectUtils.scale(mGraphicSelection, zoom);
mGraphicScaledSelection.offset(-x, -y);
invalidate();
}
......@@ -120,6 +150,20 @@ public class TextCursorView extends View {
canvas.drawRect(selection, mSelectionPaint);
}
}
if (mGraphicSelectionVisible) {
canvas.drawRect(mGraphicScaledSelection, mGraphicSelectionPaint);
canvas.drawCircle(mGraphicScaledSelection.left, mGraphicScaledSelection.top, mRadius, mGraphicHandleFillPaint);
canvas.drawCircle(mGraphicScaledSelection.left, mGraphicScaledSelection.top, mRadius, mGraphicSelectionPaint);
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.top, mRadius, mGraphicHandleFillPaint);
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.top, mRadius, mGraphicSelectionPaint);
canvas.drawCircle(mGraphicScaledSelection.left, mGraphicScaledSelection.bottom, mRadius, mGraphicHandleFillPaint);
canvas.drawCircle(mGraphicScaledSelection.left, mGraphicScaledSelection.bottom, mRadius, mGraphicSelectionPaint);
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicHandleFillPaint);
canvas.drawCircle(mGraphicScaledSelection.right, mGraphicScaledSelection.bottom, mRadius, mGraphicSelectionPaint);
}
}
private Runnable cursorAnimation = new Runnable() {
......@@ -151,4 +195,14 @@ public class TextCursorView extends View {
mSelectionsVisible = false;
invalidate();
}
public void showGraphicSelection() {
mGraphicSelectionVisible = true;
invalidate();
}
public void hideGraphicSelection() {
mGraphicSelectionVisible = false;
invalidate();
}
}
\ No newline at end of file
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