]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/HueRing.java
fix ring placement in the color selector dialog
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / HueRing.java
index 493e6658d4e18f89477d72571427eeb7f23bdd12..0a759a0a6739c0c459e8564a4c2f1905f88e04c9 100644 (file)
@@ -1,18 +1,18 @@
 /*
  * Copyright © 2019 Damyan Ivanov.
- *  This file is part of MoLe.
- *  MoLe is free software: you can distribute it and/or modify it
- *  under the term of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your opinion), any later version.
+ * This file is part of MoLe.
+ * MoLe is free software: you can distribute it and/or modify it
+ * under the term of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your opinion), any later version.
  *
- *  MoLe is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- *  GNU General Public License terms for details.
+ * MoLe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License terms for details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with Mobile-Ledger. If not, see <https://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
  */
 
 package net.ktnx.mobileledger.ui;
@@ -29,6 +29,7 @@ import android.view.MotionEvent;
 import android.view.View;
 
 import net.ktnx.mobileledger.utils.Colors;
+import net.ktnx.mobileledger.utils.DimensionUtils;
 
 import androidx.annotation.Nullable;
 
@@ -92,6 +93,8 @@ public class HueRing extends View {
 
         setInitialHue(initialHueDegrees);
         setHue(initialHueDegrees);
+
+        padding = DimensionUtils.dp2px(getContext(), 4);
     }
     public int getColor() {
         return color;
@@ -100,10 +103,14 @@ public class HueRing extends View {
         return hueDegrees;
     }
     public void setHue(int hueDegrees) {
-        // round to 15 degrees
-        int rem = hueDegrees % 15;
-        if (rem < 8) hueDegrees -= rem;
-        else hueDegrees += 15 - rem;
+        if (hueDegrees == -1) hueDegrees = Colors.DEFAULT_HUE_DEG;
+
+        if (hueDegrees != Colors.DEFAULT_HUE_DEG) {
+            // round to 15 degrees
+            int rem = hueDegrees % 15;
+            if (rem < 8) hueDegrees -= rem;
+            else hueDegrees += 15 - rem;
+        }
 
         this.hueDegrees = hueDegrees;
         this.color = Colors.getPrimaryColorForHue(hueDegrees);
@@ -117,9 +124,10 @@ public class HueRing extends View {
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
 
+        float center = getWidth() / 2f;
         ringPaint.setStrokeWidth((int) bandWidth);
 
-        canvas.translate(centerX, centerY);
+        canvas.translate(center, center);
         canvas.drawOval(ringRect, ringPaint);
 
         canvas.drawArc(centerRect, 180, 180, true, initialPaint);
@@ -137,17 +145,18 @@ public class HueRing extends View {
         int heightMode = View.MeasureSpec.getMode(heightMeasureSpec);
         int heightSize = View.MeasureSpec.getSize(heightMeasureSpec);
 
-        if (((widthMode == MeasureSpec.AT_MOST) && (heightMode == MeasureSpec.AT_MOST)) ||
-            ((widthMode == MeasureSpec.EXACTLY) && (heightMode == MeasureSpec.EXACTLY)))
-        {
+        if ((widthMode == MeasureSpec.AT_MOST) && (heightMode == MeasureSpec.AT_MOST)) {
             diameter = Math.min(widthSize, heightSize);
         }
+        else {
+            setMeasuredDimension(MEASURED_STATE_TOO_SMALL, MEASURED_STATE_TOO_SMALL);
+            return;
+        }
 
         setMeasuredDimension(diameter, diameter);
 
 //        padding = DimensionUtils.dp2px(getContext(),
 //                getContext().getResources().getDimension(R.dimen.activity_horizontal_margin)) / 2;
-        padding = 0;
         diameter -= 2 * padding;
         radius = diameter / 2f;
         centerX = padding + (int) radius;