mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-17 07:22:45 +00:00
improve automatic text color selection
This commit is contained in:
parent
f8165e5505
commit
fec5bc97b4
2 changed files with 18 additions and 4 deletions
|
@ -504,7 +504,15 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||
return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.accent);
|
||||
case PREF_COLOR_TEXT_SUFFIX:
|
||||
// base it on background color, and not key, because it's also used for suggestions
|
||||
if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_BACKGROUND_SUFFIX, isNight))) return Color.BLACK;
|
||||
final int background = readUserColor(prefs, context, PREF_COLOR_BACKGROUND_SUFFIX, isNight);
|
||||
if (ColorUtilKt.isBrightColor(background)) {
|
||||
// but if key borders are enabled, we still want reasonable contrast
|
||||
if (!prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false)
|
||||
|| ColorUtilKt.isGoodContrast(Color.BLACK, readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight)))
|
||||
return Color.BLACK;
|
||||
else
|
||||
return Color.GRAY;
|
||||
}
|
||||
else return Color.WHITE;
|
||||
case PREF_COLOR_HINT_TEXT_SUFFIX:
|
||||
if (ColorUtilKt.isBrightColor(readUserColor(prefs, context, PREF_COLOR_KEYS_SUFFIX, isNight))) return Color.DKGRAY;
|
||||
|
@ -518,8 +526,11 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||
case PREF_COLOR_SPACEBAR_TEXT_SUFFIX:
|
||||
final int spacebar = readUserColor(prefs, context, PREF_COLOR_SPACEBAR_SUFFIX, isNight);
|
||||
final int hintText = readUserColor(prefs, context, PREF_COLOR_HINT_TEXT_SUFFIX, isNight);
|
||||
if (ColorUtilKt.colorDistanceSquared(hintText, spacebar) > 80 * 80) return hintText & 0x80FFFFFF; // add some transparency
|
||||
else return readUserColor(prefs, context, PREF_COLOR_TEXT_SUFFIX, isNight) & 0x80FFFFFF;
|
||||
if (ColorUtilKt.isGoodContrast(hintText, spacebar)) return hintText & 0x80FFFFFF; // add some transparency
|
||||
final int text = readUserColor(prefs, context, PREF_COLOR_TEXT_SUFFIX, isNight);
|
||||
if (ColorUtilKt.isGoodContrast(text, spacebar)) return text & 0x80FFFFFF;
|
||||
if (ColorUtilKt.isBrightColor(spacebar)) return Color.BLACK & 0x80FFFFFF;
|
||||
else return Color.WHITE & 0x80FFFFFF;
|
||||
case PREF_COLOR_BACKGROUND_SUFFIX:
|
||||
default:
|
||||
return ContextCompat.getColor(getDayNightContext(context, isNight), R.color.keyboard_background);
|
||||
|
|
|
@ -16,7 +16,10 @@ fun isDarkColor(@ColorInt color: Int) =
|
|||
if (android.R.color.transparent == color) true
|
||||
else getBrightnessSquared(color) < 50 * 50
|
||||
|
||||
fun colorDistanceSquared(@ColorInt color1: Int, @ColorInt color2: Int): Int {
|
||||
fun isGoodContrast(@ColorInt color1: Int, @ColorInt color2: Int) =
|
||||
colorDistanceSquared(color1, color2) > 80 * 80
|
||||
|
||||
private fun colorDistanceSquared(@ColorInt color1: Int, @ColorInt color2: Int): Int {
|
||||
val diffR = Color.red(color1) - Color.red(color2)
|
||||
val diffG = Color.green(color1) - Color.green(color2)
|
||||
val diffB = Color.blue(color1) - Color.blue(color2)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue