hide blur in ui module scope

This commit is contained in:
2026-08-08 22:03:49 +03:00
parent 3962ec29da
commit c5a4963eeb
13 changed files with 70 additions and 68 deletions
@@ -122,7 +122,6 @@ private fun <T : Route> BottomBar(
currentRoute: T?,
onSelectNavigation: ((T) -> Unit)?
) {
val blurState = LocalBlurState.current
navigationEntries?.let { entries ->
Box(
modifier = Modifier
@@ -140,7 +139,7 @@ private fun <T : Route> BottomBar(
) {
NavigationBar(
containerColor = ComponentDefaults.navBarContentColor(),
modifier = ComponentDefaults.roundedClip().applyBlurEffect(blurState)
modifier = ComponentDefaults.roundedClip().blurEffect()
) {
entries.forEach { entry ->
NavigationBarItem(
@@ -13,33 +13,30 @@ import dev.chrisbanes.haze.materials.HazeMaterials
import dev.chrisbanes.haze.rememberHazeState
import ru.shadowsparky.ui.components.isTv
private const val BLUR_ENABLED = true
val LocalBlurState = compositionLocalOf<BlurState?> { null }
internal val LocalBlurState = compositionLocalOf<BlurState?> { null }
@Composable
internal fun isBlurEnabled(): Boolean {
return BLUR_ENABLED && !isTv()
}
internal fun isBlurEnabled(): Boolean = !isTv()
@Composable
fun rememberBlurState(): BlurState? {
internal fun rememberBlurState(): BlurState? {
if (!isBlurEnabled()) return null
val hazeState = rememberHazeState()
return remember(hazeState) { BlurState(hazeState) }
}
fun Modifier.applyBlurSource(state: BlurState?): Modifier {
@Composable
internal fun Modifier.blurSource(state: BlurState? = LocalBlurState.current): Modifier {
state ?: return this
return hazeSource(state.hazeState)
}
@OptIn(ExperimentalHazeMaterialsApi::class)
@Composable
fun Modifier.applyBlurEffect(state: BlurState?): Modifier {
internal fun Modifier.blurEffect(state: BlurState? = LocalBlurState.current): Modifier {
state ?: return this
return hazeEffect(state.hazeState, HazeMaterials.thin())
}
@Stable
class BlurState(internal val hazeState: HazeState)
internal class BlurState(internal val hazeState: HazeState)
@@ -0,0 +1,49 @@
package ru.shadowsparky.ui.components
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.material3.AppBarWithSearchColors
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SearchBarDefaults
import androidx.compose.material3.SearchBarScrollBehavior
import androidx.compose.material3.SearchBarState
import androidx.compose.material3.rememberSearchBarState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.Dp
import ru.shadowsparky.ui.blurEffect
import ru.shadowsparky.ui.theme.ComponentDefaults
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppBarWithSearch(
inputField: @Composable () -> Unit,
modifier: Modifier = Modifier,
state: SearchBarState = rememberSearchBarState(),
navigationIcon: @Composable (() -> Unit)? = null,
actions: @Composable (RowScope.() -> Unit)? = null,
shape: Shape = SearchBarDefaults.inputFieldShape,
colors: AppBarWithSearchColors = ComponentDefaults.appBarWithSearchDefaults(),
tonalElevation: Dp = SearchBarDefaults.TonalElevation,
shadowElevation: Dp = SearchBarDefaults.ShadowElevation,
contentPadding: PaddingValues = SearchBarDefaults.AppBarContentPadding,
windowInsets: WindowInsets = SearchBarDefaults.windowInsets,
scrollBehavior: SearchBarScrollBehavior? = null,
) {
androidx.compose.material3.AppBarWithSearch(
state,
inputField,
modifier.blurEffect(),
navigationIcon,
actions,
shape,
colors,
tonalElevation,
shadowElevation,
contentPadding,
windowInsets,
scrollBehavior
)
}
@@ -14,8 +14,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ru.shadowsparky.ui.LocalBlurState
import ru.shadowsparky.ui.applyBlurSource
import ru.shadowsparky.ui.blurSource
@Composable
expect fun isTv(): Boolean
@@ -128,7 +127,7 @@ fun LazyColumn(
if (isTv) {
modifier.padding(contentPadding)
} else {
modifier.applyBlurSource(LocalBlurState.current)
modifier.blurSource()
},
state,
if (isTv) PaddingValues(0.dp) else contentPadding,
@@ -14,8 +14,7 @@ import androidx.compose.foundation.rememberOverscrollEffect
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ru.shadowsparky.ui.LocalBlurState
import ru.shadowsparky.ui.applyBlurSource
import ru.shadowsparky.ui.blurSource
@Composable
fun LazyVerticalGrid(
@@ -38,7 +37,7 @@ fun LazyVerticalGrid(
if (isTv) {
modifier.padding(contentPadding)
} else {
modifier.applyBlurSource(LocalBlurState.current)
modifier.blurSource()
},
state,
if (isTv) PaddingValues(0.dp) else contentPadding,
@@ -11,8 +11,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import ru.shadowsparky.ui.LocalBlurState
import ru.shadowsparky.ui.applyBlurEffect
import ru.shadowsparky.ui.blurEffect
import ru.shadowsparky.ui.theme.ComponentDefaults
@OptIn(ExperimentalMaterial3Api::class)
@@ -30,7 +29,7 @@ fun TopAppBar(
) {
TopAppBar(
title = title,
modifier = modifier.applyBlurEffect(LocalBlurState.current),
modifier = modifier.blurEffect(),
navigationIcon = navigationIcon,
actions = actions,
expandedHeight = expandedHeight,