diff options
author | Kenny Root <kenny@the-b.org> | 2009-06-26 20:54:44 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-06-26 20:54:44 +0000 |
commit | abaf68d5d19b711d67ce2d6a4e6f27c4a3e081f7 (patch) | |
tree | 1bc74b14ae743f01c5597e5da5dcadcd27140a5f /src | |
parent | 1e75a40663e0e8c7cffc8914a5156726e76bf43c (diff) | |
download | connectbot-abaf68d5d19b711d67ce2d6a4e6f27c4a3e081f7.tar.gz connectbot-abaf68d5d19b711d67ce2d6a4e6f27c4a3e081f7.tar.bz2 connectbot-abaf68d5d19b711d67ce2d6a4e6f27c4a3e081f7.zip |
Trim down the color picker so it's not so bloated
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@336 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src')
-rw-r--r-- | src/org/connectbot/ColorsActivity.java | 2 | ||||
-rw-r--r-- | src/org/connectbot/util/UberColorPickerDialog.java | 2132 |
2 files changed, 18 insertions, 2116 deletions
diff --git a/src/org/connectbot/ColorsActivity.java b/src/org/connectbot/ColorsActivity.java index a114e7d..bb6f5cc 100644 --- a/src/org/connectbot/ColorsActivity.java +++ b/src/org/connectbot/ColorsActivity.java @@ -261,7 +261,7 @@ public class ColorsActivity extends Activity implements OnItemClickListener, OnC private void editColor(int colorNumber) { mCurrentColor = colorNumber; - new UberColorPickerDialog(this, this, mColorList.get(colorNumber), true).show(); + new UberColorPickerDialog(this, this, mColorList.get(colorNumber)).show(); } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { diff --git a/src/org/connectbot/util/UberColorPickerDialog.java b/src/org/connectbot/util/UberColorPickerDialog.java index e310f3b..923a027 100644 --- a/src/org/connectbot/util/UberColorPickerDialog.java +++ b/src/org/connectbot/util/UberColorPickerDialog.java @@ -33,8 +33,6 @@ package org.connectbot.util; -import java.util.Calendar; - import android.app.Dialog; import android.content.Context; import android.graphics.Bitmap; @@ -42,7 +40,6 @@ import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorMatrix; import android.graphics.ComposeShader; -import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; @@ -57,56 +54,19 @@ import android.os.Bundle; import android.util.DisplayMetrics; import android.view.MotionEvent; import android.view.View; -import android.view.Window; -import android.widget.Toast; /** - * UberColorPickerDialog is a seriously enhanced version of the UberColorPickerDialog class provided in the Android API Demos. - * Improvements include: - * <ul> - * <li> Multiple color spaces and chooser methods (dimension combinations) for manipulating those color spaces, including: - * <ul> - * <li> HSV with angular H and radial S combined in 2D and a 1D V slider. - * <li> HSV with angular H and radial V combined in 2D and a 1D S slider (this one's kinda silly). - * <li> HSV with cardinal S and V combined in 2D and a 1D H slider. - * <li> YUV with cardinal U and V combined in 2D and a 1D Y slider. - * <li> RGB with three 1D sliders. - * <li> HSV with three 1D sliders. - * </ul> - * <li> Simple switch-based compile-time configuration of which chooser methods are provided (search for ENABLED_METHODS near the top of the code). - * <li> Numerical feedback of precise color values. - * <li> Two sample swatches, one the original which can be used to revert to the initial color, the other to show the currently chosen color. - * <li> Trackball input for precise color control. - * <li> Automatic detection of portrait/landscape orientation and adjustment of the widget layout to make best use of that orientation. - * <li> The option of showing or hiding the window title. Showing it wastes a lot of space of course, hiding it is augmented with an introductory toast message. - * <li> Realtime feedback of color changes, not only in the sample swatch but also in all relevant palettes and sliders. - * <li> Hilighted borders to show which widget has trackball focus. - * <li> Position markers on the palettes and sliders to show the current value in each dimension (the value of each parameter). - * </ul> - * <p> - * Version History: - * <ul> - * <li>v1.1, 090408 - * <ul> - * <li>Added hex numerical output (HTML colors). - * <li>All colorspace parameters (HSV, RGB, YUV, Hex) are now updated and shown at all times. - * <li>Converted to GradientDrawable Bitmaps for drawing the 1D sliders. They're much smoother, less blocky. Note that 2D palettes are still constructed from the less smooth gradients. - * <li>Did some general refactoring. - * <li>Made the UV palette slightly more color-accurate (a little ligher and darker at extreme Y values). - * <li>Added a "hilighted" border around the currently selected color chooser method. - * </ul> - * <li>v1.0, 090405 - * <ul> - * <li>First public release - * </ul> - * </ul> + * UberColorPickerDialog is a seriously enhanced version of the UberColorPickerDialog + * class provided in the Android API Demos.<p> + * + * NOTE (from Kenny Root): This is a VERY slimmed down version custom for ConnectBot. + * Visit Keith's site for the full version at the URL listed in the author line.<p> * * @author Keith Wiley, kwiley@keithwiley.com, http://keithwiley.com */ public class UberColorPickerDialog extends Dialog { private OnColorChangedListener mListener; private int mInitialColor; - private boolean mShowTitle; /** * Callback to the creator of the dialog, informing the creator of a new color and notifying that the dialog is about to dismiss. @@ -124,13 +84,11 @@ public class UberColorPickerDialog extends Dialog { */ public UberColorPickerDialog(Context context, OnColorChangedListener listener, - int initialColor, - boolean showTitle) { + int initialColor) { super(context); mListener = listener; mInitialColor = initialColor; - mShowTitle = showTitle; } /** @@ -151,11 +109,7 @@ public class UberColorPickerDialog extends Dialog { int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; - if (!mShowTitle) { - getWindow().requestFeature(Window.FEATURE_NO_TITLE); - Toast.makeText(getContext(), "Pick a color (try the trackball)", Toast.LENGTH_SHORT).show(); - } - else setTitle("Pick a color (try the trackball)"); + setTitle("Pick a color (try the trackball)"); try { setContentView(new ColorPickerView(getContext(), l, screenWidth, screenHeight, mInitialColor)); @@ -167,27 +121,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Android's Color.colorToHSV() has what I assume is a bug, such that on a desaturated color it sets H,S,V all to V. - * While ambiguous w.r.t. hue, saturation should certainly be 0 in such a case. Detect and fix. - * @param color 4-byte ARGB - * @return true if fully desaturated, indicating that if this color was passed to Color.colorToHSV(), then the resulting HSV's S should be explicitly set to 0 - */ - static public boolean isGray(int color) { - return (((color >> 16) & 0x00000000FF) == (color & 0x000000FF) - && ((color >> 8) & 0x00000000FF) == (color & 0x000000FF)); - } - - /** - * Android's Color.colorToHSV() has what I assume is a bug, such that on a desaturated color it sets H,S,V all to V. - * While ambiguous w.r.t. hue, saturation should certainly be 0 in such a case. Detect and fix. - * @param color 4-elm rgb of indeterminate range - * @return true if fully desaturated, indicating that if this color was passed to Color.colorToHSV(), then the resulting HSV's S should be explicitly set to 0 - */ - static public boolean isGray(int[] rgb) { - return (rgb[1] == rgb[0] && rgb[2] == rgb[0]); - } - - /** * ColorPickerView is the meat of this color picker (as opposed to the enclosing class). * All the heavy lifting is done directly by this View subclass. * <P> @@ -209,77 +142,23 @@ public class UberColorPickerDialog extends Dialog { private static final int PALETTE_CENTER_X = PALETTE_RADIUS; private static final int PALETTE_CENTER_Y = PALETTE_RADIUS; - private static final int FIRST_HOR_SLIDER_POS_Y = 20; - private static final int SLIDER_THICKNESS = 40; - private static final int METHOD_SELECTOR_SIZE = 40; - private static final int METHOD_SELECTOR_SPACING = 10; - private static int METHOD_SELECTOR_POS_X = PALETTE_DIM + METHOD_SELECTOR_SPACING; - - private static int VIEW_DIM_X = PALETTE_DIM + METHOD_SELECTOR_SPACING + METHOD_SELECTOR_SIZE; - private static int VIEW_DIM_Y = METHOD_SELECTOR_SIZE * 5 + METHOD_SELECTOR_SIZE * 2; + private static int VIEW_DIM_X = PALETTE_DIM; + private static int VIEW_DIM_Y = SWATCH_HEIGHT; //NEW_METHOD_WORK_NEEDED_HERE private static final int METHOD_HS_V_PALETTE = 0; - /** - * METHOD_HV_S_PALETTE is pretty silly in that it violates the dimension-interdependence of HSV, - * thus making it difficult to use (as the user moves through the 2D palette its coloration actually changes! - * It's just thrown in for fun. - */ - private static final int METHOD_HV_S_PALETTE = 1; - private static final int METHOD_SV_H_PALETTE = 2; - /** - * Please read the important note at setUVPalette() about the visual portrayal of the UV palette. - */ - private static final int METHOD_UV_Y_PALETTE = 3; - private static final int METHOD_RGB_SLIDERS = 4; - private static final int METHOD_HSV_SLIDERS = 5; - private static final int METHOD_YUV_SLIDERS = 6; - - /** - * Edit these switches to show/hide each method's icon in the method selector list and thus to enable/disable access to that method. - */ - //NEW_METHOD_WORK_NEEDED_HERE - //Add a new entry to the list, make sure you keep the order correct w.r.t. to the METHOD_ consts. - private static final boolean[] ENABLED_METHODS = { - true, //METHOD_HS_V_ENABLED - true, //METHOD_HV_S_ENABLED - true, //METHOD_SV_H_ENABLED - true, //METHOD_UV_Y_ENABLED - true, //METHOD_RGB_ENABLED - true, //METHOD_HSV_ENABLED - true //METHOD_YUV_SLIDERS - }; - - //No need to manually keep this in sync with the switches above, it will be adjusted automatically during setup. - private static int NUM_ENABLED_METHODS = ENABLED_METHODS.length; //NEW_METHOD_WORK_NEEDED_HERE //Add a new entry to the list for each controller in the new method private static final int TRACKED_NONE = -1; //No object on screen is currently being tracked private static final int TRACK_SWATCH_OLD = 10; private static final int TRACK_SWATCH_NEW = 11; - private static final int TRACK_HV_PALETTE = 20; - private static final int TRACK_VER_S_SLIDER = 21; private static final int TRACK_HS_PALETTE = 30; private static final int TRACK_VER_VALUE_SLIDER = 31; - private static final int TRACK_SV_PALETTE = 40; - private static final int TRACK_VER_H_SLIDER = 41; - private static final int TRACK_UV_PALETTE = 50; - private static final int TRACK_VER_Y_SLIDER = 51; - private static final int TRACK_R_SLIDER = 60; - private static final int TRACK_G_SLIDER = 61; - private static final int TRACK_B_SLIDER = 62; - private static final int TRACK_H_SLIDER = 70; - private static final int TRACK_S_SLIDER = 71; - private static final int TRACK_HOR_VALUE_SLIDER = 72; - private static final int TRACK_HOR_Y_SLIDER = 80; - private static final int TRACK_U_SLIDER = 81; - private static final int TRACK_V_SLIDER = 82; private static final int TEXT_SIZE = 12; - private static final int TEXT_HALF_SIZE = TEXT_SIZE / 2; //Can be used to vertically center text (sorta, it's approximate) private static int[] TEXT_HSV_POS = new int[2]; private static int[] TEXT_RGB_POS = new int[2]; private static int[] TEXT_YUV_POS = new int[2]; @@ -294,37 +173,21 @@ public class UberColorPickerDialog extends Dialog { private Paint mSwatchOld, mSwatchNew; - private Shader mFadeInLeft, mFadeInTop, mFadeInRight, mFadeInBottom; - //NEW_METHOD_WORK_NEEDED_HERE //Add Paints to represent the palettes of the new method's UI controllers private Paint mOvalHueSat; - private Paint mOvalHueVal; - - private Shader mSatValMask; - private Paint mSatValPalette; - - private Paint mUVPalette; - private Bitmap mVerSliderBM; private Canvas mVerSliderCv; private Bitmap[] mHorSlidersBM = new Bitmap[3]; private Canvas[] mHorSlidersCv = new Canvas[3]; - private Paint mSatFader; private Paint mValDimmer; //NEW_METHOD_WORK_NEEDED_HERE //Add Paints to represent the icon for the new method private Paint mOvalHueSatSmall; - private Paint mOvalHueValSmall; - private Paint mSVSmall; - private Paint mUVSmall; - private Paint[] mRGBSmall = new Paint[3]; - private Paint[] mHSSmall = new Paint[2]; - private Paint[] mYUVSmall = new Paint[3]; private Paint mPosMarker; private Paint mText; @@ -333,11 +196,8 @@ public class UberColorPickerDialog extends Dialog { private Rect mNewSwatchRect = new Rect(); private Rect mPaletteRect = new Rect(); private Rect mVerSliderRect = new Rect(); - private Rect[] mHorSliderRects = new Rect[3]; - private Rect[] mMethodSelectorRects = null; //The Rects where the icons are drawn. This will be assigned during setup. - private int[] mMethodSelectRectMap = null; //Which method corresponds to which icon Rect. This will be assigned during setup. - private int[] mSpectrumColors, mSpectrumColorsRev; + private int[] mSpectrumColorsRev; private int mOriginalColor = 0; //The color passed in at the beginning, which can be reverted to at any time by tapping the old swatch. private float[] mHSV = new float[3]; private int[] mRGB = new int[3]; @@ -350,8 +210,6 @@ public class UberColorPickerDialog extends Dialog { private int[] mCoord = new int[3]; //For drawing slider/palette markers private int mFocusedControl = -1; //Which control receives trackball events. private OnColorChangedListener mListener; - private long mTimeOfLastSliderSwitch = 0; //To prevent slider switches from occurring too rapidly. - private boolean mShownYUVWarnedAlready = false; //Only show the YUV toast warning once. /** * Ctor. @@ -368,31 +226,15 @@ public class UberColorPickerDialog extends Dialog { //We need to make the dialog focusable to retrieve trackball events. setFocusable(true); - boolean focusable = isFocusable(); - boolean gotFocus = requestFocus(); mListener = l; mOriginalColor = color; Color.colorToHSV(color, mHSV); - if (isGray(color)) //Ugh, I think there's a bug in android's Color routines. Read the longer description at isGray(). - mHSV[1] = 0; updateAllFromHSV(); - //Gather the number of enabled methods and allocate Rects to represent their icon locations in the method selector list. - NUM_ENABLED_METHODS = 0; - for (int i = 0; i < ENABLED_METHODS.length; i++) - if (ENABLED_METHODS[i]) - NUM_ENABLED_METHODS++; - if (NUM_ENABLED_METHODS == 0) { - Toast.makeText(getContext(), "No color picker methods enabled.", Toast.LENGTH_SHORT).show(); - throw new Exception("At least one method must be enabled"); - } - mMethodSelectorRects = new Rect[NUM_ENABLED_METHODS]; - mMethodSelectRectMap = new int[NUM_ENABLED_METHODS]; - //Setup the layout based on whether this is a portrait or landscape orientation. if (width <= height) { //Portrait layout SWATCH_WIDTH = (PALETTE_DIM + SLIDER_THICKNESS) / 2; @@ -400,53 +242,11 @@ public class UberColorPickerDialog extends Dialog { PALETTE_POS_X = 0; PALETTE_POS_Y = TEXT_SIZE * 4 + SWATCH_HEIGHT; - METHOD_SELECTOR_POS_X = PALETTE_POS_X + PALETTE_DIM + SLIDER_THICKNESS + METHOD_SELECTOR_SPACING; - - //NEW_METHOD_WORK_NEEDED_HERE - //Follow the pattern here - mHSVenabled = ENABLED_METHODS[METHOD_HS_V_PALETTE] || ENABLED_METHODS[METHOD_HV_S_PALETTE] || ENABLED_METHODS[METHOD_SV_H_PALETTE] || ENABLED_METHODS[METHOD_HSV_SLIDERS]; - mRGBenabled = ENABLED_METHODS[METHOD_RGB_SLIDERS]; - mYUVenabled = ENABLED_METHODS[METHOD_UV_Y_PALETTE] || ENABLED_METHODS[METHOD_YUV_SLIDERS]; - mHexenabled = ENABLED_METHODS[METHOD_RGB_SLIDERS]; - - //Set the method chooser icon rects - int prevEnabledMethod = -1; - for (int i = 0; i < NUM_ENABLED_METHODS; i++) { - mMethodSelectorRects[i] = new Rect( - METHOD_SELECTOR_POS_X, - (METHOD_SELECTOR_SIZE + METHOD_SELECTOR_SPACING) * i, - METHOD_SELECTOR_POS_X + METHOD_SELECTOR_SIZE, - (METHOD_SELECTOR_SIZE + METHOD_SELECTOR_SPACING) * i + METHOD_SELECTOR_SIZE); - - for (int j = prevEnabledMethod + 1; j < ENABLED_METHODS.length; j++) { - if (ENABLED_METHODS[j]) { - mMethodSelectRectMap[i] = j; - prevEnabledMethod = j; - break; - } - } - } - //Set more rects, lots of rects mOldSwatchRect.set(0, TEXT_SIZE * 4, SWATCH_WIDTH, TEXT_SIZE * 4 + SWATCH_HEIGHT); mNewSwatchRect.set(SWATCH_WIDTH, TEXT_SIZE * 4, SWATCH_WIDTH * 2, TEXT_SIZE * 4 + SWATCH_HEIGHT); mPaletteRect.set(0, PALETTE_POS_Y, PALETTE_DIM, PALETTE_POS_Y + PALETTE_DIM); mVerSliderRect.set(PALETTE_DIM, PALETTE_POS_Y, PALETTE_DIM + SLIDER_THICKNESS, PALETTE_POS_Y + PALETTE_DIM); - mHorSliderRects[0] = new Rect( - 0, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y, - PALETTE_DIM, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y + SLIDER_THICKNESS); - mHorSliderRects[1] = new Rect( - 0, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 1.25), - PALETTE_DIM, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 1.25) + SLIDER_THICKNESS); - mHorSliderRects[2] = new Rect( - 0, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 2.5), - PALETTE_DIM, - PALETTE_POS_Y + FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 2.5) + SLIDER_THICKNESS); TEXT_HSV_POS[0] = 3; TEXT_HSV_POS[1] = 0; @@ -457,9 +257,8 @@ public class UberColorPickerDialog extends Dialog { TEXT_HEX_POS[0] = TEXT_HSV_POS[0] + 150; TEXT_HEX_POS[1] = TEXT_HSV_POS[1]; - VIEW_DIM_X = PALETTE_DIM + SLIDER_THICKNESS + METHOD_SELECTOR_SPACING + METHOD_SELECTOR_SIZE; - VIEW_DIM_Y = Math.max(SWATCH_HEIGHT + PALETTE_DIM + TEXT_SIZE * 4, - METHOD_SELECTOR_SIZE * NUM_ENABLED_METHODS + METHOD_SELECTOR_SPACING * (NUM_ENABLED_METHODS - 1)); + VIEW_DIM_X = PALETTE_DIM + SLIDER_THICKNESS; + VIEW_DIM_Y = SWATCH_HEIGHT + PALETTE_DIM + TEXT_SIZE * 4; } else { //Landscape layout SWATCH_WIDTH = 110; @@ -467,58 +266,11 @@ public class UberColorPickerDialog extends Dialog { PALETTE_POS_X = SWATCH_WIDTH; PALETTE_POS_Y = 0; - METHOD_SELECTOR_POS_X = PALETTE_POS_X + PALETTE_DIM + SLIDER_THICKNESS + METHOD_SELECTOR_SPACING; - - //NEW_METHOD_WORK_NEEDED_HERE - //Follow the pattern here - mHSVenabled = ENABLED_METHODS[METHOD_HS_V_PALETTE] || ENABLED_METHODS[METHOD_HV_S_PALETTE] || ENABLED_METHODS[METHOD_SV_H_PALETTE] || ENABLED_METHODS[METHOD_HSV_SLIDERS]; - mRGBenabled = ENABLED_METHODS[METHOD_RGB_SLIDERS]; - mYUVenabled = ENABLED_METHODS[METHOD_UV_Y_PALETTE] || ENABLED_METHODS[METHOD_YUV_SLIDERS]; - mHexenabled = ENABLED_METHODS[METHOD_RGB_SLIDERS]; - - //The maximum number of method selector icons per column is hard-coded to 4. - //Changing this parameter would require some care, especially in calculation of VIEW_DIM_Y. - - //Set the method chooser icon rects - int prevEnabledMethod = -1; - for (int i = 0; i < NUM_ENABLED_METHODS; i++) { - int xOffset = (METHOD_SELECTOR_SIZE + METHOD_SELECTOR_SPACING) * (i / 4); - mMethodSelectorRects[i] = new Rect( - METHOD_SELECTOR_POS_X + xOffset, - (METHOD_SELECTOR_SIZE + METHOD_SELECTOR_SPACING) * (i % 4), - METHOD_SELECTOR_POS_X + xOffset + METHOD_SELECTOR_SIZE, - (METHOD_SELECTOR_SIZE + METHOD_SELECTOR_SPACING) * (i % 4) + METHOD_SELECTOR_SIZE); - - for (int j = prevEnabledMethod + 1; j < ENABLED_METHODS.length; j++) { - if (ENABLED_METHODS[j]) { - mMethodSelectRectMap[i] = j; - prevEnabledMethod = j; - break; - } - } - } - int numMethodSelectorColumns = (int)Math.ceil(NUM_ENABLED_METHODS / 4.0f); - //Set more rects, lots of rects mOldSwatchRect.set(0, TEXT_SIZE * 7, SWATCH_WIDTH, TEXT_SIZE * 7 + SWATCH_HEIGHT); mNewSwatchRect.set(0, TEXT_SIZE * 7 + SWATCH_HEIGHT, SWATCH_WIDTH, TEXT_SIZE * 7 + SWATCH_HEIGHT * 2); mPaletteRect.set(SWATCH_WIDTH, PALETTE_POS_Y, SWATCH_WIDTH + PALETTE_DIM, PALETTE_POS_Y + PALETTE_DIM); mVerSliderRect.set(SWATCH_WIDTH + PALETTE_DIM, PALETTE_POS_Y, SWATCH_WIDTH + PALETTE_DIM + SLIDER_THICKNESS, PALETTE_POS_Y + PALETTE_DIM); - mHorSliderRects[0] = new Rect( - SWATCH_WIDTH, - FIRST_HOR_SLIDER_POS_Y, - SWATCH_WIDTH + PALETTE_DIM, - FIRST_HOR_SLIDER_POS_Y + SLIDER_THICKNESS); - mHorSliderRects[1] = new Rect( - SWATCH_WIDTH, - FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 1.25), - SWATCH_WIDTH + PALETTE_DIM, - FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 1.25) + SLIDER_THICKNESS); - mHorSliderRects[2] = new Rect( - SWATCH_WIDTH, - FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 2.5), - SWATCH_WIDTH + PALETTE_DIM, - FIRST_HOR_SLIDER_POS_Y + (int)(SLIDER_THICKNESS * 2.5) + SLIDER_THICKNESS); TEXT_HSV_POS[0] = 3; TEXT_HSV_POS[1] = 0; @@ -529,16 +281,11 @@ public class UberColorPickerDialog extends Dialog { TEXT_HEX_POS[0] = TEXT_HSV_POS[0] + 50; TEXT_HEX_POS[1] = TEXT_HSV_POS[1]; - VIEW_DIM_X = PALETTE_POS_X + PALETTE_DIM + SLIDER_THICKNESS + - (METHOD_SELECTOR_SPACING + METHOD_SELECTOR_SIZE) * numMethodSelectorColumns; - VIEW_DIM_Y = Math.max(mNewSwatchRect.bottom, Math.max(PALETTE_DIM, METHOD_SELECTOR_SIZE * 4 + METHOD_SELECTOR_SPACING * 3)); + VIEW_DIM_X = PALETTE_POS_X + PALETTE_DIM + SLIDER_THICKNESS; + VIEW_DIM_Y = Math.max(mNewSwatchRect.bottom, PALETTE_DIM); } //Rainbows make everybody happy! - mSpectrumColors = new int[] { - 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 0xFF00FFFF, - 0xFF0000FF, 0xFFFF00FF, 0xFFFF0000, - }; mSpectrumColorsRev = new int[] { 0xFFFF0000, 0xFFFF00FF, 0xFF0000FF, 0xFF00FFFF, 0xFF00FF00, 0xFFFFFF00, 0xFFFF0000, @@ -557,41 +304,14 @@ public class UberColorPickerDialog extends Dialog { mSwatchNew.setStyle(Paint.Style.FILL); mSwatchNew.setColor(Color.HSVToColor(mHSV)); - mFadeInLeft = new LinearGradient(0, 0, PALETTE_DIM, 0, 0xFF000000, 0x00000000, Shader.TileMode.CLAMP); - mFadeInRight = new LinearGradient(0, 0, PALETTE_DIM, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); - mFadeInTop = new LinearGradient(0, 0, 0, PALETTE_DIM, 0xFF000000, 0x00000000, Shader.TileMode.CLAMP); - mFadeInBottom = new LinearGradient(0, 0, 0, PALETTE_DIM, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); - Shader fadeInTopSmall = new LinearGradient(0, 0, 0, METHOD_SELECTOR_SIZE, 0xFF000000, 0x00000000, Shader.TileMode.CLAMP); - Shader fadeInBottomSmall = new LinearGradient(0, 0, 0, METHOD_SELECTOR_SIZE, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); - - Shader shader = new SweepGradient(0, 0, mSpectrumColorsRev, null); - Shader shaderA = new SweepGradient(0, 0, mSpectrumColorsRev, null); Shader shaderB = new RadialGradient(0, 0, PALETTE_CENTER_X, 0xFFFFFFFF, 0xFF000000, Shader.TileMode.CLAMP); - shader = new ComposeShader(shaderA, shaderB, PorterDuff.Mode.SCREEN); + Shader shader = new ComposeShader(shaderA, shaderB, PorterDuff.Mode.SCREEN); mOvalHueSat = new Paint(Paint.ANTI_ALIAS_FLAG); mOvalHueSat.setShader(shader); mOvalHueSat.setStyle(Paint.Style.FILL); mOvalHueSat.setDither(true); - shaderB = new RadialGradient(0, 0, PALETTE_CENTER_X, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); - shader = new ComposeShader(shaderA, shaderB, PorterDuff.Mode.MULTIPLY); - mOvalHueVal = new Paint(Paint.ANTI_ALIAS_FLAG); - mOvalHueVal.setShader(shader); - mOvalHueVal.setStyle(Paint.Style.FILL); - mOvalHueVal.setDither(true); - - shaderA = new LinearGradient(0, 0, 0, PALETTE_DIM, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); - mSatValMask = new ComposeShader(shaderA, mFadeInRight, PorterDuff.Mode.DST_IN); //DST_ATOP also works - - mSatValPalette = new Paint(Paint.ANTI_ALIAS_FLAG); - mSatValPalette.setStyle(Paint.Style.FILL); - mSatValPalette.setDither(true); - - mUVPalette = new Paint(Paint.ANTI_ALIAS_FLAG); - mUVPalette.setStyle(Paint.Style.FILL); - mUVPalette.setDither(true); - mVerSliderBM = Bitmap.createBitmap(SLIDER_THICKNESS, PALETTE_DIM, Bitmap.Config.RGB_565); mVerSliderCv = new Canvas(mVerSliderBM); @@ -600,11 +320,6 @@ public class UberColorPickerDialog extends Dialog { mHorSlidersCv[i] = new Canvas(mHorSlidersBM[i]); } - mSatFader = new Paint(Paint.ANTI_ALIAS_FLAG); - mSatFader.setStyle(Paint.Style.FILL); - mSatFader.setDither(true); - mSatFader.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN)); - mValDimmer = new Paint(Paint.ANTI_ALIAS_FLAG); mValDimmer.setStyle(Paint.Style.FILL); mValDimmer.setDither(true); @@ -617,145 +332,12 @@ public class UberColorPickerDialog extends Dialog { //Add Paints to represent the icon for the new method shaderA = new SweepGradient(0, 0, mSpectrumColorsRev, null); - shaderB = new RadialGradient(0, 0, METHOD_SELECTOR_SIZE / 2, 0xFFFFFFFF, 0xFF000000, Shader.TileMode.CLAMP); + shaderB = new RadialGradient(0, 0, PALETTE_DIM / 2, 0xFFFFFFFF, 0xFF000000, Shader.TileMode.CLAMP); shader = new ComposeShader(shaderA, shaderB, PorterDuff.Mode.SCREEN); mOvalHueSatSmall = new Paint(Paint.ANTI_ALIAS_FLAG); mOvalHueSatSmall.setShader(shader); mOvalHueSatSmall.setStyle(Paint.Style.FILL); - shaderB = new RadialGradient(0, 0, METHOD_SELECTOR_SIZE / 2, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); - shader = new ComposeShader(shaderA, shaderB, PorterDuff.Mode.MULTIPLY); - mOvalHueValSmall = new Paint(Paint.ANTI_ALIAS_FLAG); - mOvalHueValSmall.setShader(shader); - mOvalHueValSmall.setStyle(Paint.Style.FILL); - - shaderA = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0xFF000000, 0xFFFF0000, Shader.TileMode.CLAMP); - shaderB = new LinearGradient(0, 0, 0, METHOD_SELECTOR_SIZE, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP); - Shader shaderC = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP); - Shader shaderD = new ComposeShader(shaderB, shaderC, PorterDuff.Mode.DST_IN); - shader = new ComposeShader(shaderA, shaderD, PorterDuff.Mode.SCREEN); - - mSVSmall = new Paint(Paint.ANTI_ALIAS_FLAG); - mSVSmall.setShader(shader); - mSVSmall.setStyle(Paint.Style.FILL); - - //A UV palette (U across, V up) for a given Y value is estimated by painting a U gradient across - //the top for maximum V, faded out at the bottom, and painting a U gradient across the bottom for - //minimum V, faded out at the top, then blending them. This is pretty accurate, except for the - //center of the palette for extreme values of Y (very low or very high), in which the true darkness - //or lightness is not properly represented. - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - int col1, col2; - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[0] = .5f; - - //Top U, faded out at bottom - yuv[1] = -.5f; - yuv[2] = .5f; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[1] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - shaderA = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, col1, col2, Shader.TileMode.CLAMP); - Shader shaderA2 = new ComposeShader(shaderA, fadeInTopSmall, PorterDuff.Mode.DST_IN); - - //Bottom U, faded out at top - yuv[1] = -.5f; - yuv[2] = -.5f; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[1] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - shaderB = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, col1, col2, Shader.TileMode.CLAMP); - Shader shaderB2 = new ComposeShader(shaderB, fadeInBottomSmall, PorterDuff.Mode.DST_IN); - - shader = new ComposeShader(shaderA2, shaderB2, PorterDuff.Mode.SCREEN); - - mUVSmall = new Paint(Paint.ANTI_ALIAS_FLAG); - mUVSmall.setShader(shader); - mUVSmall.setStyle(Paint.Style.FILL); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0xFF000000, 0xFFFF0000, Shader.TileMode.CLAMP); - mRGBSmall[0] = new Paint(Paint.ANTI_ALIAS_FLAG); - mRGBSmall[0].setShader(shader); - mRGBSmall[0].setStyle(Paint.Style.FILL); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0xFF000000, 0xFF00FF00, Shader.TileMode.CLAMP); - mRGBSmall[1] = new Paint(Paint.ANTI_ALIAS_FLAG); - mRGBSmall[1].setShader(shader); - mRGBSmall[1].setStyle(Paint.Style.FILL); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0xFF000000, 0xFF0000FF, Shader.TileMode.CLAMP); - mRGBSmall[2] = new Paint(Paint.ANTI_ALIAS_FLAG); - mRGBSmall[2].setShader(shader); - mRGBSmall[2].setStyle(Paint.Style.FILL); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, mSpectrumColors, null, Shader.TileMode.CLAMP); - mHSSmall[0] = new Paint(Paint.ANTI_ALIAS_FLAG); - mHSSmall[0].setShader(shader); - mHSSmall[0].setStyle(Paint.Style.FILL); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, 0xFFFFFFFF, 0xFFFF0000, Shader.TileMode.CLAMP); - mHSSmall[1] = new Paint(Paint.ANTI_ALIAS_FLAG); - mHSSmall[1].setShader(shader); - mHSSmall[1].setStyle(Paint.Style.FILL); - - yuv[0] = 0; - yuv[1] = 0; - yuv[2] = 0; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[0] = 1; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, col1, col2, Shader.TileMode.CLAMP); - mYUVSmall[0] = new Paint(Paint.ANTI_ALIAS_FLAG); - mYUVSmall[0].setShader(shader); - mYUVSmall[0].setStyle(Paint.Style.FILL); - - yuv[0] = .5f; - yuv[1] = -.5f; - yuv[2] = 0; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[1] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, col1, col2, Shader.TileMode.CLAMP); - mYUVSmall[1] = new Paint(Paint.ANTI_ALIAS_FLAG); - mYUVSmall[1].setShader(shader); - mYUVSmall[1].setStyle(Paint.Style.FILL); - - yuv[0] = .5f; - yuv[1] = 0; - yuv[2] = -.5f; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[2] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - shader = new LinearGradient(0, 0, METHOD_SELECTOR_SIZE, 0, col1, col2, Shader.TileMode.CLAMP); - mYUVSmall[2] = new Paint(Paint.ANTI_ALIAS_FLAG); - mYUVSmall[2].setShader(shader); - mYUVSmall[2].setStyle(Paint.Style.FILL); - //Make a simple stroking Paint for drawing markers and borders and stuff like that. mPosMarker = new Paint(Paint.ANTI_ALIAS_FLAG); mPosMarker.setStyle(Paint.Style.STROKE); @@ -782,25 +364,8 @@ public class UberColorPickerDialog extends Dialog { writeColorParams(canvas); //Draw the palette and sliders (the UI) - //NEW_METHOD_WORK_NEEDED_HERE - //To add a new method, replicate and extend the last entry in this list if (mMethod == METHOD_HS_V_PALETTE) drawHSV1Palette(canvas); - else if (mMethod == METHOD_HV_S_PALETTE) - drawHSV2Palette(canvas); - else if (mMethod == METHOD_SV_H_PALETTE) - drawHSV3Palette(canvas); - else if (mMethod == METHOD_UV_Y_PALETTE) - drawYUVPalette(canvas); - else if (mMethod == METHOD_RGB_SLIDERS) - drawRGBSliders(canvas); - else if (mMethod == METHOD_HSV_SLIDERS) - drawHSVSliders(canvas); - else if (mMethod == METHOD_YUV_SLIDERS) - drawYUVSliders(canvas); - - //Draw the method selector icons - drawMethodSelectors(canvas); } /** @@ -885,18 +450,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Draw a line across the slider to indicate its current value. - * @param canvas - * @param markerPos - */ - private void markHorSlider(Canvas canvas, int markerPos) { - mPosMarker.setColor(Color.BLACK); - canvas.drawRect(new Rect(markerPos - 2, 0, markerPos + 3, SLIDER_THICKNESS), mPosMarker); - mPosMarker.setColor(Color.WHITE); - canvas.drawRect(new Rect(markerPos, 0, markerPos + 1, SLIDER_THICKNESS), mPosMarker); - } - - /** * Frame the slider to indicate that it has trackball focus. * @param canvas */ @@ -908,17 +461,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Frame the slider to indicate that it has trackball focus. - * @param canvas - */ - private void hilightFocusedHorSlider(Canvas canvas) { - mPosMarker.setColor(Color.WHITE); - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, SLIDER_THICKNESS), mPosMarker); - mPosMarker.setColor(Color.BLACK); - canvas.drawRect(new Rect(2, 2, PALETTE_DIM - 2, SLIDER_THICKNESS - 2), mPosMarker); - } - - /** * Frame the 2D palette to indicate that it has trackball focus. * @param canvas */ @@ -929,39 +471,6 @@ public class UberColorPickerDialog extends Dialog { canvas.drawOval(new RectF(-PALETTE_RADIUS + 2, -PALETTE_RADIUS + 2, PALETTE_RADIUS - 2, PALETTE_RADIUS - 2), mPosMarker); } - /** - * Frame the 2D palette to indicate that it has trackball focus. - * @param canvas - */ - private void hilightFocusedSquarePalette(Canvas canvas) { - mPosMarker.setColor(Color.WHITE); - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, PALETTE_DIM), mPosMarker); - mPosMarker.setColor(Color.BLACK); - canvas.drawRect(new Rect(2, 2, PALETTE_DIM - 2, PALETTE_DIM - 2), mPosMarker); - } - - /** - * Frame the 2D palette to indicate that it has trackball focus. - * @param canvas - */ - private void hilightMethodSelectorOval(Canvas canvas) { - mPosMarker.setColor(Color.WHITE); - canvas.drawOval(new RectF(-METHOD_SELECTOR_SIZE / 2, -METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2), mPosMarker); - mPosMarker.setColor(Color.BLACK); - canvas.drawOval(new RectF(-METHOD_SELECTOR_SIZE / 2 + 2, -METHOD_SELECTOR_SIZE / 2 + 2, METHOD_SELECTOR_SIZE / 2 - 2, METHOD_SELECTOR_SIZE / 2 - 2), mPosMarker); - } - - /** - * Frame the 2D palette to indicate that it has trackball focus. - * @param canvas - */ - private void hilightMethodSelectorRect(Canvas canvas) { - mPosMarker.setColor(Color.WHITE); - canvas.drawRect(new Rect(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE), mPosMarker); - mPosMarker.setColor(Color.BLACK); - canvas.drawRect(new Rect(2, 2, METHOD_SELECTOR_SIZE - 2, METHOD_SELECTOR_SIZE - 2), mPosMarker); - } - //NEW_METHOD_WORK_NEEDED_HERE //To add a new method, replicate the basic draw functions here. Use the 2D palette or 1D sliders as templates for the new method. /** @@ -993,301 +502,10 @@ public class UberColorPickerDialog extends Dialog { } /** - * Draw the UI for HSV with angular H and radial V combined in 2D and a 1D S slider. - * @param canvas - */ - private void drawHSV2Palette(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - canvas.translate(PALETTE_CENTER_X, PALETTE_CENTER_Y); - canvas.drawOval(new RectF(-PALETTE_RADIUS, -PALETTE_RADIUS, PALETTE_RADIUS, PALETTE_RADIUS), mOvalHueVal); - canvas.drawOval(new RectF(-PALETTE_RADIUS, -PALETTE_RADIUS, PALETTE_RADIUS, PALETTE_RADIUS), mSatFader); - if (mFocusedControl == 0) - hilightFocusedOvalPalette(canvas); - mark2DPalette(canvas, mCoord[0], mCoord[2]); - canvas.translate(-PALETTE_CENTER_X, -PALETTE_CENTER_Y); - - canvas.translate(PALETTE_DIM, 0); - canvas.drawBitmap(mVerSliderBM, 0, 0, null); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - markVerSlider(canvas, mCoord[1]); - - canvas.restore(); - } - - /** - * Draw the UI for HSV with cardinal S and V combined in 2D and a 1D H slider. - * @param canvas - */ - private void drawHSV3Palette(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, PALETTE_DIM), mSatValPalette); - if (mFocusedControl == 0) - hilightFocusedSquarePalette(canvas); - mark2DPalette(canvas, mCoord[2], mCoord[1]); - - canvas.translate(PALETTE_DIM, 0); - canvas.drawBitmap(mVerSliderBM, 0, 0, null); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - canvas.drawRect(new Rect(0, 0, SLIDER_THICKNESS, PALETTE_DIM), mSatFader); - canvas.drawRect(new Rect(0, 0, SLIDER_THICKNESS, PALETTE_DIM), mValDimmer); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - markVerSlider(canvas, mCoord[0]); - - canvas.restore(); - } - - /** - * Draw the UI for YUV with cardinal U and V combined in 2D and a 1D Y slider. - * @param canvas - */ - private void drawYUVPalette(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - Paint black = new Paint(Paint.ANTI_ALIAS_FLAG); - black.setStyle(Paint.Style.FILL); - black.setColor(Color.BLACK); - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, PALETTE_DIM), black); - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, PALETTE_DIM), mUVPalette); - if (mFocusedControl == 0) - hilightFocusedSquarePalette(canvas); - mark2DPalette(canvas, mCoord[1], mCoord[2]); - - canvas.translate(PALETTE_DIM, 0); - canvas.drawBitmap(mVerSliderBM, 0, 0, null); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - if (mFocusedControl == 1) - hilightFocusedVerSlider(canvas); - markVerSlider(canvas, mCoord[0]); - - canvas.restore(); - } - - /** - * Draw the UI for RGB with three 1D sliders. - * @param canvas - */ - private void drawRGBSliders(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - for (int i = 0; i < 3; i++) { - if (i == 0) - canvas.translate(0, FIRST_HOR_SLIDER_POS_Y); - else canvas.translate(0, (int)(SLIDER_THICKNESS * 1.25)); - - canvas.drawBitmap(mHorSlidersBM[i], 0, 0, null); - - if (mFocusedControl == i) - hilightFocusedHorSlider(canvas); - markHorSlider(canvas, mCoord[i]); - - if (i == 0) - canvas.drawText("R", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else if (i == 1) - canvas.drawText("G", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else canvas.drawText("B", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - } - - canvas.restore(); - } - - /** - * Draw the UI for HSV with three 1D sliders. - * @param canvas - */ - private void drawHSVSliders(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - for (int i = 0; i < 3; i++) { - if (i == 0) - canvas.translate(0, FIRST_HOR_SLIDER_POS_Y); - else canvas.translate(0, (int)(SLIDER_THICKNESS * 1.25)); - - canvas.drawBitmap(mHorSlidersBM[i], 0, 0, null); - - if (i == 0) { - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, SLIDER_THICKNESS), mSatFader); - canvas.drawRect(new Rect(0, 0, PALETTE_DIM, SLIDER_THICKNESS), mValDimmer); - } - - if (mFocusedControl == i) - hilightFocusedHorSlider(canvas); - markHorSlider(canvas, mCoord[i]); - - if (i == 0) - canvas.drawText("H", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else if (i == 1) - canvas.drawText("S", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else canvas.drawText("V", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - } - - canvas.restore(); - } - - /** - * Draw the UI for RGB with three 1D sliders. - * @param canvas - */ - private void drawYUVSliders(Canvas canvas) { - canvas.save(); - - canvas.translate(PALETTE_POS_X, PALETTE_POS_Y); - - for (int i = 0; i < 3; i++) { - if (i == 0) - canvas.translate(0, FIRST_HOR_SLIDER_POS_Y); - else canvas.translate(0, (int)(SLIDER_THICKNESS * 1.25)); - - canvas.drawBitmap(mHorSlidersBM[i], 0, 0, null); - - if (mFocusedControl == i) - hilightFocusedHorSlider(canvas); - markHorSlider(canvas, mCoord[i]); - - if (i == 0) - canvas.drawText("Y", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else if (i == 1) - canvas.drawText("U", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - else canvas.drawText("V", PALETTE_DIM + 5, SLIDER_THICKNESS / 2 + TEXT_HALF_SIZE, mText); - } - - canvas.restore(); - } - - /** - * Draw the method selector icons - * @param canvas - */ - private void drawMethodSelectors(Canvas canvas) { - for (int i = 0; i < NUM_ENABLED_METHODS; i++) { - canvas.save(); - - //NEW_METHOD_WORK_NEEDED_HERE - //To add a new method, replicate and extend the last entry in this list - switch (mMethodSelectRectMap[i]) { - case METHOD_HS_V_PALETTE: { - canvas.translate(mMethodSelectorRects[i].left + METHOD_SELECTOR_SIZE / 2, mMethodSelectorRects[i].top + METHOD_SELECTOR_SIZE / 2); - canvas.drawOval(new RectF(-METHOD_SELECTOR_SIZE / 2, -METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2), mOvalHueSatSmall); - - if (mMethod == i) - hilightMethodSelectorOval(canvas); - } - break; - case METHOD_HV_S_PALETTE: { - canvas.translate(mMethodSelectorRects[i].left + METHOD_SELECTOR_SIZE / 2, mMethodSelectorRects[i].top + METHOD_SELECTOR_SIZE / 2); - canvas.drawOval(new RectF(-METHOD_SELECTOR_SIZE / 2, -METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2, METHOD_SELECTOR_SIZE / 2), mOvalHueValSmall); - - if (mMethod == i) - hilightMethodSelectorOval(canvas); - } - break; - case METHOD_SV_H_PALETTE: { - canvas.translate(mMethodSelectorRects[i].left, mMethodSelectorRects[i].top); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE), mSVSmall); - - if (mMethod == i) - hilightMethodSelectorRect(canvas); - } - break; - case METHOD_UV_Y_PALETTE: { - canvas.translate(mMethodSelectorRects[i].left, mMethodSelectorRects[i].top); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE), mUVSmall); - - if (mMethod == i) - hilightMethodSelectorRect(canvas); - } - break; - case METHOD_RGB_SLIDERS: { - canvas.translate(mMethodSelectorRects[i].left, mMethodSelectorRects[i].top + METHOD_SELECTOR_SIZE / 16); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mRGBSmall[0]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mRGBSmall[1]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mRGBSmall[2]); - - canvas.translate(0, -(2 * (METHOD_SELECTOR_SIZE / 3) + (METHOD_SELECTOR_SIZE / 16))); - if (mMethod == i) - hilightMethodSelectorRect(canvas); - } - break; - case METHOD_HSV_SLIDERS: { - canvas.translate(mMethodSelectorRects[i].left, mMethodSelectorRects[i].top + METHOD_SELECTOR_SIZE / 16); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mHSSmall[0]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mHSSmall[1]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mRGBSmall[0]); - - canvas.translate(0, -(2 * (METHOD_SELECTOR_SIZE / 3) + (METHOD_SELECTOR_SIZE / 16))); - if (mMethod == i) - hilightMethodSelectorRect(canvas); - } - break; - case METHOD_YUV_SLIDERS: { - canvas.translate(mMethodSelectorRects[i].left, mMethodSelectorRects[i].top + METHOD_SELECTOR_SIZE / 16); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mYUVSmall[0]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mYUVSmall[1]); - canvas.translate(0, METHOD_SELECTOR_SIZE / 3); - canvas.drawRect(new RectF(0, 0, METHOD_SELECTOR_SIZE, METHOD_SELECTOR_SIZE / 4), mYUVSmall[2]); - - canvas.translate(0, -(2 * (METHOD_SELECTOR_SIZE / 3) + (METHOD_SELECTOR_SIZE / 16))); - if (mMethod == i) - hilightMethodSelectorRect(canvas); - } - break; - } - - canvas.restore(); - } - } - - /** * Initialize the current color chooser's UI (set its color parameters and set its palette and slider values accordingly). */ private void initUI() { - //NEW_METHOD_WORK_NEEDED_HERE - //To add a new method, replicate and extend the last entry in this list - switch (mMethod) { - case METHOD_HS_V_PALETTE: - initHSV1Palette(); - break; - case METHOD_HV_S_PALETTE: - initHSV2Palette(); - break; - case METHOD_SV_H_PALETTE: - initHSV3Palette(); - break; - case METHOD_UV_Y_PALETTE: - initYUVPalette(); - break; - case METHOD_RGB_SLIDERS: - initRGBSliders(); - break; - case METHOD_HSV_SLIDERS: - initHSVSliders(); - break; - case METHOD_YUV_SLIDERS: - initYUVSliders(); - break; - } + initHSV1Palette(); //Focus on the first controller (arbitrary). mFocusedControl = 0; @@ -1310,149 +528,6 @@ public class UberColorPickerDialog extends Dialog { mCoord[2] = PALETTE_DIM - (int)(mHSV[2] * PALETTE_DIM); } - /** - * Initialize a color chooser. - */ - private void initHSV2Palette() { - setOvalSatFader(); - setVerSatSlider(); - - float angle = 2*PI - mHSV[0] / (180 / 3.1415927f); - float radius = mHSV[1] * PALETTE_RADIUS; - mCoord[0] = (int)(Math.cos(angle) * radius); - mCoord[2] = (int)(Math.sin(angle) * radius); - - mCoord[1] = PALETTE_DIM - (int)(mHSV[1] * PALETTE_DIM); - } - - /** - * Initialize a color chooser. - */ - private void initHSV3Palette() { - Shader shader = new LinearGradient(0, PALETTE_DIM, 0, 0, mSpectrumColors, null, Shader.TileMode.CLAMP); - - GradientDrawable gradDraw = new GradientDrawable(Orientation.TOP_BOTTOM, mSpectrumColorsRev); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, SLIDER_THICKNESS, PALETTE_DIM); - gradDraw.draw(mVerSliderCv); - - setHorSatFader(); - setHorValDimmer(); - setSatValPalette(); - setVerHueSlider(); - - mCoord[1] = PALETTE_DIM - (int)(mHSV[1] * PALETTE_DIM); - mCoord[2] = (int)(mHSV[2] * PALETTE_DIM); - - mCoord[0] = PALETTE_DIM - (int)((mHSV[0] / 360.0f) * PALETTE_DIM); - } - - /** - * Initialize a color chooser. - */ - private void initYUVPalette() { - int color = Color.HSVToColor(mHSV); - float r = Color.red(color) / 255.0f; - float g = Color.green(color) / 255.0f; - float b = Color.blue(color) / 255.0f; - - ColorMatrix cm = new ColorMatrix(); - cm.setRGB2YUV(); - final float[] a = cm.getArray(); - - mYUV[0] = a[0] * r + a[1] * g + a[2] * b; - mYUV[0] = pinToUnit(mYUV[0]); - mYUV[1] = a[5] * r + a[6] * g + a[7] * b; - mYUV[1] = pin(mYUV[1], -.5f, .5f); - mYUV[2] = a[10] * r + a[11] * g + a[12] * b; - mYUV[2] = pin(mYUV[2], -.5f, .5f); - - setUVPalette(); - setVerYSlider(); - - mCoord[1] = (int)((mYUV[1] + .5f) * PALETTE_DIM); - mCoord[2] = PALETTE_DIM - (int)((mYUV[2] + .5f) * PALETTE_DIM); - - mCoord[0] = PALETTE_DIM - (int)(mYUV[0] * PALETTE_DIM); - - //Warn the user that the UV 2D palette is only an estimate, but that the swatch is correct. - if (!mShownYUVWarnedAlready) - Toast.makeText(getContext(), "Note that the UV 2D palette only shows an estimate " + - "but the swatch is correct.", Toast.LENGTH_LONG).show(); - mShownYUVWarnedAlready = true; - } - - /** - * Initialize a color chooser. - */ - private void initRGBSliders() { - int color = Color.HSVToColor(mHSV); - mRGB[0] = Color.red(color); - mRGB[1] = Color.green(color); - mRGB[2] = Color.blue(color); - - setHorRSlider(); - setHorGSlider(); - setHorBSlider(); - - int col = Color.HSVToColor(mHSV); - mCoord[0] = (int)(PALETTE_DIM * (Color.red(col) / 255.0f)); - mCoord[1] = (int)(PALETTE_DIM * (Color.green(col) / 255.0f)); - mCoord[2] = (int)(PALETTE_DIM * (Color.blue(col) / 255.0f)); - } - - /** - * Initialize a color chooser. - */ - private void initHSVSliders() { - Shader shader = new LinearGradient(0, 0, PALETTE_DIM, 0, mSpectrumColors, null, Shader.TileMode.CLAMP); - - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, mSpectrumColors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[0]); - - setHorSatFader(); - setHorValDimmer(); - setHorSatSlider(); - setHorValSlider(); - - mCoord[0] = (int)((mHSV[0] / 360.0f) * PALETTE_DIM); - mCoord[1] = (int)(mHSV[1] * PALETTE_DIM); - mCoord[2] = (int)(mHSV[2] * PALETTE_DIM); - } - - /** - * Initialize a color chooser. - */ - private void initYUVSliders() { - int color = Color.HSVToColor(mHSV); - float r = Color.red(color) / 255.0f; - float g = Color.green(color) / 255.0f; - float b = Color.blue(color) / 255.0f; - - ColorMatrix cm = new ColorMatrix(); - cm.setRGB2YUV(); - final float[] a = cm.getArray(); - - mYUV[0] = a[0] * r + a[1] * g + a[2] * b; - mYUV[0] = pinToUnit(mYUV[0]); - mYUV[1] = a[5] * r + a[6] * g + a[7] * b; - mYUV[1] = pin(mYUV[1], -.5f, .5f); - mYUV[2] = a[10] * r + a[11] * g + a[12] * b; - mYUV[2] = pin(mYUV[2], -.5f, .5f); - - setHorYSlider(); - setHorUSlider(); - setHorVSlider(); - - mCoord[0] = (int)(mYUV[0] * PALETTE_DIM); - mCoord[1] = (int)((mYUV[1] + .5f) * PALETTE_DIM); - mCoord[2] = (int)((mYUV[2] + .5f) * PALETTE_DIM); - } - //NEW_METHOD_WORK_NEEDED_HERE //To add a new method, replicate and extend the set functions below, one per UI controller in the new method /** @@ -1488,361 +563,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Adjust a Paint which, when painted, fades its underlying object to show the effects of varying saturation. - */ - private void setOvalSatFader() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 0; - hsv[2] = (1 - mHSV[1]) * mHSV[2]; - int gray = Color.HSVToColor(hsv); - mSatFader.setColor(gray); - } - - /** - * Create a linear gradient shader to show variations in saturation. - */ - private void setVerSatSlider() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 1; - hsv[2] = mHSV[2]; - int col1 = Color.HSVToColor(hsv); - hsv[0] = mHSV[0]; - hsv[1] = 0; - hsv[2] = mHSV[2]; - int col2 = Color.HSVToColor(hsv); - - int colors[] = new int[2]; - colors[0] = col1; - colors[1] = col2; - GradientDrawable gradDraw = new GradientDrawable(Orientation.TOP_BOTTOM, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, SLIDER_THICKNESS, PALETTE_DIM); - gradDraw.draw(mVerSliderCv); - } - - /** - * Create a cardinal 2D palette with increasing value to the right and increasing saturation upwards, for a given hue. - */ - private void setSatValPalette() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 1; - hsv[2] = 1; - int hue = Color.HSVToColor(hsv); - - Shader shaderA = new LinearGradient(0, 0, PALETTE_DIM, 0, 0xFF000000, hue, Shader.TileMode.CLAMP); - Shader shaderB = new ComposeShader(shaderA, mSatValMask, PorterDuff.Mode.SCREEN); - mSatValPalette.setShader(shaderB); - } - - /** - * Place holder to keep the "setSlider" pattern, but there's nothing to do here. - */ - private void setVerHueSlider() { - //Nothing to do - } - - /** - * Adjust a Paint which, when painted, fades its underlying object to show the effects of varying saturation. - */ - private void setHorSatFader() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 0; - hsv[2] = 1.0f - mHSV[1]; - int gray = Color.HSVToColor(hsv); - mSatFader.setColor(gray); - } - - /** - * Adjust a Paint which, when painted, dims its underlying object to show the effects of varying value (brightness). - */ - private void setHorValDimmer() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 0; - hsv[2] = mHSV[2]; - int gray = Color.HSVToColor(hsv); - mValDimmer.setColor(gray); - } - - /** - * Create a cardinal 2D palette (in YUV space) with increasing U to the right and increasing V upwards, for a given Y. - * <P> - * This UV palette (U across, V up) for a given Y value is estimated by painting a U gradient across - * the top for maximum V, alpha-faded out at the bottom, and painting a U gradient across the bottom for - * minimum V, alpha-faded out at the top, then blending them. This fairly accurately simulates the UV palette, - * except for the center of the palette for extreme values of Y (very low or very high), - * in which the true darkness or lightness is not properly represented. - */ - private void setUVPalette() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - int col1, col2; - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[0] = mYUV[0]; - - //Top U, alpha-faded out at bottom - yuv[1] = -.5f; - yuv[2] = .5f; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[1] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - Shader shaderA = new LinearGradient(0, 0, PALETTE_DIM, 0, col1, col2, Shader.TileMode.CLAMP); - Shader shaderA2 = new ComposeShader(shaderA, mFadeInTop, PorterDuff.Mode.DST_IN); - - //Bottom U, alpha-faded out at top - yuv[1] = -.5f; - yuv[2] = -.5f; - matrixProductToByte(a, yuv, rgb); - col1 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - yuv[1] = .5f; - matrixProductToByte(a, yuv, rgb); - col2 = Color.rgb(rgb[0], rgb[1], rgb[2]); - - Shader shaderB = new LinearGradient(0, 0, PALETTE_DIM, 0, col1, col2, Shader.TileMode.CLAMP); - Shader shaderB2 = new ComposeShader(shaderB, mFadeInBottom, PorterDuff.Mode.DST_IN); - - Shader shaderC = new ComposeShader(shaderA2, shaderB2, PorterDuff.Mode.SCREEN); - - //The center of the palette will be too saturated and not bright or dark enough at extreme Y values. - //Let's compensate a bit here. Yes, this is a hack. - Shader shaderD = null; - Shader shader = null; - if (mYUV[0] >= .5) { - int gray = pinToByte((int)((mYUV[0] - .5f) * 512)); - int trans = pinToByte((int)((mYUV[0] - .5f) * 480)); - col1 = Color.argb(trans, gray, gray, gray); - shaderD = new RadialGradient(PALETTE_CENTER_X, PALETTE_CENTER_Y, PALETTE_RADIUS, col1, 0x00000000, Shader.TileMode.CLAMP); - shader = new ComposeShader(shaderC, shaderD, PorterDuff.Mode.SCREEN); - } - else { - int gray = pinToByte((int)((mYUV[0] + .5f) * 512)); - int trans = pinToByte((int)((1.0f - (mYUV[0] + .5f)) * 448)); - col1 = Color.argb(trans, gray, gray, gray); - shaderD = new RadialGradient(PALETTE_CENTER_X, PALETTE_CENTER_Y, PALETTE_RADIUS, col1, 0x00000000, Shader.TileMode.CLAMP); - shader = new ComposeShader(shaderC, shaderD, PorterDuff.Mode.DST_OUT); - } - - mUVPalette.setShader(shader); - } - - /** - * Create a linear gradient shader to show variations in Y (in YUV). - */ - private void setVerYSlider() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[1] = mYUV[1]; - yuv[2] = mYUV[2]; - int colors[] = new int[11]; - for (int i = 0; i <= 10; i++) { - yuv[0] = i / 10.0f; - matrixProductToByte(a, yuv, rgb); - colors[10 - i] = Color.rgb(rgb[0], rgb[1], rgb[2]); - } - - GradientDrawable gradDraw = new GradientDrawable(Orientation.TOP_BOTTOM, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, SLIDER_THICKNESS, PALETTE_DIM); - gradDraw.draw(mVerSliderCv); - } - - /** - * Create a linear gradient shader to show variations in red. - */ - private void setHorRSlider() { - int col1 = Color.rgb(0, mRGB[1], mRGB[2]); - int col2 = Color.rgb(255, mRGB[1], mRGB[2]); - - int colors[] = new int[2]; - colors[0] = col1; - colors[1] = col2; - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[0]); - } - - /** - * Create a linear gradient shader to show variations in green. - */ - private void setHorGSlider() { - int col1 = Color.rgb(mRGB[0], 0, mRGB[2]); - int col2 = Color.rgb(mRGB[0], 255, mRGB[2]); - - int colors[] = new int[2]; - colors[0] = col1; - colors[1] = col2; - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[1]); - } - - /** - * Create a linear gradient shader to show variations in blue. - */ - private void setHorBSlider() { - int col1 = Color.rgb(mRGB[0], mRGB[1], 0); - int col2 = Color.rgb(mRGB[0], mRGB[1], 255); - - int colors[] = new int[2]; - colors[0] = col1; - colors[1] = col2; - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[2]); - } - - /** - * Create a linear gradient shader to show variations in saturation. - */ - private void setHorSatSlider() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = 0; - hsv[2] = mHSV[2]; - int col1 = Color.HSVToColor(hsv); - hsv[0] = mHSV[0]; - hsv[1] = 1; - hsv[2] = mHSV[2]; - int col2 = Color.HSVToColor(hsv); - - int colors[] = new int[2]; - colors[0] = col1; - colors[1] = col2; - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[1]); - } - - /** - * Create a linear gradient shader to show variations in value. - */ - private void setHorValSlider() { - float[] hsv = new float[3]; - hsv[0] = mHSV[0]; - hsv[1] = mHSV[1]; - hsv[2] = 1; - int col = Color.HSVToColor(hsv); - - int colors[] = new int[2]; - colors[0] = 0xFF000000; - colors[1] = col; - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[2]); - } - - /** - * Create a linear gradient shader to show variations in Y (in YUV). - */ - private void setHorYSlider() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[1] = mYUV[1]; - yuv[2] = mYUV[2]; - int colors[] = new int[11]; - for (int i = 0; i <= 10; i++) { - yuv[0] = i / 10.0f; - matrixProductToByte(a, yuv, rgb); - colors[i] = Color.rgb(rgb[0], rgb[1], rgb[2]); - } - - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[0]); - } - - /** - * Create a linear gradient shader to show variations in U (in YUV). - */ - private void setHorUSlider() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[0] = mYUV[0]; - yuv[2] = mYUV[2]; - int colors[] = new int[11]; - for (int i = -5; i <= 5; i++) { - yuv[1] = i / 10.0f; - matrixProductToByte(a, yuv, rgb); - colors[i + 5] = Color.rgb(rgb[0], rgb[1], rgb[2]); - } - - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[1]); - } - - /** - * Create a linear gradient shader to show variations in V (in YUV). - */ - private void setHorVSlider() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - - float[] yuv = new float[3]; - int[] rgb = new int[3]; - - yuv[0] = mYUV[0]; - yuv[1] = mYUV[1]; - int colors[] = new int[11]; - for (int i = -5; i <= 5; i++) { - yuv[2] = i / 10.0f; - matrixProductToByte(a, yuv, rgb); - colors[i + 5] = Color.rgb(rgb[0], rgb[1], rgb[2]); - } - - GradientDrawable gradDraw = new GradientDrawable(Orientation.LEFT_RIGHT, colors); - gradDraw.setDither(true); - gradDraw.setLevel(10000); - gradDraw.setBounds(0, 0, PALETTE_DIM, SLIDER_THICKNESS); - gradDraw.draw(mHorSlidersCv[2]); - } - - /** * Report the correct tightly bounded dimensions of the view. */ @Override @@ -1930,19 +650,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Perform a matrix multiplication to convert between colorspaces, then scale the results by 255 on the assumption - * that the original output range was [0,1] and the required output range is [0,255]. - * @param a - * @param in - * @param out - */ - private void matrixProductToByte(float[] a, float[] in, int[] out) { - out[0] = pinToByte(round((a[0] * in[0] + a[1] * in[1] + a[2] * in[2]) * 255.0f)); - out[1] = pinToByte(round((a[5] * in[0] + a[6] * in[1] + a[7] * in[2]) * 255.0f)); - out[2] = pinToByte(round((a[10] * in[0] + a[11] * in[1] + a[12] * in[2]) * 255.0f)); - } - - /** * No clue what this does (some sort of average/mean I presume). It came with the original UberColorPickerDialog * in the API Demos and wasn't documented. I don't feel like spending any time figuring it out, I haven't looked at it at all. * @param s @@ -1986,53 +693,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Unused, thought I might need this at one point. - * <P> - * If the integer quantization inherent in the android Color HSB/RGB conversions is problematic - * use this function instead. Problems can occur when converting back and forth, especially when done repeatedly. - * @param hsv in the range[0,360][0,1][0,1]. - * @param rgb in the range[0,1][0,1][0,1]. - */ - private void HSV2RGB(float[] hsv, float[] rgb) { - float f = hsv[0] / 60.0f - (int)hsv[0] / 60; - float p = hsv[2] * (1 - hsv[1]); - float q = hsv[2] * (1 - f * hsv[1]); - float t = hsv[2] * (1 - (1 - f) * hsv[1]); - switch (((int)hsv[0] / 60) % 6) { - case 0: - rgb[0] = hsv[2]; - rgb[1] = t; - rgb[2] = p; - break; - case 1: - rgb[0] = q; - rgb[1] = hsv[2]; - rgb[2] = p; - break; - case 2: - rgb[0] = p; - rgb[1] = hsv[2]; - rgb[2] = t; - break; - case 3: - rgb[0] = p; - rgb[1] = q; - rgb[2] = hsv[2]; - break; - case 4: - rgb[0] = t; - rgb[1] = p; - rgb[2] = hsv[2]; - break; - case 5: - rgb[0] = hsv[2]; - rgb[1] = p; - rgb[2] = q; - break; - } - } - - /** * A standard point-in-rect routine. * @param x * @param y @@ -2051,9 +711,6 @@ public class UberColorPickerDialog extends Dialog { float x = event.getX(); float y = event.getY(); - //Track the time so we don't switch between sliders too quickly - long currTime = Calendar.getInstance().getTimeInMillis(); - //A longer event history implies faster trackball movement. //Use it to infer a larger jump and therefore faster palette/slider adjustment. int jump = event.getHistorySize() + 1; @@ -2078,71 +735,6 @@ public class UberColorPickerDialog extends Dialog { changeSlider(mFocusedControl, false, jump); } break; - case METHOD_HV_S_PALETTE: - if (mFocusedControl == 0) { - changeHVPalette(x, y, jump); - } - else if (mFocusedControl == 1) { - if (y < 0) - changeSlider(mFocusedControl, true, jump); - else if (y > 0) - changeSlider(mFocusedControl, false, jump); - } - break; - case METHOD_SV_H_PALETTE: - if (mFocusedControl == 0) { - changeSVPalette(x, y, jump); - } - else if (mFocusedControl == 1) { - if (y < 0) - changeSlider(mFocusedControl, true, jump); - else if (y > 0) - changeSlider(mFocusedControl, false, jump); - } - break; - case METHOD_UV_Y_PALETTE: - if (mFocusedControl == 0) { - changeUVPalette(x, y, jump); - } - else if (mFocusedControl == 1) { - if (y < 0) - changeSlider(mFocusedControl, true, jump); - else if (y > 0) - changeSlider(mFocusedControl, false, jump); - } - break; - case METHOD_RGB_SLIDERS: - case METHOD_HSV_SLIDERS: - case METHOD_YUV_SLIDERS: - if (y < 0) { - if (mFocusedControl == -1) { - mFocusedControl = 2; - invalidate(); - } - else if (mFocusedControl > 0 && currTime - mTimeOfLastSliderSwitch > 200) { - mTimeOfLastSliderSwitch = currTime; - mFocusedControl--; - invalidate(); - } - } - else if (y > 0) { - if (mFocusedControl == -1) { - mFocusedControl = 0; - invalidate(); - } - else if (mFocusedControl < 2 && currTime - mTimeOfLastSliderSwitch > 200) { - mTimeOfLastSliderSwitch = currTime; - mFocusedControl++; - invalidate(); - } - } - else if (x < 0 && mFocusedControl != -1) { - changeSlider(mFocusedControl, false, jump); - } - else if (x > 0 && mFocusedControl != -1) { - changeSlider(mFocusedControl, true, jump); - } - break; } } break; @@ -2214,136 +806,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Effect a trackball change to a 2D palette. - * @param x -1: negative x change, 0: no x change, +1: positive x change. - * @param y -1: negative y change, 0, no y change, +1: positive y change. - * @param jump the amount by which to change. - */ - private void changeHVPalette(float x, float y, int jump) { - int x2 = 0, y2 = 0; - if (x < 0) - x2 = -jump; - else if (x > 0) - x2 = jump; - if (y < 0) - y2 = -jump; - else if (y > 0) - y2 = jump; - - mCoord[0] += x2; - mCoord[2] += y2; - - if (mCoord[0] < -PALETTE_RADIUS) - mCoord[0] = -PALETTE_RADIUS; - else if (mCoord[0] > PALETTE_RADIUS) - mCoord[0] = PALETTE_RADIUS; - if (mCoord[2] < -PALETTE_RADIUS) - mCoord[2] = -PALETTE_RADIUS; - else if (mCoord[2] > PALETTE_RADIUS) - mCoord[2] = PALETTE_RADIUS; - - float radius = (float)java.lang.Math.sqrt(mCoord[0] * mCoord[0] + mCoord[2] * mCoord[2]); - if (radius > PALETTE_RADIUS) - radius = PALETTE_RADIUS; - - float angle = (float)java.lang.Math.atan2(mCoord[2], mCoord[0]); - // need to turn angle [-PI ... PI] into unit [0....1] - float unit = angle/(2*PI); - if (unit < 0) { - unit += 1; - } - - mCoord[0] = round(Math.cos(angle) * radius); - mCoord[2] = round(Math.sin(angle) * radius); - - int c = interpColor(mSpectrumColorsRev, unit); - float[] hsv = new float[3]; - Color.colorToHSV(c, hsv); - mHSV[0] = hsv[0]; - mHSV[2] = radius / PALETTE_RADIUS; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setOvalSatFader(); - setVerSatSlider(); - - invalidate(); - } - - /** - * Effect a trackball change to a 2D palette. - * @param x -1: negative x change, 0: no x change, +1: positive x change. - * @param y -1: negative y change, 0, no y change, +1: positive y change. - * @param jump the amount by which to change. - */ - private void changeSVPalette(float x, float y, int jump) { - int x2 = 0, y2 = 0; - if (x < 0) - x2 = -jump; - else if (x > 0) - x2 = jump; - if (y < 0) - y2 = -jump; - else if (y > 0) - y2 = jump; - - mCoord[1] += y2; - mCoord[2] += x2; - - mCoord[1] = (int)pin(mCoord[1], PALETTE_DIM); - mCoord[2] = (int)pin(mCoord[2], PALETTE_DIM); - - mHSV[1] = (float)(PALETTE_DIM - mCoord[1]) / (float)PALETTE_DIM; - mHSV[2] = (float)mCoord[2] / (float)PALETTE_DIM; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorSatFader(); - setHorValDimmer(); - - invalidate(); - } - - /** - * Effect a trackball change to a 2D palette. - * @param x -1: negative x change, 0: no x change, +1: positive x change. - * @param y -1: negative y change, 0, no y change, +1: positive y change. - * @param jump the amount by which to change. - */ - private void changeUVPalette(float x, float y, int jump) { - int x2 = 0, y2 = 0; - if (x < 0) - x2 = -jump; - else if (x > 0) - x2 = jump; - if (y < 0) - y2 = -jump; - else if (y > 0) - y2 = jump; - - mCoord[1] += x2; - mCoord[2] += y2; - - mCoord[1] = (int)pin(mCoord[1], PALETTE_DIM); - mCoord[2] = (int)pin(mCoord[2], PALETTE_DIM); - - mYUV[1] = ((float)mCoord[1] / (float)PALETTE_DIM) - .5f; - mYUV[2] = ((float)(PALETTE_DIM - mCoord[2]) / (float)PALETTE_DIM) - .5f; - updateAllFromYUV(); - - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - int[] rgb = new int[3]; - matrixProductToByte(a, mYUV, rgb); - mSwatchNew.setColor(Color.rgb(rgb[0], rgb[1], rgb[2])); - - setVerYSlider(); - - invalidate(); - } - - /** * Effect a trackball change to a 1D slider. * @param slider id of the slider to be effected * @param increase true if the change is an increase, false if a decrease @@ -2368,148 +830,6 @@ public class UberColorPickerDialog extends Dialog { invalidate(); } - else if (mMethod == METHOD_HV_S_PALETTE) { - //slider *must* equal 1 - - mHSV[1] += (increase ? jump : -jump) / 256.0f; - mHSV[1] = pinToUnit(mHSV[1]); - updateAllFromHSV(); - mCoord[1] = PALETTE_DIM - (int)(mHSV[1] * PALETTE_DIM); - - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setOvalSatFader(); - - invalidate(); - } - else if (mMethod == METHOD_SV_H_PALETTE) { - //slider *must* equal 1 - - mHSV[0] += ((increase ? jump : -jump) / 256.0f) * 360.0f; - mHSV[0] = pin(mHSV[0], 360); - updateAllFromHSV(); - mCoord[0] = PALETTE_DIM - (int)((mHSV[0] / 360.0f) * PALETTE_DIM); - - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setSatValPalette(); - - invalidate(); - } - else if (mMethod == METHOD_UV_Y_PALETTE) { - //slider *must* equal 1 - - mYUV[0] += (increase ? jump : -jump) / 256.0f; - mYUV[0] = pinToUnit(mYUV[0]); - updateAllFromYUV(); - mCoord[0] = PALETTE_DIM - (int)(mYUV[0] * PALETTE_DIM); - - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setUVPalette(); - - invalidate(); - } - else if (mMethod == METHOD_RGB_SLIDERS) { - int color = Color.HSVToColor(mHSV); - if (slider == 0) - mRGB[slider] = Color.red(color) + (increase ? jump : -jump); - else if (slider == 1) - mRGB[slider] = Color.green(color) + (increase ? jump : -jump); - else mRGB[slider] = Color.blue(color) + (increase ? jump : -jump); - - mRGB[slider] = pinToByte(mRGB[slider]); - updateAllFromRGB(); - mCoord[slider] = (int)(PALETTE_DIM * (mRGB[slider] / 255.0f)); - - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - if (slider != 0) - setHorRSlider(); - if (slider != 1) - setHorGSlider(); - if (slider != 2) - setHorBSlider(); - - invalidate(); - } - else if (mMethod == METHOD_HSV_SLIDERS) { - if (slider == 0) { - mHSV[slider] += ((increase ? jump : -jump) / 256.0f) * 360.0f; - mHSV[slider] = pin(mHSV[slider], 360); - mCoord[slider] = (int)((mHSV[slider] / 360.0f) * PALETTE_DIM); - } - else { - mHSV[slider] += (increase ? jump : -jump) / 256.0f; - mHSV[slider] = pinToUnit(mHSV[slider]); - mCoord[slider] = (int)(mHSV[slider] * PALETTE_DIM); - } - - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - if (slider == 0) { - setHorSatSlider(); - setHorValSlider(); - } - else if (slider == 1) { - setHorSatFader(); - setHorValSlider(); - } - else if (slider == 2) { - setHorValDimmer(); - setHorSatSlider(); - } - - invalidate(); - } - else if (mMethod == METHOD_YUV_SLIDERS) { - mYUV[slider] += (increase ? jump : -jump) / 256.0f; - if (slider == 0) - mYUV[slider] = pinToUnit(mYUV[slider]); - else mYUV[slider] = pin(mYUV[slider], -.5f, .5f); - - updateAllFromYUV(); - - if (slider == 0) - mCoord[slider] = (int)(mYUV[slider] * PALETTE_DIM); - else mCoord[slider] = (int)((mYUV[slider] + .5f) * PALETTE_DIM); - - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - if (slider != 0) - setHorYSlider(); - if (slider != 1) - setHorUSlider(); - if (slider != 2) - setHorVSlider(); - - invalidate(); - } - } - - //NEW_METHOD_WORK_NEEDED_HERE - //If the new method doesn't operate on HSV (specifically, on the variable mHSV), and also doesn't operate on - //mRGB or mYUV, which are already implemented here, then the pattern below needs to be replicated for the additional colorspace. - //Namely, it is critical that all representations (HSV, RGB, YUV, Hex, etc.) be maintained at all times. - /** - * Keep all colorspace representations in sync. - */ - private void updateHSVfromRGB() { - Color.RGBToHSV(mRGB[0], mRGB[1], mRGB[2], mHSV); - if (isGray(mRGB)) - mHSV[1] = 0; - } - - /** - * Keep all colorspace representations in sync. - */ - private void updateHSVfromYUV() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - matrixProductToByte(a, mYUV, mRGB); - updateHSVfromRGB(); } /** @@ -2525,16 +845,6 @@ public class UberColorPickerDialog extends Dialog { /** * Keep all colorspace representations in sync. */ - private void updateRGBfromYUV() { - ColorMatrix cm = new ColorMatrix(); - cm.setYUV2RGB(); - final float[] a = cm.getArray(); - matrixProductToByte(a, mYUV, mRGB); - } - - /** - * Keep all colorspace representations in sync. - */ private void updateYUVfromRGB() { float r = mRGB[0] / 255.0f; float g = mRGB[1] / 255.0f; @@ -2579,40 +889,6 @@ public class UberColorPickerDialog extends Dialog { } /** - * Keep all colorspace representations in sync. - */ - private void updateAllFromRGB() { - //Update mHSV - if (mHSVenabled || mHexenabled) - updateHSVfromRGB(); - - //Update mYUV - if (mYUVenabled) - updateYUVfromRGB(); - - //Update mHexStr - if (mHexenabled) - updateHexFromHSV(); - } - - /** - * Keep all colorspace representations in sync. - */ - private void updateAllFromYUV() { - //Update mRGB - if (mRGBenabled || mHSVenabled || mHexenabled) - updateRGBfromYUV(); - - //Update mYUV - if (mHSVenabled) - updateHSVfromRGB(); - - //Update mHexStr - if (mHexenabled) - updateHexFromHSV(); - } - - /** * Process touch events: down, move, and up */ @Override @@ -2621,7 +897,6 @@ public class UberColorPickerDialog extends Dialog { float y = event.getY(); //Generate coordinates which are palette=local with the origin at the upper left of the main 2D palette - int x2 = (int)(pin(round(x - PALETTE_POS_X), PALETTE_DIM)); int y2 = (int)(pin(round(y - PALETTE_POS_Y), PALETTE_DIM)); //Generate coordinates which are palette-local with the origin at the center of the main 2D palette @@ -2632,17 +907,6 @@ public class UberColorPickerDialog extends Dialog { boolean inSwatchOld = ptInRect(round(x), round(y), mOldSwatchRect); boolean inSwatchNew = ptInRect(round(x), round(y), mNewSwatchRect); - //Is the event in a method selector icon? - boolean inMethodSelector[] = new boolean[NUM_ENABLED_METHODS]; - for (int i = 0; i < NUM_ENABLED_METHODS; i++) - inMethodSelector[i] = false; - for (int i = 0; i < NUM_ENABLED_METHODS; i++) { - if (ptInRect(round(x), round(y), mMethodSelectorRects[i])) { - inMethodSelector[i] = true; - break; - } - } - //Get the event's distance from the center of the main 2D palette float radius = (float)java.lang.Math.sqrt(circlePinnedX * circlePinnedX + circlePinnedY * circlePinnedY); @@ -2653,17 +917,9 @@ public class UberColorPickerDialog extends Dialog { if (radius > PALETTE_RADIUS) radius = PALETTE_RADIUS; - //Is the event in a square palette - boolean inSquarePalette = ptInRect(round(x), round(y), mPaletteRect); - //Is the event in a vertical slider to the right of the main 2D palette boolean inVerSlider = ptInRect(round(x), round(y), mVerSliderRect); - //Is the event in a horizontal slider within the main "palette's" region - boolean inFirstHorSlider = ptInRect(round(x), round(y), mHorSliderRects[0]); - boolean inSecondHorSlider = ptInRect(round(x), round(y), mHorSliderRects[1]); - boolean inThirdHorSlider = ptInRect(round(x), round(y), mHorSliderRects[2]); - switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mTracking = TRACKED_NONE; @@ -2675,23 +931,6 @@ public class UberColorPickerDialog extends Dialog { //NEW_METHOD_WORK_NEEDED_HERE //To add a new method, replicate and extend the last entry in this list - else if (NUM_ENABLED_METHODS > 0 && inMethodSelector[0]) - mTracking = mMethodSelectRectMap[0]; - else if (NUM_ENABLED_METHODS > 1 && inMethodSelector[1]) - mTracking = mMethodSelectRectMap[1]; - else if (NUM_ENABLED_METHODS > 2 && inMethodSelector[2]) - mTracking = mMethodSelectRectMap[2]; - else if (NUM_ENABLED_METHODS > 3 && inMethodSelector[3]) - mTracking = mMethodSelectRectMap[3]; - else if (NUM_ENABLED_METHODS > 4 && inMethodSelector[4]) - mTracking = mMethodSelectRectMap[4]; - else if (NUM_ENABLED_METHODS > 5 && inMethodSelector[5]) - mTracking = mMethodSelectRectMap[5]; - else if (NUM_ENABLED_METHODS > 6 && inMethodSelector[6]) - mTracking = mMethodSelectRectMap[6]; - - //NEW_METHOD_WORK_NEEDED_HERE - //To add a new method, replicate and extend the last entry in this list else if (mMethod == METHOD_HS_V_PALETTE) { if (inOvalPalette) { mTracking = TRACK_HS_PALETTE; @@ -2702,78 +941,6 @@ public class UberColorPickerDialog extends Dialog { mFocusedControl = 1; } } - else if (mMethod == METHOD_HV_S_PALETTE) { - if (inOvalPalette) { - mTracking = TRACK_HV_PALETTE; - mFocusedControl = 0; - } - else if (inVerSlider) { - mTracking = TRACK_VER_S_SLIDER; - mFocusedControl = 1; - } - } - else if (mMethod == METHOD_SV_H_PALETTE) { - if (inSquarePalette) { - mTracking = TRACK_SV_PALETTE; - mFocusedControl = 0; - } - else if (inVerSlider) { - mTracking = TRACK_VER_H_SLIDER; - mFocusedControl = 1; - } - } - else if (mMethod == METHOD_UV_Y_PALETTE) { - if (inSquarePalette) { - mTracking = TRACK_UV_PALETTE; - mFocusedControl = 0; - } - else if (inVerSlider) { - mTracking = TRACK_VER_Y_SLIDER; - mFocusedControl = 1; - } - } - else if (mMethod == METHOD_RGB_SLIDERS) { - if (inFirstHorSlider) { - mTracking = TRACK_R_SLIDER; - mFocusedControl = 0; - } - else if (inSecondHorSlider) { - mTracking = TRACK_G_SLIDER; - mFocusedControl = 1; - } - else if (inThirdHorSlider) { - mTracking = TRACK_B_SLIDER; - mFocusedControl = 2; - } - } - else if (mMethod == METHOD_HSV_SLIDERS) { - if (inFirstHorSlider) { - mTracking = TRACK_H_SLIDER; - mFocusedControl = 0; - } - else if (inSecondHorSlider) { - mTracking = TRACK_S_SLIDER; - mFocusedControl = 1; - } - else if (inThirdHorSlider) { - mTracking = TRACK_HOR_VALUE_SLIDER; - mFocusedControl = 2; - } - } - else if (mMethod == METHOD_YUV_SLIDERS) { - if (inFirstHorSlider) { - mTracking = TRACK_HOR_Y_SLIDER; - mFocusedControl = 0; - } - else if (inSecondHorSlider) { - mTracking = TRACK_U_SLIDER; - mFocusedControl = 1; - } - else if (inThirdHorSlider) { - mTracking = TRACK_V_SLIDER; - mFocusedControl = 2; - } - } case MotionEvent.ACTION_MOVE: //NEW_METHOD_WORK_NEEDED_HERE //To add a new method, replicate and extend the entries in this list, @@ -2815,242 +982,12 @@ public class UberColorPickerDialog extends Dialog { invalidate(); } } - else if (mTracking == TRACK_HV_PALETTE) { - float angle = (float)java.lang.Math.atan2(circlePinnedY, circlePinnedX); - // need to turn angle [-PI ... PI] into unit [0....1] - float unit = angle/(2*PI); - if (unit < 0) { - unit += 1; - } - - mCoord[0] = round(Math.cos(angle) * radius); - mCoord[2] = round(Math.sin(angle) * radius); - - int c = interpColor(mSpectrumColorsRev, unit); - float[] hsv = new float[3]; - Color.colorToHSV(c, hsv); - mHSV[0] = hsv[0]; - mHSV[2] = radius / PALETTE_RADIUS; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setOvalSatFader(); - setVerSatSlider(); - - invalidate(); - } - else if (mTracking == TRACK_VER_S_SLIDER) { - if (mCoord[1] != y2) { - mCoord[1] = y2; - float value = 1.0f - (float)y2 / (float)PALETTE_DIM; - - mHSV[1] = value; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setOvalSatFader(); - - invalidate(); - } - } - else if (mTracking == TRACK_SV_PALETTE) { - if (mCoord[1] != y2 || mCoord[2] != x2) { - mCoord[1] = y2; - mCoord[2] = x2; - - mHSV[1] = (float)(PALETTE_DIM - mCoord[1]) / (float)PALETTE_DIM; - mHSV[2] = (float)mCoord[2] / (float)PALETTE_DIM; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorSatFader(); - setHorValDimmer(); - - invalidate(); - } - } - else if (mTracking == TRACK_VER_H_SLIDER) { - if (mCoord[0] != y2) { - mCoord[0] = y2; - float hue = 360.0f - 360.0f * ((float)y2 / (float)PALETTE_DIM); - - mHSV[0] = hue; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setSatValPalette(); - - invalidate(); - } - } - else if (mTracking == TRACK_UV_PALETTE) { - if (mCoord[1] != y2 || mCoord[2] != x2) { - mCoord[1] = x2; - mCoord[2] = y2; - - mYUV[1] = ((float)mCoord[1] / (float)PALETTE_DIM) - .5f; - mYUV[2] = ((float)(PALETTE_DIM - mCoord[2]) / (float)PALETTE_DIM) - .5f; - updateAllFromYUV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setVerYSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_VER_Y_SLIDER) { - if (mCoord[0] != y2) { - mCoord[0] = y2; - - mYUV[0] = 1.0f - (float)mCoord[0] / (float)PALETTE_DIM; - updateAllFromYUV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setUVPalette(); - - invalidate(); - } - } - else if (mTracking == TRACK_R_SLIDER) { - if (mCoord[0] != x2) { - mCoord[0] = x2; - int int255 = sliderPosTo255(mCoord[0]); - - mRGB[0] = int255; - updateAllFromRGB(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorGSlider(); - setHorBSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_G_SLIDER) { - if (mCoord[1] != x2) { - mCoord[1] = x2; - int int255 = sliderPosTo255(mCoord[1]); - - mRGB[1] = int255; - updateAllFromRGB(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorRSlider(); - setHorBSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_B_SLIDER) { - if (mCoord[2] != x2) { - mCoord[2] = x2; - int int255 = sliderPosTo255(mCoord[2]); - - mRGB[2] = int255; - updateAllFromRGB(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorRSlider(); - setHorGSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_H_SLIDER) { - if (mCoord[0] != x2) { - mCoord[0] = x2; - float hue = 360.0f * ((float)mCoord[0] / (float)PALETTE_DIM); - - mHSV[0] = hue; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorSatSlider(); - setHorValSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_S_SLIDER) { - if (mCoord[1] != x2) { - mCoord[1] = x2; - float sat = (float)mCoord[1] / (float)PALETTE_DIM; - - mHSV[1] = sat; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorSatFader(); - setHorValSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_HOR_VALUE_SLIDER) { - if (mCoord[2] != x2) { - mCoord[2] = x2; - float val = (float)mCoord[2] / (float)PALETTE_DIM; - - mHSV[2] = val; - updateAllFromHSV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorValDimmer(); - setHorSatSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_HOR_Y_SLIDER) { - if (mCoord[0] != x2) { - mCoord[0] = x2; - - mYUV[0] = (float)mCoord[0] / (float)PALETTE_DIM; - updateAllFromYUV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorUSlider(); - setHorVSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_U_SLIDER) { - if (mCoord[1] != x2) { - mCoord[1] = x2; - - mYUV[1] = ((float)mCoord[1] / (float)PALETTE_DIM) - .5f; - updateAllFromYUV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorYSlider(); - setHorVSlider(); - - invalidate(); - } - } - else if (mTracking == TRACK_V_SLIDER) { - if (mCoord[2] != x2) { - mCoord[2] = x2; - - mYUV[2] = ((float)mCoord[2] / (float)PALETTE_DIM) - .5f; - updateAllFromYUV(); - mSwatchNew.setColor(Color.HSVToColor(mHSV)); - - setHorYSlider(); - setHorUSlider(); - - invalidate(); - } - } break; case MotionEvent.ACTION_UP: //NEW_METHOD_WORK_NEEDED_HERE //To add a new method, replicate and extend the last entry in this list. if (mTracking == TRACK_SWATCH_OLD && inSwatchOld) { Color.colorToHSV(mOriginalColor, mHSV); - if (isGray(mOriginalColor)) - mHSV[1] = 0; mSwatchNew.setColor(mOriginalColor); initUI(); invalidate(); @@ -3059,41 +996,6 @@ public class UberColorPickerDialog extends Dialog { mListener.colorChanged(mSwatchNew.getColor()); invalidate(); } - else if (NUM_ENABLED_METHODS > 0 && mTracking == mMethodSelectRectMap[0] && inMethodSelector[0]) { - mMethod = mMethodSelectRectMap[0]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 1 && mTracking == mMethodSelectRectMap[1] && inMethodSelector[1]) { - mMethod = mMethodSelectRectMap[1]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 2 && mTracking == mMethodSelectRectMap[2] && inMethodSelector[2]) { - mMethod = mMethodSelectRectMap[2]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 3 && mTracking == mMethodSelectRectMap[3] && inMethodSelector[3]) { - mMethod = mMethodSelectRectMap[3]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 4 && mTracking == mMethodSelectRectMap[4] && inMethodSelector[4]) { - mMethod = mMethodSelectRectMap[4]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 5 && mTracking == mMethodSelectRectMap[5] && inMethodSelector[5]) { - mMethod = mMethodSelectRectMap[5]; - initUI(); - invalidate(); - } - else if (NUM_ENABLED_METHODS > 6 && mTracking == mMethodSelectRectMap[6] && inMethodSelector[6]) { - mMethod = mMethodSelectRectMap[6]; - initUI(); - invalidate(); - } mTracking= TRACKED_NONE; break; |