From ae4d2a4f166f16c3ca5d4264e9bcacf53289bdc5 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sun, 22 Mar 2020 11:45:45 +0100 Subject: [PATCH] Always show alpha slider in ColorPicker Also some code cleanup. --- .../colorpicker/ColorPickerDialog.java | 6 - .../colorpicker/ColorPickerPreference.java | 10 - .../colorpicker/ColorPickerView.java | 206 +++++------------- DroidFishApp/src/main/res/xml/preferences.xml | 19 -- 4 files changed, 52 insertions(+), 189 deletions(-) diff --git a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerDialog.java b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerDialog.java index 84db68a..fe74111 100644 --- a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerDialog.java +++ b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerDialog.java @@ -61,9 +61,7 @@ public class ColorPickerDialog public void reInitUI() { int oldColor = mOldColor.getColor(); int newColor = mNewColor.getColor(); - boolean alphaSlider = mColorPicker.getAlphaSliderVisible(); setUp(oldColor, newColor); - setAlphaSliderVisible(alphaSlider); } private void setUp(int oldColor, int newColor) { @@ -95,10 +93,6 @@ public class ColorPickerDialog mNewColor.setColor(color); } - public void setAlphaSliderVisible(boolean visible) { - mColorPicker.setAlphaSliderVisible(visible); - } - /** * Set a OnColorChangedListener to get notified when the color * selected by the user has changed. diff --git a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerPreference.java b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerPreference.java index 3552f95..83d4ba7 100644 --- a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerPreference.java +++ b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerPreference.java @@ -48,7 +48,6 @@ public class ColorPickerPreference private int mDefaultValue = Color.BLACK; private int mValue = Color.BLACK; private float mDensity = 0; - private boolean mAlphaSliderEnabled = false; private static final String androidns = "http://schemas.android.com/apk/res/android"; @@ -90,7 +89,6 @@ public class ColorPickerPreference mDefaultValue = context.getResources().getInteger(resourceId); } } - mAlphaSliderEnabled = attrs.getAttributeBooleanValue(null, "alphaSlider", false); } mValue = mDefaultValue; } @@ -195,8 +193,6 @@ public class ColorPickerPreference private void showDialog() { mDialog = new ColorPickerDialog(getContext(), getValue(), getTitle()); - if (mAlphaSliderEnabled) - mDialog.setAlphaSliderVisible(true); mDialog.setOnColorChangedListener(this); mDialog.setOnDismissListener(this); addRemoveConfigChangedListener(); @@ -222,12 +218,6 @@ public class ColorPickerPreference if (mDialog != null) mDialog.reInitUI(); } - /** - * Toggle Alpha Slider visibility (by default it's disabled) - */ - public void setAlphaSliderEnabled(boolean enable) { - mAlphaSliderEnabled = enable; - } private static String convertToARGB(int color) { String alpha = Integer.toHexString(Color.alpha(color)); diff --git a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerView.java b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerView.java index a2f06f7..243fdae 100644 --- a/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerView.java +++ b/DroidFishApp/src/main/java/net/margaritov/preference/colorpicker/ColorPickerView.java @@ -35,9 +35,7 @@ import android.view.View; /** * Displays a color picker to the user and allow them - * to select a color. A slider for the alpha channel is - * also available. Enable it by setting - * setAlphaSliderVisible(boolean) to true. + * to select a color. * @author Daniel Nilsson */ @SuppressLint("ClickableViewAccessibility") @@ -77,27 +75,24 @@ public class ColorPickerView extends View { private OnColorChangedListener mListener; - private Paint mSatValPaint; - private Paint mSatValTrackerPaint; + private Paint mSatValPaint = new Paint(); + private Paint mSatValTrackerPaint = new Paint(); - private Paint mHuePaint; - private Paint mHueTrackerPaint; + private Paint mHuePaint = new Paint(); + private Paint mHueTrackerPaint = new Paint(); - private Paint mAlphaPaint; - private Paint mBorderPaint; + private Paint mAlphaPaint = new Paint(); + private Paint mBorderPaint = new Paint(); private Shader mValShader; - private Shader mSatShader; private Shader mHueShader; - private Shader mAlphaShader; - private int mAlpha = 0xff; - private float mHue = 360f; + private int mAlpha = 0xff; + private float mHue = 360f; private float mSat = 0f; private float mVal = 0f; - private int mBorderColor = 0xff6E6E6E; - private boolean mShowAlphaPanel = false; + private final int mBorderColor = 0xff6E6E6E; /** * Offset from the edge we must have or else @@ -106,7 +101,6 @@ public class ColorPickerView extends View { */ private float mDrawingOffset; - /* * Distance form the edges of the view * of where we are allowed to draw. @@ -114,7 +108,7 @@ public class ColorPickerView extends View { private RectF mDrawingRect; private RectF mSatValRect; - private RectF mHueRect; + private RectF mHueRect; private RectF mAlphaRect; private AlphaPatternDrawable mAlphaPattern; @@ -144,7 +138,7 @@ public class ColorPickerView extends View { RECTANGLE_TRACKER_OFFSET *= mDensity; HUE_PANEL_WIDTH *= mDensity; ALPHA_PANEL_HEIGHT *= mDensity; - PANEL_SPACING = PANEL_SPACING * mDensity; + PANEL_SPACING *= mDensity; mDrawingOffset = calculateRequiredOffset(); @@ -155,13 +149,6 @@ public class ColorPickerView extends View { } private void initPaintTools() { - mSatValPaint = new Paint(); - mSatValTrackerPaint = new Paint(); - mHuePaint = new Paint(); - mHueTrackerPaint = new Paint(); - mAlphaPaint = new Paint(); - mBorderPaint = new Paint(); - mSatValTrackerPaint.setStyle(Style.STROKE); mSatValTrackerPaint.setStrokeWidth(2f * mDensity); mSatValTrackerPaint.setAntiAlias(true); @@ -217,8 +204,8 @@ public class ColorPickerView extends View { int rgb = Color.HSVToColor(new float[]{mHue,1f,1f}); - mSatShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, - 0xffffffff, rgb, TileMode.CLAMP); + Shader mSatShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, + 0xffffffff, rgb, TileMode.CLAMP); ComposeShader mShader = new ComposeShader(mValShader, mSatShader, PorterDuff.Mode.MULTIPLY); mSatValPaint.setShader(mShader); @@ -226,11 +213,11 @@ public class ColorPickerView extends View { Point p = satValToPoint(mSat, mVal); + float r = PALETTE_CIRCLE_TRACKER_RADIUS; mSatValTrackerPaint.setColor(0xff000000); - canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS - 1f * mDensity, mSatValTrackerPaint); - + canvas.drawCircle(p.x, p.y, r - 1f * mDensity, mSatValTrackerPaint); mSatValTrackerPaint.setColor(0xffdddddd); - canvas.drawCircle(p.x, p.y, PALETTE_CIRCLE_TRACKER_RADIUS, mSatValTrackerPaint); + canvas.drawCircle(p.x, p.y, r, mSatValTrackerPaint); } private void drawHuePanel(Canvas canvas) { @@ -239,10 +226,10 @@ public class ColorPickerView extends View { if (BORDER_WIDTH_PX > 0) { mBorderPaint.setColor(mBorderColor); canvas.drawRect(rect.left - BORDER_WIDTH_PX, - rect.top - BORDER_WIDTH_PX, - rect.right + BORDER_WIDTH_PX, - rect.bottom + BORDER_WIDTH_PX, - mBorderPaint); + rect.top - BORDER_WIDTH_PX, + rect.right + BORDER_WIDTH_PX, + rect.bottom + BORDER_WIDTH_PX, + mBorderPaint); } if (mHueShader == null) { @@ -267,7 +254,7 @@ public class ColorPickerView extends View { } private void drawAlphaPanel(Canvas canvas) { - if (!mShowAlphaPanel || mAlphaRect == null || mAlphaPattern == null) + if (mAlphaRect == null || mAlphaPattern == null) return; final RectF rect = mAlphaRect; @@ -287,8 +274,8 @@ public class ColorPickerView extends View { int color = Color.HSVToColor(hsv); int acolor = Color.HSVToColor(0, hsv); - mAlphaShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, - color, acolor, TileMode.CLAMP); + Shader mAlphaShader = new LinearGradient(rect.left, rect.top, rect.right, rect.top, + color, acolor, TileMode.CLAMP); mAlphaPaint.setShader(mAlphaShader); @@ -311,89 +298,57 @@ public class ColorPickerView extends View { final RectF rect = mHueRect; final float height = rect.height(); - Point p = new Point(); - - p.y = (int) (height - (hue * height / 360f) + rect.top); - p.x = (int) rect.left; - - return p; + return new Point((int) rect.left, + (int) (height - (hue * height / 360f) + rect.top)); } private Point satValToPoint(float sat, float val) { final RectF rect = mSatValRect; - final float height = rect.height(); final float width = rect.width(); + final float height = rect.height(); - Point p = new Point(); - p.x = (int) (sat * width + rect.left); - p.y = (int) ((1f - val) * height + rect.top); - - return p; + return new Point((int) (sat * width + rect.left), + (int) ((1f - val) * height + rect.top)); } private Point alphaToPoint(int alpha) { final RectF rect = mAlphaRect; final float width = rect.width(); - Point p = new Point(); - p.x = (int) (width - (alpha * width / 0xff) + rect.left); - p.y = (int) rect.top; + return new Point((int) (width - (alpha * width / 0xff) + rect.left), + (int) rect.top); + } - return p; + private static float clampF(float val, float min, float max) { + return Math.min(Math.max(val, min), max); } private float[] pointToSatVal(float x, float y) { final RectF rect = mSatValRect; - float[] result = new float[2]; float width = rect.width(); float height = rect.height(); - if (x < rect.left) - x = 0f; - else if (x > rect.right) - x = width; - else - x = x - rect.left; + x = clampF(x - rect.left, 0f, width); + y = clampF(y - rect.top, 0f, height); - if (y < rect.top) - y = 0f; - else if (y > rect.bottom) - y = height; - else - y = y - rect.top; - - result[0] = 1.f / width * x; - result[1] = 1.f - (1.f / height * y); - - return result; + return new float[]{ x / width, 1f - y / height }; } private float pointToHue(float y) { final RectF rect = mHueRect; float height = rect.height(); - - if (y < rect.top) - y = 0f; - else if (y > rect.bottom) - y = height; - else - y = y - rect.top; + y = clampF(y - rect.top, 0f, height); return 360f - (y * 360f / height); } private int pointToAlpha(int x) { final RectF rect = mAlphaRect; - final int width = (int) rect.width(); - if (x < rect.left) - x = 0; - else if (x > rect.right) - x = width; - else - x = x - (int)rect.left; + final int width = (int) rect.width(); + x = Math.min(Math.max(x - (int)rect.left, 0), width); return 0xff - (x * 0xff / width); } @@ -451,9 +406,6 @@ public class ColorPickerView extends View { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int width; - int height; - int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); @@ -462,27 +414,16 @@ public class ColorPickerView extends View { widthAllowed = chooseWidth(widthMode, widthAllowed); heightAllowed = chooseHeight(heightMode, heightAllowed); - - if (!mShowAlphaPanel) { - height = (int) (widthAllowed - PANEL_SPACING - HUE_PANEL_WIDTH); - //If calculated height (based on the width) is more than the allowed height. - if (height > heightAllowed || getTag().equals("landscape")) { - height = heightAllowed; - width = (int) (height + PANEL_SPACING + HUE_PANEL_WIDTH); - } else { - width = widthAllowed; - } + int width = (int) (heightAllowed - ALPHA_PANEL_HEIGHT + HUE_PANEL_WIDTH); + int height; + if (width > widthAllowed) { + width = widthAllowed; + height = (int) (widthAllowed - HUE_PANEL_WIDTH + ALPHA_PANEL_HEIGHT); } else { - width = (int) (heightAllowed - ALPHA_PANEL_HEIGHT + HUE_PANEL_WIDTH); - if (width > widthAllowed) { - width = widthAllowed; - height = (int) (widthAllowed - HUE_PANEL_WIDTH + ALPHA_PANEL_HEIGHT); - } else { - height = heightAllowed; - } + height = heightAllowed; } - + setMeasuredDimension(width, height); } @@ -504,15 +445,13 @@ public class ColorPickerView extends View { private int getPreferredWidth() { int width = getPreferredHeight(); - if (mShowAlphaPanel) - width -= (PANEL_SPACING + ALPHA_PANEL_HEIGHT); + width -= PANEL_SPACING + ALPHA_PANEL_HEIGHT; return (int) (width + HUE_PANEL_WIDTH + PANEL_SPACING); } private int getPreferredHeight() { int height = (int)(200 * mDensity); - if (mShowAlphaPanel) - height += PANEL_SPACING + ALPHA_PANEL_HEIGHT; + height += PANEL_SPACING + ALPHA_PANEL_HEIGHT; return height; } @@ -534,9 +473,7 @@ public class ColorPickerView extends View { private void setUpSatValRect() { final RectF dRect = mDrawingRect; float panelSide = dRect.height() - BORDER_WIDTH_PX * 2; - - if (mShowAlphaPanel) - panelSide -= PANEL_SPACING + ALPHA_PANEL_HEIGHT; + panelSide -= PANEL_SPACING + ALPHA_PANEL_HEIGHT; float left = dRect.left + BORDER_WIDTH_PX; float top = dRect.top + BORDER_WIDTH_PX; @@ -551,17 +488,13 @@ public class ColorPickerView extends View { float left = dRect.right - HUE_PANEL_WIDTH + BORDER_WIDTH_PX; float top = dRect.top + BORDER_WIDTH_PX; - float bottom = dRect.bottom - BORDER_WIDTH_PX - - (mShowAlphaPanel ? (PANEL_SPACING + ALPHA_PANEL_HEIGHT) : 0); + float bottom = dRect.bottom - BORDER_WIDTH_PX - (PANEL_SPACING + ALPHA_PANEL_HEIGHT); float right = dRect.right - BORDER_WIDTH_PX; mHueRect = new RectF(left, top, right, bottom); } private void setUpAlphaRect() { - if (!mShowAlphaPanel) - return; - final RectF dRect = mDrawingRect; float left = dRect.left + BORDER_WIDTH_PX; @@ -575,8 +508,7 @@ public class ColorPickerView extends View { mAlphaPattern.setBounds(Math.round(mAlphaRect.left), Math.round(mAlphaRect.top), Math.round(mAlphaRect.right), - Math.round(mAlphaRect.bottom) - ); + Math.round(mAlphaRect.bottom)); } /** @@ -595,14 +527,6 @@ public class ColorPickerView extends View { return Color.HSVToColor(mAlpha, new float[]{mHue,mSat,mVal}); } - /** - * Set the color the view should show. - * @param color The color that should be selected. - */ - public void setColor(int color) { - setColor(color, false); - } - /** * Set the color this view should show. * @param color The color that should be selected. @@ -640,30 +564,4 @@ public class ColorPickerView extends View { public float getDrawingOffset() { return mDrawingOffset; } - - /** - * Set if the user is allowed to adjust the alpha panel. Default is false. - * If it is set to false no alpha will be set. - */ - public void setAlphaSliderVisible(boolean visible) { - if (mShowAlphaPanel != visible) { - mShowAlphaPanel = visible; - - /* - * Reset all shader to force a recreation. - * Otherwise they will not look right after - * the size of the view has changed. - */ - mValShader = null; - mSatShader = null; - mHueShader = null; - mAlphaShader = null; - - requestLayout(); - } - } - - public boolean getAlphaSliderVisible() { - return mShowAlphaPanel; - } } diff --git a/DroidFishApp/src/main/res/xml/preferences.xml b/DroidFishApp/src/main/res/xml/preferences.xml index 9528158..8c0702f 100644 --- a/DroidFishApp/src/main/res/xml/preferences.xml +++ b/DroidFishApp/src/main/res/xml/preferences.xml @@ -225,91 +225,76 @@ @@ -318,25 +303,21 @@