feat: add LocalIconTint in Icon

This commit is contained in:
2023-11-19 00:17:05 +08:00
parent fcaaf7a885
commit 07b7f53dfd

View File

@@ -27,6 +27,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.paint import androidx.compose.ui.draw.paint
import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size
@@ -48,7 +49,7 @@ fun Icon(
imageVector: ImageVector, imageVector: ImageVector,
contentDescription: String? = null, contentDescription: String? = null,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
tint: Color = Color.Unspecified tint: Color = LocalIconTint.current
) { ) {
val painter = rememberVectorPainter(imageVector) val painter = rememberVectorPainter(imageVector)
Icon(painter, contentDescription, modifier, tint) Icon(painter, contentDescription, modifier, tint)
@@ -59,7 +60,7 @@ fun Icon(
painter: Painter, painter: Painter,
contentDescription: String? = null, contentDescription: String? = null,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
tint: Color = Color.Unspecified tint: Color = LocalIconTint.current
) { ) {
// TODO: b/149735981 semantics for content description // TODO: b/149735981 semantics for content description
val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint) val colorFilter = if (tint == Color.Unspecified) null else ColorFilter.tint(tint)
@@ -81,6 +82,8 @@ fun Icon(
) )
} }
internal val LocalIconTint = compositionLocalOf { Color.Unspecified }
@Composable @Composable
private fun Modifier.defaultSizeFor(painter: Painter) = then( private fun Modifier.defaultSizeFor(painter: Painter) = then(
if (painter.intrinsicSize == Size.Unspecified || painter.intrinsicSize.isInfinite()) if (painter.intrinsicSize == Size.Unspecified || painter.intrinsicSize.isInfinite())