ImageDraw.java revision f4b659334750a5aa75f929d18857a2ab93c9d939
1 2package com.android.gallery3d.filtershow.imageshow; 3 4import android.content.Context; 5import android.graphics.Canvas; 6import android.graphics.Color; 7import android.graphics.Matrix; 8import android.graphics.drawable.Drawable; 9import android.util.AttributeSet; 10import android.view.MotionEvent; 11 12import com.android.gallery3d.filtershow.editors.EditorDraw; 13import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation; 14import com.android.gallery3d.filtershow.filters.ImageFilterDraw; 15 16public class ImageDraw extends ImageShow { 17 18 private static final String LOGTAG = "ImageDraw"; 19 private int mCurrentColor = Color.RED; 20 final static float INITAL_STROKE_RADIUS = 40; 21 private float mCurrentSize = INITAL_STROKE_RADIUS; 22 private byte mType = 0; 23 private FilterDrawRepresentation mFRep; 24 private EditorDraw mEditorDraw; 25 26 public ImageDraw(Context context, AttributeSet attrs) { 27 super(context, attrs); 28 resetParameter(); 29 } 30 31 public ImageDraw(Context context) { 32 super(context); 33 resetParameter(); 34 } 35 36 public void setEditor(EditorDraw editorDraw) { 37 mEditorDraw = editorDraw; 38 } 39 public void setFilterDrawRepresentation(FilterDrawRepresentation fr) { 40 mFRep = fr; 41 } 42 43 public Drawable getIcon(Context context) { 44 45 return null; 46 } 47 48 @Override 49 public void resetParameter() { 50 if (mFRep != null) { 51 mFRep.clear(); 52 } 53 } 54 55 public void setColor(int color) { 56 mCurrentColor = color; 57 } 58 59 public void setSize(int size) { 60 mCurrentSize = size; 61 } 62 63 public void setStyle(byte style) { 64 mType = (byte) (style % ImageFilterDraw.NUMBER_OF_STYLES); 65 } 66 67 public int getStyle() { 68 return mType; 69 } 70 71 public int getSize() { 72 return (int) mCurrentSize; 73 } 74 75 float[] mTmpPoint = new float[2]; // so we do not malloc 76 @Override 77 public boolean onTouchEvent(MotionEvent event) { 78 if (event.getPointerCount() > 1) { 79 boolean ret = super.onTouchEvent(event); 80 if (mFRep.getCurrentDrawing() != null) { 81 mFRep.clearCurrentSection(); 82 mEditorDraw.commitLocalRepresentation(); 83 } 84 return ret; 85 } 86 if (event.getAction() != MotionEvent.ACTION_DOWN) { 87 if (mFRep.getCurrentDrawing() == null) { 88 return super.onTouchEvent(event); 89 } 90 } 91 92 if (event.getAction() == MotionEvent.ACTION_DOWN) { 93 calcScreenMapping(); 94 mTmpPoint[0] = event.getX(); 95 mTmpPoint[1] = event.getY(); 96 mToOrig.mapPoints(mTmpPoint); 97 mFRep.startNewSection( mTmpPoint[0], mTmpPoint[1]); 98 } 99 100 if (event.getAction() == MotionEvent.ACTION_MOVE) { 101 102 int historySize = event.getHistorySize(); 103 for (int h = 0; h < historySize; h++) { 104 int p = 0; 105 { 106 mTmpPoint[0] = event.getHistoricalX(p, h); 107 mTmpPoint[1] = event.getHistoricalY(p, h); 108 mToOrig.mapPoints(mTmpPoint); 109 mFRep.addPoint(mTmpPoint[0], mTmpPoint[1]); 110 } 111 } 112 } 113 114 if (event.getAction() == MotionEvent.ACTION_UP) { 115 mTmpPoint[0] = event.getX(); 116 mTmpPoint[1] = event.getY(); 117 mToOrig.mapPoints(mTmpPoint); 118 mFRep.endSection(mTmpPoint[0], mTmpPoint[1]); 119 } 120 mEditorDraw.commitLocalRepresentation(); 121 invalidate(); 122 return true; 123 } 124 125 Matrix mRotateToScreen = new Matrix(); 126 Matrix mToOrig; 127 private void calcScreenMapping() { 128 mToOrig = getScreenToImageMatrix(true); 129 mToOrig.invert(mRotateToScreen); 130 } 131 132 @Override 133 public void onDraw(Canvas canvas) { 134 super.onDraw(canvas); 135 calcScreenMapping(); 136 137 } 138 139} 140