diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-03-26 19:29:41 +0900 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-03-30 09:23:50 +0200 |
commit | ba93e70c9f3a70ca5644c30b8ed423db73ac52d7 (patch) | |
tree | 13a3e17ba53cf68a9fb1ddeba0e90c3915853ff1 /android | |
parent | 2f6c4d99371bdcc82efd0981029415369c3803cd (diff) |
android: fix handle and selection behaviour, clean-up
Change-Id: I1f4404b1beb8dc3d5f64c21443c8e50cefe6fc63
Diffstat (limited to 'android')
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(); } |