From 61ffc606aadd678bafa8f0cc0dbb2930626548f6 Mon Sep 17 00:00:00 2001 From: T8RIN Date: Mon, 4 Mar 2024 19:13:06 +0300 Subject: [PATCH] added more colors to material you palette by #847 --- .../core/ui/widget/modifier/Container.kt | 6 ++-- .../core/ui/widget/modifier/MaterialShadow.kt | 15 ++++++--- .../components/MaterialYouPalette.kt | 2 +- .../components/MaterialYouPaletteGroup.kt | 33 +++++++++++++++++++ .../components/MaterialYouPaletteItem.kt | 28 +++++++++++----- 5 files changed, 68 insertions(+), 16 deletions(-) diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/Container.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/Container.kt index b14e86e34c..2f00debe0c 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/Container.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/Container.kt @@ -55,7 +55,8 @@ fun Modifier.container( clip: Boolean = true, composeColorOnTopOfBackground: Boolean = true, isShadowClip: Boolean = false, - isStandaloneContainer: Boolean = true + isStandaloneContainer: Boolean = true, + shadowColor: Color = Color.Black ) = this.composed { val localContainerShape = LocalContainerShape.current val resultShape = localContainerShape ?: shape @@ -119,7 +120,8 @@ fun Modifier.container( enabled = if (isStandaloneContainer) { settingsState.drawContainerShadows } else true, - isClipped = isShadowClip + isClipped = isShadowClip, + color = shadowColor ) .then( if (resultShape is CornerBasedShape) cornerModifier diff --git a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/MaterialShadow.kt b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/MaterialShadow.kt index 29823240af..1ba17d31d5 100644 --- a/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/MaterialShadow.kt +++ b/core/ui/src/main/kotlin/ru/tech/imageresizershrinker/core/ui/widget/modifier/MaterialShadow.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.draw.shadow import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Outline import androidx.compose.ui.graphics.Shape import androidx.compose.ui.unit.Density @@ -41,7 +42,8 @@ fun Modifier.materialShadow( shape: Shape, elevation: Dp, enabled: Boolean = true, - isClipped: Boolean = true + isClipped: Boolean = true, + color: Color = Color.Black ) = this.composed { val isConcavePath by remember(shape) { derivedStateOf { @@ -59,19 +61,24 @@ fun Modifier.materialShadow( val api29Shadow = if (isClipped) { Modifier.clippedShadow( shape = shape, - elevation = elev + elevation = elev, + ambientColor = color, + spotColor = color ) } else { Modifier.shadow( shape = shape, - elevation = elev + elevation = elev, + ambientColor = color, + spotColor = color ) } val api21shadow = Modifier.rsBlurShadow( shape = shape, radius = elev, - isAlphaContentClip = isClipped + isAlphaContentClip = isClipped, + color = color ) when { isConcavePath && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q -> api21shadow diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt index 6f02a6280c..e873d56dbf 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPalette.kt @@ -21,11 +21,11 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width -import androidx.compose.material.Icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.rounded.ContentPaste import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ColorScheme +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteGroup.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteGroup.kt index 9ce93936e4..cdc39a65eb 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteGroup.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteGroup.kt @@ -171,6 +171,39 @@ fun MaterialYouPaletteGroup( ) } + Row( + modifier = Modifier.height(IntrinsicSize.Max) + ) { + MaterialYouPaletteItem( + color = colorScheme.inversePrimary, + colorScheme = colorScheme, + name = "Inverse Primary", + onCopy = onCopy, + modifier = Modifier.weight(1f) + ) + MaterialYouPaletteItem( + color = colorScheme.surfaceTint, + colorScheme = colorScheme, + name = "Surface Tint", + onCopy = onCopy, + modifier = Modifier.weight(1f) + ) + MaterialYouPaletteItem( + color = colorScheme.surfaceDim, + colorScheme = colorScheme, + name = "Surface Dim", + onCopy = onCopy, + modifier = Modifier.weight(1f) + ) + MaterialYouPaletteItem( + color = colorScheme.surfaceBright, + colorScheme = colorScheme, + name = "Surface Bright", + onCopy = onCopy, + modifier = Modifier.weight(1f) + ) + } + Row( modifier = Modifier.height(IntrinsicSize.Max) ) { diff --git a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteItem.kt b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteItem.kt index ef592a9db1..7ffbb385da 100644 --- a/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteItem.kt +++ b/feature/generate-palette/src/main/java/ru/tech/imageresizershrinker/feature/generate_palette/presentation/components/MaterialYouPaletteItem.kt @@ -18,6 +18,7 @@ package ru.tech.imageresizershrinker.feature.generate_palette.presentation.components import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth @@ -28,16 +29,18 @@ import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.material3.ColorScheme import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle -import androidx.compose.material3.Surface import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import ru.tech.imageresizershrinker.core.ui.utils.helper.toHex +import ru.tech.imageresizershrinker.core.ui.widget.modifier.container import ru.tech.imageresizershrinker.core.ui.widget.text.AutoSizeText @Composable @@ -49,17 +52,22 @@ fun MaterialYouPaletteItem( modifier: Modifier = Modifier ) { val containerColor by animateColorAsState(color) + val contentColor = colorScheme.contentColorFor(containerColor) - Surface( - modifier = modifier, - color = containerColor, - contentColor = colorScheme.contentColorFor(containerColor), - onClick = { - onCopy(containerColor) - } + CompositionLocalProvider( + LocalContentColor provides contentColor ) { Column( - modifier = Modifier.padding(12.dp) + modifier = modifier + .container( + shape = RectangleShape, + color = containerColor, + resultPadding = 0.dp + ) + .clickable { + onCopy(containerColor) + } + .padding(12.dp) ) { AutoSizeText( text = name, @@ -86,6 +94,7 @@ fun MaterialYouPaletteItem( } } } + } @Stable @@ -103,6 +112,7 @@ private fun ColorScheme.contentColorFor( errorContainer -> onErrorContainer inverseSurface -> inverseOnSurface surface -> onSurface + inversePrimary -> onPrimaryContainer surfaceVariant -> onSurfaceVariant surfaceBright -> onSurface surfaceContainer -> onSurface