diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java b/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java deleted file mode 100644 index 8ceb37599..000000000 --- a/src/com/android/gallery3d/filtershow/imageshow/EclipseControl.java +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.gallery3d.filtershow.imageshow; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.RadialGradient; -import android.graphics.RectF; -import android.graphics.Shader; - -import com.android.gallery3d.R; - -public class EclipseControl { - private float mCenterX = Float.NaN; - private float mCenterY = 0; - private float mRadiusX = 200; - private float mRadiusY = 300; - private static int MIN_TOUCH_DIST = 80;// should be a resource & in dips - - private float[] handlex = new float[9]; - private float[] handley = new float[9]; - private int mSliderColor; - private int mCenterDotSize = 40; - private float mDownX; - private float mDownY; - private float mDownCenterX; - private float mDownCenterY; - private float mDownRadiusX; - private float mDownRadiusY; - private Matrix mScrToImg; - - private boolean mShowReshapeHandles = true; - public final static int HAN_CENTER = 0; - public final static int HAN_NORTH = 7; - public final static int HAN_NE = 8; - public final static int HAN_EAST = 1; - public final static int HAN_SE = 2; - public final static int HAN_SOUTH = 3; - public final static int HAN_SW = 4; - public final static int HAN_WEST = 5; - public final static int HAN_NW = 6; - - public EclipseControl(Context context) { - mSliderColor = Color.WHITE; - } - - public void setRadius(float x, float y) { - mRadiusX = x; - mRadiusY = y; - } - - public void setCenter(float x, float y) { - mCenterX = x; - mCenterY = y; - } - - public int getCloseHandle(float x, float y) { - float min = Float.MAX_VALUE; - int handle = -1; - for (int i = 0; i < handlex.length; i++) { - float dx = handlex[i] - x; - float dy = handley[i] - y; - float dist = dx * dx + dy * dy; - if (dist < min) { - min = dist; - handle = i; - } - } - - if (min < MIN_TOUCH_DIST * MIN_TOUCH_DIST) { - return handle; - } - for (int i = 0; i < handlex.length; i++) { - float dx = handlex[i] - x; - float dy = handley[i] - y; - float dist = (float) Math.sqrt(dx * dx + dy * dy); - } - - return -1; - } - - public void setScrToImageMatrix(Matrix scrToImg) { - mScrToImg = scrToImg; - } - - public void actionDown(float x, float y, Oval oval) { - float[] point = new float[] { - x, y }; - mScrToImg.mapPoints(point); - mDownX = point[0]; - mDownY = point[1]; - mDownCenterX = oval.getCenterX(); - mDownCenterY = oval.getCenterY(); - mDownRadiusX = oval.getRadiusX(); - mDownRadiusY = oval.getRadiusY(); - } - - public void actionMove(int handle, float x, float y, Oval oval) { - float[] point = new float[] { - x, y }; - mScrToImg.mapPoints(point); - x = point[0]; - y = point[1]; - - // Test if the matrix is swapping x and y - point[0] = 0; - point[1] = 1; - mScrToImg.mapVectors(point); - boolean swapxy = (point[0] > 0.0f); - - int sign = 1; - switch (handle) { - case HAN_CENTER: - float ctrdx = mDownX - mDownCenterX; - float ctrdy = mDownY - mDownCenterY; - oval.setCenter(x - ctrdx, y - ctrdy); - // setRepresentation(mVignetteRep); - break; - case HAN_NORTH: - sign = -1; - case HAN_SOUTH: - if (swapxy) { - float raddx = mDownRadiusY - Math.abs(mDownX - mDownCenterY); - oval.setRadiusY(Math.abs(x - oval.getCenterY() + sign * raddx)); - } else { - float raddy = mDownRadiusY - Math.abs(mDownY - mDownCenterY); - oval.setRadiusY(Math.abs(y - oval.getCenterY() + sign * raddy)); - } - break; - case HAN_EAST: - sign = -1; - case HAN_WEST: - if (swapxy) { - float raddy = mDownRadiusX - Math.abs(mDownY - mDownCenterX); - oval.setRadiusX(Math.abs(y - oval.getCenterX() + sign * raddy)); - } else { - float raddx = mDownRadiusX - Math.abs(mDownX - mDownCenterX); - oval.setRadiusX(Math.abs(x - oval.getCenterX() - sign * raddx)); - } - break; - case HAN_SE: - case HAN_NE: - case HAN_SW: - case HAN_NW: - float sin45 = (float) Math.sin(45); - float dr = (mDownRadiusX + mDownRadiusY) * sin45; - float ctr_dx = mDownX - mDownCenterX; - float ctr_dy = mDownY - mDownCenterY; - float downRad = Math.abs(ctr_dx) + Math.abs(ctr_dy) - dr; - float rx = oval.getRadiusX(); - float ry = oval.getRadiusY(); - float r = (Math.abs(rx) + Math.abs(ry)) * sin45; - float dx = x - oval.getCenterX(); - float dy = y - oval.getCenterY(); - float nr = Math.abs(Math.abs(dx) + Math.abs(dy) - downRad); - oval.setRadius(rx * nr / r, ry * nr / r); - - break; - } - } - - public void paintGrayPoint(Canvas canvas, float x, float y) { - if (x == Float.NaN) { - return; - } - - Paint paint = new Paint(); - - paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.BLUE); - int[] colors3 = new int[] { - Color.GRAY, Color.LTGRAY, 0x66000000, 0 }; - RadialGradient g = new RadialGradient(x, y, mCenterDotSize, colors3, new float[] { - 0, .3f, .31f, 1 }, Shader.TileMode.CLAMP); - paint.setShader(g); - canvas.drawCircle(x, y, mCenterDotSize, paint); - } - - public void paintPoint(Canvas canvas, float x, float y) { - if (x == Float.NaN) { - return; - } - - Paint paint = new Paint(); - - paint.setStyle(Paint.Style.FILL); - paint.setColor(Color.BLUE); - int[] colors3 = new int[] { - mSliderColor, mSliderColor, 0x66000000, 0 }; - RadialGradient g = new RadialGradient(x, y, mCenterDotSize, colors3, new float[] { - 0, .3f, .31f, 1 }, Shader.TileMode.CLAMP); - paint.setShader(g); - canvas.drawCircle(x, y, mCenterDotSize, paint); - } - - void paintRadius(Canvas canvas, float cx, float cy, float rx, float ry) { - if (cx == Float.NaN) { - return; - } - int mSliderColor = 0xFF33B5E5; - Paint paint = new Paint(); - RectF rect = new RectF(cx - rx, cy - ry, cx + rx, cy + ry); - paint.setAntiAlias(true); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeWidth(6); - paint.setColor(Color.BLACK); - paintOvallines(canvas, rect, paint, cx, cy, rx, ry); - - paint.setStrokeWidth(3); - paint.setColor(Color.WHITE); - paintOvallines(canvas, rect, paint, cx, cy, rx, ry); - } - - public void paintOvallines( - Canvas canvas, RectF rect, Paint paint, float cx, float cy, float rx, float ry) { - canvas.drawOval(rect, paint); - float da = 4; - float arclen = da + da; - if (mShowReshapeHandles) { - paint.setStyle(Paint.Style.STROKE); - - for (int i = 0; i < 361; i += 90) { - float dx = rx + 10; - float dy = ry + 10; - rect.left = cx - dx; - rect.top = cy - dy; - rect.right = cx + dx; - rect.bottom = cy + dy; - canvas.drawArc(rect, i - da, arclen, false, paint); - dx = rx - 10; - dy = ry - 10; - rect.left = cx - dx; - rect.top = cy - dy; - rect.right = cx + dx; - rect.bottom = cy + dy; - canvas.drawArc(rect, i - da, arclen, false, paint); - } - } - da *= 2; - paint.setStyle(Paint.Style.FILL); - - for (int i = 45; i < 361; i += 90) { - double angle = Math.PI * i / 180.; - float x = cx + (float) (rx * Math.cos(angle)); - float y = cy + (float) (ry * Math.sin(angle)); - canvas.drawRect(x - da, y - da, x + da, y + da, paint); - } - paint.setStyle(Paint.Style.STROKE); - rect.left = cx - rx; - rect.top = cy - ry; - rect.right = cx + rx; - rect.bottom = cy + ry; - } - - public void fillHandles(Canvas canvas, float cx, float cy, float rx, float ry) { - handlex[0] = cx; - handley[0] = cy; - int k = 1; - - for (int i = 0; i < 360; i += 45) { - double angle = Math.PI * i / 180.; - - float x = cx + (float) (rx * Math.cos(angle)); - float y = cy + (float) (ry * Math.sin(angle)); - handlex[k] = x; - handley[k] = y; - - k++; - } - } - - public void draw(Canvas canvas) { - paintRadius(canvas, mCenterX, mCenterY, mRadiusX, mRadiusY); - fillHandles(canvas, mCenterX, mCenterY, mRadiusX, mRadiusY); - paintPoint(canvas, mCenterX, mCenterY); - } - - public boolean isUndefined() { - return Float.isNaN(mCenterX); - } - - public void setShowReshapeHandles(boolean showReshapeHandles) { - this.mShowReshapeHandles = showReshapeHandles; - } -} |