1a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford/*
2e1d875757bbe6634d7224c4f759d904688de4013nicolasroard * Copyright (C) 2013 The Android Open Source Project
3a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford *
4a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * Licensed under the Apache License, Version 2.0 (the "License");
5a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * you may not use this file except in compliance with the License.
6a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * You may obtain a copy of the License at
7a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford *
8a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford *      http://www.apache.org/licenses/LICENSE-2.0
9a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford *
10a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * Unless required by applicable law or agreed to in writing, software
11a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * distributed under the License is distributed on an "AS IS" BASIS,
12a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * See the License for the specific language governing permissions and
14a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford * limitations under the License.
15a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford */
16a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
17a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordpackage com.android.gallery3d.filtershow.imageshow;
18a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
19a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport android.content.Context;
20a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport android.graphics.Canvas;
21a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport android.graphics.Matrix;
22a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport android.util.AttributeSet;
23a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport android.view.MotionEvent;
24a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
25a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport com.android.gallery3d.filtershow.editors.EditorVignette;
26a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordimport com.android.gallery3d.filtershow.filters.FilterVignetteRepresentation;
27a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
28a93d5ee9c409e2328dcbe2326591436f8ac23146John Hofordpublic class ImageVignette extends ImageShow {
29a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    private static final String LOGTAG = "ImageVignette";
30a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
31a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    private FilterVignetteRepresentation mVignetteRep;
32a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    private EditorVignette mEditorVignette;
33708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford    private OvalSpaceAdapter mScreenOval = new OvalSpaceAdapter();
34a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    private int mActiveHandle = -1;
35a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
36a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    EclipseControl mElipse;
37a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
38a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public ImageVignette(Context context) {
39a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        super(context);
40a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        mElipse = new EclipseControl(context);
41a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
42a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
43a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public ImageVignette(Context context, AttributeSet attrs) {
44a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        super(context, attrs);
45a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        mElipse = new EclipseControl(context);
46a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
47a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
48708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford    static class OvalSpaceAdapter implements Oval {
49708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        private Oval mOval;
50708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        Matrix mToScr;
51708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        Matrix mToImage;
52708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        int mImgWidth;
53708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        int mImgHeight;
54708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        float[] mTmp = new float[2];
55708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        float mTmpRadiusX;
56708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        float mTmpRadiusY;
57708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
58708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setImageOval(Oval oval) {
59708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval = oval;
60708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
61708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
62708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setTransform(Matrix toScr, Matrix toImage, int imgWidth, int imgHeight) {
63708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToScr = toScr;
64708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToImage = toImage;
65708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mImgWidth = imgWidth;
66708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mImgHeight = imgHeight;
675169137f59114a9549dd056ce4bf843b9b421c4aJohn Hoford            mTmpRadiusX = getRadiusX();
685169137f59114a9549dd056ce4bf843b9b421c4aJohn Hoford            mTmpRadiusY = getRadiusY();
69708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
70708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
71708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
72708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setCenter(float x, float y) {
73708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = x;
74708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = y;
75708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToImage.mapPoints(mTmp);
76708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setCenter(mTmp[0] / mImgWidth, mTmp[1] / mImgHeight);
77708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
78708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
79708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
80708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setRadius(float w, float h) {
81708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mTmpRadiusX = w;
82708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mTmpRadiusY = h;
83708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToImage.mapVectors(mTmp);
84708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setRadius(mTmp[0] / mImgWidth, mTmp[1] / mImgHeight);
85708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
86708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
87708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
88708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public float getCenterX() {
89708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mOval.getCenterX() * mImgWidth;
90708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mOval.getCenterY() * mImgHeight;
91708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToScr.mapPoints(mTmp);
92708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
93708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            return mTmp[0];
94708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
95708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
96708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
97708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public float getCenterY() {
98708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mOval.getCenterX() * mImgWidth;
99708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mOval.getCenterY() * mImgHeight;
100708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToScr.mapPoints(mTmp);
101708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            return mTmp[1];
102708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
103708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
104708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
105708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public float getRadiusX() {
106708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mOval.getRadiusX() * mImgWidth;
107708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mOval.getRadiusY() * mImgHeight;
108708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToScr.mapVectors(mTmp);
109708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            return Math.abs(mTmp[0]);
110708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
111708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
112708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
113708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public float getRadiusY() {
114708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mOval.getRadiusX() * mImgWidth;
115708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mOval.getRadiusY() * mImgHeight;
116708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToScr.mapVectors(mTmp);
117708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            return Math.abs(mTmp[1]);
118708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
119708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
120708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
121708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setRadiusY(float y) {
122708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mTmpRadiusX;
123708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mTmpRadiusY = y;
124708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToImage.mapVectors(mTmp);
125708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setRadiusX(mTmp[0] / mImgWidth);
126708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setRadiusY(mTmp[1] / mImgHeight);
127708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
128708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
129708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        @Override
130708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        public void setRadiusX(float x) {
131708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[0] = mTmpRadiusX = x;
132708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mTmp[1] = mTmpRadiusY;
133708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mToImage.mapVectors(mTmp);
134708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setRadiusX(mTmp[0] / mImgWidth);
135708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford            mOval.setRadiusY(mTmp[1] / mImgHeight);
136708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        }
137708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford    }
138708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
139a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    @Override
140a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public boolean onTouchEvent(MotionEvent event) {
14137f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        int w = MasterImage.getImage().getOriginalBounds().width();
14237f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        int h = MasterImage.getImage().getOriginalBounds().height();
143a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        int mask = event.getActionMasked();
1442fc7efdcd75279649091471dda3ee600db25a995John Hoford        if (mActiveHandle == -1) {
1452fc7efdcd75279649091471dda3ee600db25a995John Hoford            if (MotionEvent.ACTION_DOWN != mask) {
1462fc7efdcd75279649091471dda3ee600db25a995John Hoford                return super.onTouchEvent(event);
1472fc7efdcd75279649091471dda3ee600db25a995John Hoford            }
1482fc7efdcd75279649091471dda3ee600db25a995John Hoford            if (event.getPointerCount() == 1) {
1492fc7efdcd75279649091471dda3ee600db25a995John Hoford                mActiveHandle = mElipse.getCloseHandle(event.getX(), event.getY());
1502fc7efdcd75279649091471dda3ee600db25a995John Hoford            }
1512fc7efdcd75279649091471dda3ee600db25a995John Hoford            if (mActiveHandle == -1) {
1522fc7efdcd75279649091471dda3ee600db25a995John Hoford                return super.onTouchEvent(event);
1532fc7efdcd75279649091471dda3ee600db25a995John Hoford            }
1542fc7efdcd75279649091471dda3ee600db25a995John Hoford        } else {
1552fc7efdcd75279649091471dda3ee600db25a995John Hoford            switch (mask) {
1562fc7efdcd75279649091471dda3ee600db25a995John Hoford                case MotionEvent.ACTION_UP:
1572fc7efdcd75279649091471dda3ee600db25a995John Hoford                    mActiveHandle = -1;
1582fc7efdcd75279649091471dda3ee600db25a995John Hoford                    break;
1592fc7efdcd75279649091471dda3ee600db25a995John Hoford                case MotionEvent.ACTION_DOWN:
1602fc7efdcd75279649091471dda3ee600db25a995John Hoford                    break;
1612fc7efdcd75279649091471dda3ee600db25a995John Hoford            }
162a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        }
163a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        float x = event.getX();
164a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        float y = event.getY();
165a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
166708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mElipse.setScrImageInfo(new Matrix(),
1673e3e9e219a76e8ef4fb56b8ef4c6e0bac06c6cd1John Hoford                MasterImage.getImage().getOriginalBounds());
168a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
1697097d5173dbbddae315d13251572feb910954a70nicolasroard        boolean didComputeEllipses = false;
170a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        switch (mask) {
171a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford            case (MotionEvent.ACTION_DOWN):
172708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford                mElipse.actionDown(x, y, mScreenOval);
173a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford                break;
174a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford            case (MotionEvent.ACTION_UP):
175a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford            case (MotionEvent.ACTION_MOVE):
176708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford
177708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford                mElipse.actionMove(mActiveHandle, x, y, mScreenOval);
178a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford                setRepresentation(mVignetteRep);
1797097d5173dbbddae315d13251572feb910954a70nicolasroard                didComputeEllipses = true;
180a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford                break;
181a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        }
1827097d5173dbbddae315d13251572feb910954a70nicolasroard        if (!didComputeEllipses) {
1837097d5173dbbddae315d13251572feb910954a70nicolasroard            computeEllipses();
1847097d5173dbbddae315d13251572feb910954a70nicolasroard        }
185a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        invalidate();
186a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        return true;
187a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
188a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
189a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public void setRepresentation(FilterVignetteRepresentation vignetteRep) {
190a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        mVignetteRep = vignetteRep;
191708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mScreenOval.setImageOval(mVignetteRep);
192e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        computeEllipses();
193e1d875757bbe6634d7224c4f759d904688de4013nicolasroard    }
194e1d875757bbe6634d7224c4f759d904688de4013nicolasroard
195e1d875757bbe6634d7224c4f759d904688de4013nicolasroard    public void computeEllipses() {
196e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        if (mVignetteRep == null) {
197e1d875757bbe6634d7224c4f759d904688de4013nicolasroard            return;
198e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        }
19937f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        float w = MasterImage.getImage().getOriginalBounds().width();
20037f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        float h = MasterImage.getImage().getOriginalBounds().height();
201a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        Matrix toImg = getScreenToImageMatrix(false);
202a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        Matrix toScr = new Matrix();
203a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        toImg.invert(toScr);
204708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mScreenOval.setTransform(toScr, toImg, (int) w, (int) h);
205a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
206708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mElipse.setCenter(mScreenOval.getCenterX(), mScreenOval.getCenterY());
207708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mElipse.setRadius(mScreenOval.getRadiusX(), mScreenOval.getRadiusY());
208a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
209e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        mEditorVignette.commitLocalRepresentation();
210a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
211a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
212a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public void setEditor(EditorVignette editorVignette) {
213a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        mEditorVignette = editorVignette;
214a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
215a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
216a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    @Override
217e1d875757bbe6634d7224c4f759d904688de4013nicolasroard    public void onSizeChanged(int w, int h, int oldw, int oldh) {
218708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        super.onSizeChanged(w, h, oldw, oldh);
219e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        computeEllipses();
220e1d875757bbe6634d7224c4f759d904688de4013nicolasroard    }
221e1d875757bbe6634d7224c4f759d904688de4013nicolasroard
222e1d875757bbe6634d7224c4f759d904688de4013nicolasroard    @Override
223a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    public void onDraw(Canvas canvas) {
224a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        super.onDraw(canvas);
225e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        if (mVignetteRep == null) {
226e1d875757bbe6634d7224c4f759d904688de4013nicolasroard            return;
227e1d875757bbe6634d7224c4f759d904688de4013nicolasroard        }
22837f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        float w = MasterImage.getImage().getOriginalBounds().width();
22937f8e432f4eb94d0ab483bfdc2a1fa024508e85fJohn Hoford        float h = MasterImage.getImage().getOriginalBounds().height();
230fc7d46515db7a3a50f7416c2462030609391cf95John Hoford        Matrix toImg = getScreenToImageMatrix(false);
231fc7d46515db7a3a50f7416c2462030609391cf95John Hoford        Matrix toScr = new Matrix();
232fc7d46515db7a3a50f7416c2462030609391cf95John Hoford        toImg.invert(toScr);
233708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mScreenOval.setTransform(toScr, toImg, (int) w, (int) h);
234708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mElipse.setCenter(mScreenOval.getCenterX(), mScreenOval.getCenterY());
235708753f5a087eb759ef48fe9b41ef2274d2e88a7John Hoford        mElipse.setRadius(mScreenOval.getRadiusX(), mScreenOval.getRadiusY());
236fc7d46515db7a3a50f7416c2462030609391cf95John Hoford
237a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford        mElipse.draw(canvas);
238a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford    }
239a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford
240a93d5ee9c409e2328dcbe2326591436f8ac23146John Hoford}
241