hide blur in ui module scope
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user