1fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard/* 2fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * Copyright (C) 2013 The Android Open Source Project 3fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * 4fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 5fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * you may not use this file except in compliance with the License. 6fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * You may obtain a copy of the License at 7fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * 8fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 9fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * 10fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * Unless required by applicable law or agreed to in writing, software 11fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 12fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * See the License for the specific language governing permissions and 14fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard * limitations under the License. 15fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard */ 16fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 17fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardpackage com.android.gallery3d.filtershow.state; 18fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 19fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.content.Context; 20f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport android.content.res.Resources; 21fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.graphics.*; 22fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.view.MotionEvent; 23fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.view.View; 24fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport android.widget.LinearLayout; 25f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.R; 26fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroardimport com.android.gallery3d.filtershow.FilterShowActivity; 27edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroardimport com.android.gallery3d.filtershow.category.SwipableView; 28edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroardimport com.android.gallery3d.filtershow.filters.FilterRepresentation; 29f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroardimport com.android.gallery3d.filtershow.imageshow.MasterImage; 30edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroardimport com.android.gallery3d.filtershow.pipeline.ImagePreset; 31fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 32edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroardpublic class StateView extends View implements SwipableView { 33fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 34f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private static final String LOGTAG = "StateView"; 35fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private Path mPath = new Path(); 36fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private Paint mPaint = new Paint(); 37fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 38fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int DEFAULT = 0; 39fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int BEGIN = 1; 40fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int END = 2; 41fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 42fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int UP = 1; 43fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int DOWN = 2; 44fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int LEFT = 3; 45fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public static int RIGHT = 4; 46fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 47fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private int mType = DEFAULT; 48fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private float mAlpha = 1.0f; 49fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private String mText = "Default"; 50fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private float mTextSize = 32; 51fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private static int sMargin = 16; 52fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private static int sArrowHeight = 16; 53fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private static int sArrowWidth = 8; 54edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard private float mStartTouchX = 0; 55edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard private float mStartTouchY = 0; 56edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard private float mDeleteSlope = 20; 57edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard 58fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private int mOrientation = LinearLayout.VERTICAL; 59fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private int mDirection = DOWN; 60fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private boolean mDuplicateButton; 61fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private State mState; 62fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 63f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mEndsBackgroundColor; 64f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mEndsTextColor; 65f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mBackgroundColor; 66f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mTextColor; 67f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mSelectedBackgroundColor; 68f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private int mSelectedTextColor; 69f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard private Rect mTextBounds = new Rect(); 70f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard 71fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public StateView(Context context) { 72fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard this(context, DEFAULT); 73fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 74fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 75fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public StateView(Context context, int type) { 76fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard super(context); 77fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mType = type; 78f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard Resources res = getResources(); 79f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEndsBackgroundColor = res.getColor(R.color.filtershow_stateview_end_background); 80f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mEndsTextColor = res.getColor(R.color.filtershow_stateview_end_text); 81f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mBackgroundColor = res.getColor(R.color.filtershow_stateview_background); 82f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mTextColor = res.getColor(R.color.filtershow_stateview_text); 83f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mSelectedBackgroundColor = res.getColor(R.color.filtershow_stateview_selected_background); 84f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mSelectedTextColor = res.getColor(R.color.filtershow_stateview_selected_text); 85c8d14359ff37276640b8d0e31736700311223b6cnicolasroard mTextSize = res.getDimensionPixelSize(R.dimen.state_panel_text_size); 86fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 87fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 88fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public String getText() { 89fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return mText; 90fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 91fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 92fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setText(String text) { 93fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mText = text; 94fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 95fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 96fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 97fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setType(int type) { 98fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mType = type; 99fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 100fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 101fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 102fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard @Override 103fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setSelected(boolean value) { 104fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard super.setSelected(value); 105fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (!value) { 106fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mDuplicateButton = false; 107fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 108fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 109fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 110fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 111fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void drawText(Canvas canvas) { 112fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mText == null) { 113fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return; 114fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 115fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPaint.reset(); 116fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (isSelected()) { 117f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mSelectedTextColor); 118fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 119f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mTextColor); 120fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 121f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mType == BEGIN) { 122f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mEndsTextColor); 123fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 124f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setTypeface(Typeface.DEFAULT_BOLD); 125f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setAntiAlias(true); 126f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setTextSize(mTextSize); 127f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.getTextBounds(mText, 0, mText.length(), mTextBounds); 128f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int x = (canvas.getWidth() - mTextBounds.width()) / 2; 129f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard int y = mTextBounds.height() + (canvas.getHeight() - mTextBounds.height()) / 2; 130fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard canvas.drawText(mText, x, y, mPaint); 131fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 132fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 133fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void onDraw(Canvas canvas) { 134fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard canvas.drawARGB(0, 0, 0, 0); 13500259461be82e601b58d3e970afbf0c012c5f3e7nicolasroard mPaint.reset(); 136fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.reset(); 137fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 138fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard float w = canvas.getWidth(); 139fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard float h = canvas.getHeight(); 140fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard float r = sArrowHeight; 141fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard float d = sArrowWidth; 142fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 143fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mOrientation == LinearLayout.HORIZONTAL) { 144fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard drawHorizontalPath(w, h, r, d); 145fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 146fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mDirection == DOWN) { 147fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard drawVerticalDownPath(w, h, r, d); 148fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 149fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard drawVerticalPath(w, h, r, d); 150fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 151fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 152fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 153f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mType == DEFAULT || mType == END) { 154fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mDuplicateButton) { 155fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPaint.setARGB(255, 200, 0, 0); 156fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else if (isSelected()) { 157f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mSelectedBackgroundColor); 158fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 159f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mBackgroundColor); 160fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 161fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 162f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mPaint.setColor(mEndsBackgroundColor); 163fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 164fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard canvas.drawPath(mPath, mPaint); 165fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard drawText(canvas); 166fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 167fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 168fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private void drawHorizontalPath(float w, float h, float r, float d) { 169105fbcf3289491aa4f590057e304fee33f1c88canicolasroard if (this.getLayoutDirection() == LAYOUT_DIRECTION_RTL) { 170105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.moveTo(w, 0); 171105fbcf3289491aa4f590057e304fee33f1c88canicolasroard if (mType == END) { 172105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, 0); 173105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, h); 174105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } else { 175105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(d, 0); 176105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(d, r); 177105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, r + d); 178105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(d, r + d + r); 179105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(d, h); 180105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } 181fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, h); 182105fbcf3289491aa4f590057e304fee33f1c88canicolasroard if (mType != BEGIN) { 183105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w, r + d + r); 184105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w - d, r + d); 185105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w, r); 186105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } 187fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 188105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.moveTo(0, 0); 189105fbcf3289491aa4f590057e304fee33f1c88canicolasroard if (mType == END) { 190105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w, 0); 191105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w, h); 192105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } else { 193105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w - d, 0); 194105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w - d, r); 195105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w, r + d); 196105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w - d, r + d + r); 197105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(w - d, h); 198105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } 199105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, h); 200105fbcf3289491aa4f590057e304fee33f1c88canicolasroard if (mType != BEGIN) { 201105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, r + d + r); 202105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(d, r + d); 203105fbcf3289491aa4f590057e304fee33f1c88canicolasroard mPath.lineTo(0, r); 204105fbcf3289491aa4f590057e304fee33f1c88canicolasroard } 205fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 206fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.close(); 207fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 208fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 209fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private void drawVerticalPath(float w, float h, float r, float d) { 210fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mType == BEGIN) { 211fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.moveTo(0, 0); 212fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, 0); 213fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 214fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.moveTo(0, d); 215fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r, d); 216fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d, 0); 217fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d + r, d); 218fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, d); 219fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 220fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, h); 221fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mType != END) { 222fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d + r, h); 223fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d, h - d); 224fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r, h); 225fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 226fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(0, h); 227fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.close(); 228fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 229fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 230fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard private void drawVerticalDownPath(float w, float h, float r, float d) { 231fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.moveTo(0, 0); 232fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mType != BEGIN) { 233fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r, 0); 234fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d, d); 235fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d + r, 0); 236fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 237fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, 0); 238fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 239fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard if (mType != END) { 240fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, h - d); 241fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 242fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d + r, h - d); 243fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r + d, h); 244fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(r, h - d); 245fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 246fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(0, h - d); 247fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } else { 248fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(w, h); 249fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.lineTo(0, h); 250fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 251fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 252fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mPath.close(); 253fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 254fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 255fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setBackgroundAlpha(float alpha) { 256f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard if (mType == BEGIN) { 257fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return; 258fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 259fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mAlpha = alpha; 260f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setAlpha(alpha); 261fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 262fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 263fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 264f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard public float getBackgroundAlpha() { 265fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return mAlpha; 266fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 267fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 268fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setOrientation(int orientation) { 269fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mOrientation = orientation; 270fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 271fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 272fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setDuplicateButton(boolean b) { 273fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mDuplicateButton = b; 274fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 275fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 276fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 277fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public State getState() { 278fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return mState; 279fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 280fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 281fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void setState(State state) { 282fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mState = state; 283f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard mText = mState.getText().toUpperCase(); 284fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard mType = mState.getType(); 285fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard invalidate(); 286fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 287fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 288fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public void resetPosition() { 289fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard setTranslationX(0); 290fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard setTranslationY(0); 291f5eedf1635eba7edfa7d41fd4e991cced978c4b2nicolasroard setBackgroundAlpha(1.0f); 292fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 293fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard 294fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard public boolean isDraggable() { 295fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard return mState.isDraggable(); 296fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard } 297edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard 298edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard @Override 299edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard public void delete() { 300edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard FilterShowActivity activity = (FilterShowActivity) getContext(); 301edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard FilterRepresentation representation = getState().getFilterRepresentation(); 302edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard activity.removeFilterRepresentation(representation); 303edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 304edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard 305edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard @Override 306edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard public boolean onTouchEvent(MotionEvent event) { 307edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard boolean ret = super.onTouchEvent(event); 308edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard FilterShowActivity activity = (FilterShowActivity) getContext(); 309edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard 310edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (event.getActionMasked() == MotionEvent.ACTION_UP) { 311edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard activity.startTouchAnimation(this, event.getX(), event.getY()); 312edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 313edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { 314edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard mStartTouchY = event.getY(); 315edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard mStartTouchX = event.getX(); 316edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (mType == BEGIN) { 317edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard MasterImage.getImage().setShowsOriginal(true); 318edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 319edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 320e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard if (event.getActionMasked() == MotionEvent.ACTION_UP 321e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { 322edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard setTranslationX(0); 323edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard setTranslationY(0); 324edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard MasterImage.getImage().setShowsOriginal(false); 325e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard if (mType != BEGIN && event.getActionMasked() == MotionEvent.ACTION_UP) { 326e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard setSelected(true); 327e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard FilterRepresentation representation = getState().getFilterRepresentation(); 328e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard MasterImage image = MasterImage.getImage(); 329e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard ImagePreset preset = image != null ? image.getCurrentPreset() : null; 330e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard if (getTranslationY() == 0 331e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard && image != null && preset != null 332e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard && representation != image.getCurrentFilterRepresentation() 333e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard && preset.getRepresentation(representation) != null) { 334e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard activity.showRepresentation(representation); 335e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard setSelected(false); 336e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard } 337edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 338edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 339e30a1cc28e6724d54ba5b20e73d303e734c05559nicolasroard if (mType != BEGIN && event.getActionMasked() == MotionEvent.ACTION_MOVE) { 340edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard float delta = event.getY() - mStartTouchY; 341edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard if (Math.abs(delta) > mDeleteSlope) { 342edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard activity.setHandlesSwipeForView(this, mStartTouchX, mStartTouchY); 343edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 344edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 345edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard return true; 346edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard } 347fb6a8e166f0a46d2a994a408b1679e3a67fdcb52nicolasroard} 348