summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-03-26 19:29:41 +0900
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-03-30 09:23:50 +0200
commitba93e70c9f3a70ca5644c30b8ed423db73ac52d7 (patch)
tree13a3e17ba53cf68a9fb1ddeba0e90c3915853ff1 /android
parent2f6c4d99371bdcc82efd0981029415369c3803cd (diff)
android: fix handle and selection behaviour, clean-up
Change-Id: I1f4404b1beb8dc3d5f64c21443c8e50cefe6fc63
Diffstat (limited to 'android')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionCanvasElement.java87
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionHandleCanvasElement.java55
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/overlay/TextCursorView.java10
3 files changed, 110 insertions, 42 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionCanvasElement.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionCanvasElement.java
index 39b2fe0e38a8..909d8080a09e 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionCanvasElement.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionCanvasElement.java
@@ -9,6 +9,7 @@
package org.libreoffice.canvas;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.RectF;
@@ -16,12 +17,14 @@ import android.graphics.RectF;
import org.libreoffice.LOKitShell;
import org.mozilla.gecko.gfx.LayerView;
+import static org.libreoffice.canvas.GraphicSelectionHandleCanvasElement.HandlePosition;
+
/**
* This class is responsible to draw and reposition the selection
* rectangle.
*/
public class GraphicSelectionCanvasElement {
- private final Paint mGraphicSelectionPaint;
+ private final Paint mPaint;
public RectF mRectangle = new RectF();
public RectF mScaledRectangle = new RectF();
private RectF mDrawRectangle = new RectF();
@@ -31,17 +34,20 @@ public class GraphicSelectionCanvasElement {
private GraphicSelectionHandleCanvasElement mHandles[] = new GraphicSelectionHandleCanvasElement[8];
private GraphicSelectionHandleCanvasElement mDragHandle = null;
- public GraphicSelectionCanvasElement(Paint graphicSelectionPaint) {
- mGraphicSelectionPaint = graphicSelectionPaint;
-
- mHandles[0] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[1] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[2] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[3] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[4] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[5] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[6] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
- mHandles[7] = new GraphicSelectionHandleCanvasElement(mGraphicSelectionPaint);
+ public GraphicSelectionCanvasElement() {
+ mPaint = new Paint();
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setColor(Color.BLACK);
+ mPaint.setStrokeWidth(2);
+
+ mHandles[0] = new GraphicSelectionHandleCanvasElement(HandlePosition.TOP_LEFT);
+ mHandles[1] = new GraphicSelectionHandleCanvasElement(HandlePosition.TOP);
+ mHandles[2] = new GraphicSelectionHandleCanvasElement(HandlePosition.TOP_RIGHT);
+ mHandles[3] = new GraphicSelectionHandleCanvasElement(HandlePosition.LEFT);
+ mHandles[4] = new GraphicSelectionHandleCanvasElement(HandlePosition.RIGHT);
+ mHandles[5] = new GraphicSelectionHandleCanvasElement(HandlePosition.BOTTOM_LEFT);
+ mHandles[6] = new GraphicSelectionHandleCanvasElement(HandlePosition.BOTTOM);
+ mHandles[7] = new GraphicSelectionHandleCanvasElement(HandlePosition.BOTTOM_RIGHT);
}
public void reposition(RectF scaledRectangle) {
@@ -69,13 +75,9 @@ public class GraphicSelectionCanvasElement {
}
public void draw(Canvas canvas) {
- canvas.drawRect(mDrawRectangle, mGraphicSelectionPaint);
+ canvas.drawRect(mDrawRectangle, mPaint);
for (GraphicSelectionHandleCanvasElement handle : mHandles) {
- if (mType == DragType.MOVE || mType == DragType.EXTEND) {
- handle.drawSelected(canvas);
- } else {
- handle.draw(canvas);
- }
+ handle.draw(canvas);
}
}
@@ -85,6 +87,7 @@ public class GraphicSelectionCanvasElement {
for (GraphicSelectionHandleCanvasElement handle : mHandles) {
if (handle.contains(position.x, position.y)) {
mDragHandle = handle;
+ mDragHandle.select();
mType = DragType.EXTEND;
sendGraphicSelectionStart(handle.mPosition);
}
@@ -99,15 +102,47 @@ public class GraphicSelectionCanvasElement {
public void dragging(PointF position) {
if (mType == DragType.MOVE) {
-
float deltaX = position.x - mStartDragPosition.x;
float deltaY = position.y - mStartDragPosition.y;
mDrawRectangle = new RectF(mScaledRectangle);
mDrawRectangle.offset(deltaX, deltaY);
} else if (mType == DragType.EXTEND) {
- mDrawRectangle = new RectF(mScaledRectangle);
- mDrawRectangle.union(position.x, position.y);
+ adaptDrawRectangle(position.x, position.y);
+ }
+ }
+
+ private void adaptDrawRectangle(float x, float y) {
+ mDrawRectangle = new RectF(mScaledRectangle);
+ switch(mDragHandle.getHandlePosition()) {
+ case TOP_LEFT:
+ mDrawRectangle.left = x;
+ mDrawRectangle.top = y;
+ break;
+ case TOP:
+ mDrawRectangle.top = y;
+ break;
+ case TOP_RIGHT:
+ mDrawRectangle.right = x;
+ mDrawRectangle.top = y;
+ break;
+ case LEFT:
+ mDrawRectangle.left = x;
+ break;
+ case RIGHT:
+ mDrawRectangle.right = x;
+ break;
+ case BOTTOM_LEFT:
+ mDrawRectangle.left = x;
+ mDrawRectangle.bottom = y;
+ break;
+ case BOTTOM:
+ mDrawRectangle.bottom = y;
+ break;
+ case BOTTOM_RIGHT:
+ mDrawRectangle.right = x;
+ mDrawRectangle.bottom = y;
+ break;
}
}
@@ -116,6 +151,8 @@ public class GraphicSelectionCanvasElement {
if (mDragHandle != null) {
point.x = mDragHandle.mPosition.x;
point.y = mDragHandle.mPosition.y;
+ mDragHandle.reset();
+ mDragHandle = null;
} else {
point.x = mStartDragPosition.x;
point.y = mStartDragPosition.y;
@@ -127,7 +164,6 @@ public class GraphicSelectionCanvasElement {
sendGraphicSelectionEnd(point);
mDrawRectangle = mScaledRectangle;
- mDragHandle = null;
mType = DragType.NONE;
}
@@ -147,6 +183,13 @@ public class GraphicSelectionCanvasElement {
}
}
+ public void reset() {
+ mDragHandle = null;
+ for (GraphicSelectionHandleCanvasElement handle : mHandles) {
+ handle.reset();
+ }
+ }
+
public enum DragType {
NONE,
MOVE,
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionHandleCanvasElement.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionHandleCanvasElement.java
index 90b9a3887987..62b6bc1c550f 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionHandleCanvasElement.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/GraphicSelectionHandleCanvasElement.java
@@ -20,29 +20,39 @@ import android.graphics.RectF;
* touched.
*/
public class GraphicSelectionHandleCanvasElement {
+ private final HandlePosition mHandlePosition;
public PointF mPosition = new PointF();
private float mRadius = 20.0f;
- private Paint mGraphicHandleFillPaint = new Paint();
- private Paint mGraphicSelectionPaint = new Paint();
- private Paint mGraphicHandleSelectedFillPaint = new Paint();
+ private Paint mStrokePaint = new Paint();
+ private Paint mFillPaint = new Paint();
+ private Paint mSelectedFillPaint = new Paint();
private RectF mHitRect = new RectF();
+ private boolean mSelected = false;
- public GraphicSelectionHandleCanvasElement(Paint graphicSelectionPaint) {
- mGraphicSelectionPaint = graphicSelectionPaint;
+ public GraphicSelectionHandleCanvasElement(HandlePosition position) {
+ mHandlePosition = position;
- mGraphicHandleFillPaint.setStyle(Paint.Style.FILL);
- mGraphicHandleFillPaint.setColor(Color.WHITE);
+ mStrokePaint.setStyle(Paint.Style.STROKE);
+ mStrokePaint.setColor(Color.BLACK);
+ mStrokePaint.setStrokeWidth(3);
- mGraphicHandleSelectedFillPaint.setStyle(Paint.Style.FILL);
- mGraphicHandleSelectedFillPaint.setColor(Color.BLACK);
+ mFillPaint.setStyle(Paint.Style.FILL);
+ mFillPaint.setColor(Color.WHITE);
+
+ mSelectedFillPaint.setStyle(Paint.Style.FILL);
+ mSelectedFillPaint.setColor(Color.BLUE);
}
- public void draw(Canvas canvas) {
- drawFilledCircle(canvas, mPosition.x, mPosition.y, mRadius, mGraphicSelectionPaint, mGraphicHandleFillPaint);
+ public HandlePosition getHandlePosition() {
+ return mHandlePosition;
}
- public void drawSelected(Canvas canvas) {
- drawFilledCircle(canvas, mPosition.x, mPosition.y, mRadius, mGraphicSelectionPaint, mGraphicHandleSelectedFillPaint);
+ public void draw(Canvas canvas) {
+ if (mSelected) {
+ drawFilledCircle(canvas, mPosition.x, mPosition.y, mRadius, mStrokePaint, mSelectedFillPaint);
+ } else {
+ drawFilledCircle(canvas, mPosition.x, mPosition.y, mRadius, mStrokePaint, mFillPaint);
+ }
}
private void drawFilledCircle(Canvas canvas, float x, float y, float radius, Paint strokePaint, Paint fillPaint) {
@@ -62,6 +72,25 @@ public class GraphicSelectionHandleCanvasElement {
public boolean contains(float x, float y) {
return mHitRect.contains(x, y);
}
+
+ public void select() {
+ mSelected = true;
+ }
+
+ public void reset() {
+ mSelected = false;
+ }
+
+ public enum HandlePosition {
+ TOP_LEFT,
+ TOP,
+ TOP_RIGHT,
+ RIGHT,
+ BOTTOM_RIGHT,
+ BOTTOM,
+ BOTTOM_LEFT,
+ LEFT
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ \ No newline at end of file
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/overlay/TextCursorView.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/overlay/TextCursorView.java
index 16d639f82bc9..97230cf2487a 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/overlay/TextCursorView.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/overlay/TextCursorView.java
@@ -49,8 +49,6 @@ public class TextCursorView extends View implements View.OnTouchListener {
private Paint mSelectionPaint = new Paint();
private boolean mSelectionsVisible;
- private Paint mGraphicSelectionPaint = new Paint();
-
private GraphicSelectionCanvasElement mGraphicSelection;
private boolean mGraphicSelectionVisible;
@@ -88,11 +86,7 @@ public class TextCursorView extends View implements View.OnTouchListener {
mSelectionPaint.setAlpha(50);
mSelectionsVisible = false;
- mGraphicSelectionPaint.setStyle(Paint.Style.STROKE);
- mGraphicSelectionPaint.setColor(Color.BLACK);
- mGraphicSelectionPaint.setStrokeWidth(2);
-
- mGraphicSelection = new GraphicSelectionCanvasElement(mGraphicSelectionPaint);
+ mGraphicSelection = new GraphicSelectionCanvasElement();
mGraphicSelectionVisible = false;
@@ -211,6 +205,8 @@ public class TextCursorView extends View implements View.OnTouchListener {
public void showGraphicSelection() {
mGraphicSelectionVisible = true;
+ mGraphicSelectionMove = false;
+ mGraphicSelection.reset();
invalidate();
}