revert the warm hue harmonisation

This commit is contained in:
austinried
2026-10-04 00:29:56 +00:00
parent a54a54ffa4
commit c56ae3f0ed
2 changed files with 12 additions and 31 deletions
@@ -53,7 +53,6 @@ fun artworkColorsFromSeeds(
): ArtworkColors { ): ArtworkColors {
val (hue, saturation, _) = Color(primarySeed or 0xFF000000.toInt()).toHsl() val (hue, saturation, _) = Color(primarySeed or 0xFF000000.toInt()).toHsl()
val s = saturation.coerceAtMost(0.85f) val s = saturation.coerceAtMost(0.85f)
val darkHue = harmonizeDarkHue(hue)
fun tone( fun tone(
h: Float, h: Float,
@@ -62,7 +61,7 @@ fun artworkColorsFromSeeds(
) = Color.hsl(h % 360f, sat.coerceIn(0f, 1f), l.coerceIn(0f, 1f)) ) = Color.hsl(h % 360f, sat.coerceIn(0f, 1f), l.coerceIn(0f, 1f))
val primary = tone(hue, s, 0.62f).withMinLuminance(PRIMARY_MIN_LUMINANCE) val primary = tone(hue, s, 0.62f).withMinLuminance(PRIMARY_MIN_LUMINANCE)
val background = tone(darkHue, (s * 0.35f).coerceAtMost(0.20f), 0.06f) val background = tone(hue, (s * 0.35f).coerceAtMost(0.20f), 0.06f)
val onBackground = tone(hue, (s * 0.10f).coerceAtMost(0.08f), 0.95f) val onBackground = tone(hue, (s * 0.10f).coerceAtMost(0.08f), 0.95f)
val secondary = val secondary =
@@ -76,14 +75,14 @@ fun artworkColorsFromSeeds(
} ?: tone(hue, s, 0.40f) } ?: tone(hue, s, 0.40f)
val gradientSat = if (s > 0.05f) s.coerceAtLeast(MIN_GRADIENT_SATURATION) else s val gradientSat = if (s > 0.05f) s.coerceAtLeast(MIN_GRADIENT_SATURATION) else s
val gradientHigh = tone(darkHue, (gradientSat * 0.85f).coerceAtMost(0.70f), 0.26f) val gradientHigh = tone(hue, (gradientSat * 0.85f).coerceAtMost(0.70f), 0.26f)
val gradientLow = tone(darkHue, gradientSat * 0.55f, 0.12f) val gradientLow = tone(hue, gradientSat * 0.55f, 0.12f)
val accents = val accents =
listOf( listOf(
tone(darkHue, gradientSat, 0.72f).withMaxLuminance(ACCENT_MAX_LUMINANCE), tone(hue, gradientSat, 0.72f).withMaxLuminance(ACCENT_MAX_LUMINANCE),
secondary.withMaxLuminance(ACCENT_MAX_LUMINANCE), secondary.withMaxLuminance(ACCENT_MAX_LUMINANCE),
) )
val darkPrimary = tone(darkHue, gradientSat * 0.75f, 0.10f) val darkPrimary = tone(hue, gradientSat * 0.75f, 0.10f)
val backdrop = maxOf(gradientHigh.luminance(), gradientLow.luminance(), accents.maxOf { it.luminance() }) val backdrop = maxOf(gradientHigh.luminance(), gradientLow.luminance(), accents.maxOf { it.luminance() })
val onSurfaceVariant = val onSurfaceVariant =
@@ -109,15 +108,15 @@ fun artworkColorsFromSeeds(
surface = background, surface = background,
onSurface = onBackground, onSurface = onBackground,
surfaceTint = primary, surfaceTint = primary,
surfaceVariant = tone(darkHue, s * 0.25f, 0.17f), surfaceVariant = tone(hue, s * 0.25f, 0.17f),
onSurfaceVariant = onSurfaceVariant, onSurfaceVariant = onSurfaceVariant,
surfaceContainerLowest = tone(darkHue, s * 0.25f, 0.04f), surfaceContainerLowest = tone(hue, s * 0.25f, 0.04f),
surfaceContainerLow = tone(darkHue, s * 0.25f, 0.08f), surfaceContainerLow = tone(hue, s * 0.25f, 0.08f),
surfaceContainer = tone(darkHue, s * 0.25f, 0.10f), surfaceContainer = tone(hue, s * 0.25f, 0.10f),
surfaceContainerHigh = tone(darkHue, s * 0.22f, 0.14f), surfaceContainerHigh = tone(hue, s * 0.22f, 0.14f),
surfaceContainerHighest = tone(darkHue, s * 0.20f, 0.18f), surfaceContainerHighest = tone(hue, s * 0.20f, 0.18f),
outline = tone(hue, s * 0.15f, 0.55f), outline = tone(hue, s * 0.15f, 0.55f),
outlineVariant = tone(darkHue, s * 0.18f, 0.28f), outlineVariant = tone(hue, s * 0.18f, 0.28f),
) )
return ArtworkColors( return ArtworkColors(
@@ -175,11 +174,6 @@ private fun blendHue(
return (from + delta * fraction + 360f) % 360f return (from + delta * fraction + 360f) % 360f
} }
private fun harmonizeDarkHue(hue: Float): Float {
if (hue !in 0f..120f) return hue
return 358f - hue * (40f / 120f)
}
@Composable @Composable
fun rememberArtworkColors( fun rememberArtworkColors(
ref: CoverArtRef?, ref: CoverArtRef?,
@@ -59,19 +59,6 @@ class ArtworkColorsTest {
} }
} }
@Test
fun warmHuesKeepDarkSurfacesOutOfBrown() {
val warmSeeds = listOf(0xFFE6C822.toInt(), 0xFFE68A22.toInt(), 0xFFD53A3A.toInt())
for (seed in warmSeeds) {
val colors = artworkColorsFromSeed(seed)
assertTrue("gradientHigh for $seed", colors.gradientHigh.blue >= colors.gradientHigh.green)
assertTrue(
"surfaceContainerHigh for $seed",
colors.scheme.surfaceContainerHigh.blue >= colors.scheme.surfaceContainerHigh.green,
)
}
}
private fun contrast( private fun contrast(
a: Color, a: Color,
b: Color, b: Color,