Skip to content

Commit 4519996

Browse files
committed
Merge branch 'dev'
2 parents f242a2e + 232c2cc commit 4519996

File tree

4 files changed

+58
-9
lines changed

4 files changed

+58
-9
lines changed

composeApp/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ kotlin {
4747

4848
implementation(libs.ktor.client.content.negotiation)
4949
implementation(libs.ktor.serialization.kotlinx.json)
50+
51+
implementation(libs.haze)
5052
}
5153
commonTest.dependencies {
5254
implementation(libs.kotlin.test)

composeApp/src/wasmJsMain/kotlin/org/nsh07/nsh07/ui/homeScreen/AppHomeScreen.kt

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
package org.nsh07.nsh07.ui.homeScreen
22

33
import androidx.compose.animation.*
4+
import androidx.compose.animation.core.FastOutLinearInEasing
45
import androidx.compose.foundation.layout.*
56
import androidx.compose.foundation.lazy.LazyColumn
67
import androidx.compose.foundation.lazy.rememberLazyListState
78
import androidx.compose.foundation.rememberScrollState
89
import androidx.compose.foundation.verticalScroll
910
import androidx.compose.material3.*
11+
import androidx.compose.material3.MaterialTheme.colorScheme
1012
import androidx.compose.material3.MaterialTheme.motionScheme
1113
import androidx.compose.material3.MaterialTheme.typography
14+
import androidx.compose.material3.TopAppBarDefaults.pinnedScrollBehavior
15+
import androidx.compose.material3.TopAppBarDefaults.topAppBarColors
1216
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
1317
import androidx.compose.runtime.*
1418
import androidx.compose.ui.Modifier
19+
import androidx.compose.ui.graphics.lerp
20+
import androidx.compose.ui.input.nestedscroll.nestedScroll
1521
import androidx.compose.ui.platform.LocalLayoutDirection
1622
import androidx.compose.ui.platform.LocalUriHandler
1723
import androidx.compose.ui.unit.dp
1824
import androidx.window.core.layout.WindowSizeClass
25+
import dev.chrisbanes.haze.HazeStyle
26+
import dev.chrisbanes.haze.hazeEffect
27+
import dev.chrisbanes.haze.hazeSource
28+
import dev.chrisbanes.haze.rememberHazeState
1929
import kotlinx.coroutines.launch
2030

2131
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@@ -129,6 +139,24 @@ fun AppHomeScreen(
129139
}
130140
}
131141
} else {
142+
val scrollBehavior = pinnedScrollBehavior()
143+
val hazeState = rememberHazeState(true)
144+
val topAppBarColors = topAppBarColors(
145+
containerColor = colorScheme.surface,
146+
scrolledContainerColor = colorScheme.surface
147+
)
148+
149+
val targetColor by remember(scrollBehavior) {
150+
derivedStateOf {
151+
val overlappingFraction = scrollBehavior.state.overlappedFraction
152+
lerp(
153+
topAppBarColors.containerColor,
154+
topAppBarColors.scrolledContainerColor,
155+
FastOutLinearInEasing.transform(if (overlappingFraction > 0.01f) 1f else 0f),
156+
)
157+
}
158+
}
159+
132160
Scaffold(
133161
topBar = {
134162
AnimatedVisibility(
@@ -168,10 +196,27 @@ fun AppHomeScreen(
168196
else -> Text("About")
169197
}
170198
}
171-
}
199+
},
200+
scrollBehavior = scrollBehavior,
201+
colors = topAppBarColors.copy(
202+
scrolledContainerColor = topAppBarColors.scrolledContainerColor.copy(
203+
0.7f
204+
)
205+
),
206+
modifier = Modifier
207+
.hazeEffect(
208+
hazeState,
209+
style = HazeStyle(
210+
backgroundColor = targetColor,
211+
tint = null,
212+
blurRadius = 20.dp,
213+
noiseFactor = 0f
214+
)
215+
)
172216
)
173217
}
174-
}
218+
},
219+
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
175220
) { innerPadding ->
176221
val layoutDirection = LocalLayoutDirection.current
177222
LazyColumn(
@@ -182,19 +227,17 @@ fun AppHomeScreen(
182227
end = innerPadding.calculateEndPadding(layoutDirection),
183228
bottom = 48.dp
184229
),
185-
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp)
230+
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp).hazeSource(hazeState)
186231
) {
187232
item { NameAndDesc(horizontalPadding = 16.dp) }
188-
item {
189-
SocialIcons(Modifier.padding(top = 32.dp, start = 12.dp, end = 12.dp))
190-
Spacer(Modifier.height(96.dp))
191-
}
233+
item { SocialIcons(Modifier.padding(top = 32.dp, start = 12.dp, end = 12.dp)) }
192234
mainContent(
193235
paragraphs,
194236
experiences,
195237
projectState,
196238
cardPadding,
197-
uriHandler
239+
uriHandler,
240+
topPadding = 96.dp
198241
)
199242
}
200243
}

composeApp/src/wasmJsMain/kotlin/org/nsh07/nsh07/ui/homeScreen/HomeScreenContent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,11 @@ fun LazyListScope.mainContent(
8888
experiences: List<Experience>,
8989
projectState: ProjectsState,
9090
cardPadding: Dp,
91-
uriHandler: UriHandler
91+
uriHandler: UriHandler,
92+
topPadding: Dp = 0.dp
9293
) {
9394
items(paragraphs, key = { it.substring(0, 16) }) {
95+
Spacer(Modifier.height(topPadding))
9496
Text(
9597
it,
9698
style = typography.bodyLarge,

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
androidx-lifecycle = "2.9.4"
33
coil3 = "3.3.0"
44
composeMultiplatform = "1.10.0-alpha02"
5+
haze = "1.6.10"
56
kotlin = "2.2.20"
67
ksp = "2.2.20-2.0.4"
78
ktor = "3.3.1"
@@ -13,6 +14,7 @@ androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecyc
1314
coil-kt = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil3" }
1415
coil-kt-ktor = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil3" }
1516
compose-material3-adaptive = { module = "org.jetbrains.compose.material3.adaptive:adaptive", version.ref = "material3-adaptive" }
17+
haze = { module = "dev.chrisbanes.haze:haze", version.ref = "haze" }
1618
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
1719
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
1820
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }

0 commit comments

Comments
 (0)