fade the hero into a darkened primary instead of black

This commit is contained in:
austinried
2026-10-04 00:29:53 +00:00
parent 000f139188
commit 145de3409e
2 changed files with 10 additions and 7 deletions
@@ -171,7 +171,7 @@ fun AlbumDetailScreen(
val mid = scrollPx + barHeightPx / 2f val mid = scrollPx + barHeightPx / 2f
lerp( lerp(
it.gradientColorAt(mid / gradientHeightPx), it.gradientColorAt(mid / gradientHeightPx),
Color.Black, it.darkPrimary,
heroDarkenAt(mid, with(density) { maxHeight.toPx() }), heroDarkenAt(mid, with(density) { maxHeight.toPx() }),
) )
} ?: Color.Black } ?: Color.Black
@@ -36,16 +36,17 @@ private const val PERIOD_SCREENS = 2f
private const val BLOB_ZONE = 0.62f private const val BLOB_ZONE = 0.62f
private const val BLOB_COUNT = 4 private const val BLOB_COUNT = 4
private const val ACCENT_MAX_LUMINANCE = 0.34f private const val ACCENT_MAX_LUMINANCE = 0.34f
private const val HERO_DARKEN_MAX = 0.85f private const val HERO_DARKEN_MAX = 1.0f
private const val DARKEN_START_SCREENS = 0.45f private const val DARKEN_START_SCREENS = 0.5f
private const val DARKEN_END_SCREENS = 1.0f private const val DARKEN_END_SCREENS = 1.5f
private const val DARKEN_KNEE = 0.15f private const val DARKEN_KNEE = 0.2f
data class ArtworkColors( data class ArtworkColors(
val scheme: ColorScheme, val scheme: ColorScheme,
val gradientHigh: Color, val gradientHigh: Color,
val gradientLow: Color, val gradientLow: Color,
val accents: List<Color>, val accents: List<Color>,
val darkPrimary: Color,
val blobSeed: Int, val blobSeed: Int,
) )
@@ -117,6 +118,7 @@ fun artworkColorsFromSeeds(
tone(hue, s, 0.72f).withMaxLuminance(ACCENT_MAX_LUMINANCE), tone(hue, s, 0.72f).withMaxLuminance(ACCENT_MAX_LUMINANCE),
secondary.withMaxLuminance(ACCENT_MAX_LUMINANCE), secondary.withMaxLuminance(ACCENT_MAX_LUMINANCE),
), ),
darkPrimary = tone(hue, s * 0.8f, 0.10f),
blobSeed = primarySeed, blobSeed = primarySeed,
) )
} }
@@ -246,6 +248,7 @@ fun HeroGradient(
val high = colors?.gradientHigh ?: MaterialTheme.colorScheme.surfaceContainerHigh val high = colors?.gradientHigh ?: MaterialTheme.colorScheme.surfaceContainerHigh
val low = colors?.gradientLow ?: MaterialTheme.colorScheme.background val low = colors?.gradientLow ?: MaterialTheme.colorScheme.background
val accents = colors?.accents.orEmpty() val accents = colors?.accents.orEmpty()
val dark = colors?.darkPrimary ?: MaterialTheme.colorScheme.background
val seed = colors?.blobSeed ?: 0 val seed = colors?.blobSeed ?: 0
Canvas(modifier) { Canvas(modifier) {
@@ -292,8 +295,8 @@ fun HeroGradient(
colorStops = colorStops =
arrayOf( arrayOf(
0f to Color.Transparent, 0f to Color.Transparent,
DARKEN_KNEE to Color.Black.copy(alpha = HERO_DARKEN_MAX * 0.5f), DARKEN_KNEE to dark.copy(alpha = HERO_DARKEN_MAX * 0.5f),
1f to Color.Black.copy(alpha = HERO_DARKEN_MAX), 1f to dark.copy(alpha = HERO_DARKEN_MAX),
), ),
startY = darkenStart, startY = darkenStart,
endY = darkenEnd, endY = darkenEnd,