X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FColors.java;h=7ea5f7817881cacb688ec740c449afccbf76de82;hp=edd9c7715d8c3b645b335ac3ec6c2fb0dc8b45dc;hb=949a2e7fc1c5adc3c4df6f3b309d9cc20354cb92;hpb=e6e7e00fa8e02f5de38a88dcb2b71db379d0be35 diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java b/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java index edd9c771..7ea5f781 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/Colors.java @@ -2,8 +2,6 @@ package net.ktnx.mobileledger.utils; import android.app.Activity; import android.content.res.Resources; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorLong; import android.util.Log; import android.util.TypedValue; @@ -11,6 +9,11 @@ import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.MobileLedgerProfile; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorLong; + +import static java.lang.Math.abs; + public class Colors { public static final int DEFAULT_HUE_DEG = 261; public static @ColorInt @@ -32,6 +35,10 @@ public class Colors { tableRowLightBG = tv.data; theme.resolveAttribute(R.attr.colorPrimary, tv, true); primary = tv.data; + theme.resolveAttribute(R.attr.textColor, tv, true); + defaultTextColor = tv.data; + theme.resolveAttribute(R.attr.colorAccent, tv, true); + accent = tv.data; // trigger theme observers themeWatch.notifyObservers(); @@ -51,13 +58,18 @@ public class Colors { return 0xff000000 | hsvTriplet(hue, saturation, value); } public static @ColorInt + int hslColor(float hue, float saturation, float lightness) { + return 0xff000000 | hslTriplet(hue, saturation, lightness); + } + public static @ColorInt int hsvTriplet(float hue, float saturation, float value) { @ColorLong long result; int r, g, b; - if ((hue < 0) || (hue > 1) || (saturation < 0) || (saturation > 1) || (value < 0) || - (value > 1)) throw new IllegalArgumentException( - "hue, saturation, value and alpha must all be between 0 and 1"); + if ((hue < -0.00005) || (hue > 1.0000005) || (saturation < 0) || (saturation > 1) || + (value < 0) || (value > 1)) throw new IllegalArgumentException(String.format( + "hue, saturation, value and alpha must all be between 0 and 1. Arguments given: " + + "hue=%1.5f, sat=%1.5f, val=%1.5f", hue, saturation, value)); int h = (int) (hue * 6); float f = hue * 6 - h; @@ -85,6 +97,27 @@ public class Colors { "rgb", h, hue, saturation, value)); } } + public static @ColorInt + int hslTriplet(float hue, float saturation, float lightness) { + @ColorLong long result; + float h = hue * 6; + float c = (1 - abs(2f * lightness - 1)) * saturation; + float h_mod_2 = h % 2; + float x = c * (1 - Math.abs(h_mod_2 - 1)); + int r, g, b; + float m = lightness - c / 2f; + + if (h < 1 || h == 6) return tupleToColor(c + m, x + m, 0 + m); + if (h < 2) return tupleToColor(x + m, c + m, 0 + m); + if (h < 3) return tupleToColor(0 + m, c + m, x + m); + if (h < 4) return tupleToColor(0 + m, x + m, c + m); + if (h < 5) return tupleToColor(x + m, 0 + m, c + m); + if (h < 6) return tupleToColor(c + m, 0 + m, x + m); + + throw new IllegalArgumentException(String.format( + "Unexpected value for h (%d) while converting hsl(%1.2f, %1.2f, %1.2f) to rgb", h, + hue, saturation, lightness)); + } public static @ColorInt int tupleToColor(float r, float g, float b) { @@ -95,11 +128,14 @@ public class Colors { } public static @ColorInt int getPrimaryColorForHue(int degrees) { + // 0/360f becomes -0.000something for some reason + if (degrees == 0) return getPrimaryColorForHue(0f); return getPrimaryColorForHue(degrees / 360f); } public static @ColorInt int getPrimaryColorForHue(float hue) { - int result = hsvColor(hue, 0.61f, 0.95f); +// int result = hsvColor(hue, 0.61f, 0.95f); + int result = hslColor(hue, 0.60f, 0.60f); Log.d("colors", String.format("getPrimaryColorForHue(%1.2f) = %x", hue, result)); return result; }