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