From fa1bf678d02c271c55c6bb9ddc98e68a2cbf55c7 Mon Sep 17 00:00:00 2001 From: Super12138 <70494801+Super12138@users.noreply.github.com> Date: Fri, 2 May 2025 13:31:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=99=E4=B8=BB=E9=A2=98=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=99=A8=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=BE=B9=E7=BC=98?= =?UTF-8?q?=E6=B8=90=E5=8F=98=E4=BF=9D=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../settings/components/RowSettingsItem.kt | 50 +++++++++++++++++-- .../appearance/darkmode/DarkModePicker.kt | 2 +- .../appearance/palette/PalettePicker.kt | 1 + 4 files changed, 50 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 88cee30..c6f4706 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { applicationId = "cn.super12138.todo" minSdk = 24 targetSdk = 36 - versionCode = 656 + versionCode = 657 versionName = "2.1.2" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/RowSettingsItem.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/RowSettingsItem.kt index 04f84f8..7fd1830 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/RowSettingsItem.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/RowSettingsItem.kt @@ -16,8 +16,18 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.BlendMode +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.CompositingStrategy import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.sp import cn.super12138.todo.ui.TodoDefaults @@ -32,7 +42,8 @@ fun RowSettingsItem( horizontalArrangement: Arrangement.Horizontal = Arrangement.Start, verticalAlignment: Alignment.Vertical = Alignment.Top, scrollState: ScrollState = rememberScrollState(), - rowModifier: Modifier = Modifier, + fadedEdgeWidth: Dp, + maskColor: Color = MaterialTheme.colorScheme.background, content: @Composable RowScope.() -> Unit ) { MoreContentSettingsItem( @@ -46,8 +57,22 @@ fun RowSettingsItem( Row( modifier = Modifier .fillMaxWidth() - .horizontalScroll(scrollState) - .then(rowModifier), + // 渲染到离屏缓冲区是为了确保边缘淡出的 alpha 效果仅应用于文本本身,而不影响该可组合项下方绘制的内容(例如窗口背景)。 + .graphicsLayer { compositingStrategy = CompositingStrategy.Offscreen } + .drawWithContent { + drawContent() + drawFadedEdge( + edgeWidth = fadedEdgeWidth, + maskColor = maskColor, + leftEdge = true + ) + drawFadedEdge( + edgeWidth = fadedEdgeWidth, + maskColor = maskColor, + leftEdge = false + ) + } + .horizontalScroll(scrollState), horizontalArrangement = horizontalArrangement, verticalAlignment = verticalAlignment, content = content @@ -109,4 +134,23 @@ fun MoreContentSettingsItem( content() } +} + +fun ContentDrawScope.drawFadedEdge( + edgeWidth: Dp, + maskColor: Color, + leftEdge: Boolean +) { + val edgeWidthPx = edgeWidth.toPx() + drawRect( + topLeft = Offset(if (leftEdge) 0f else size.width - edgeWidthPx, 0f), + size = Size(edgeWidthPx, size.height), + brush = + Brush.horizontalGradient( + colors = listOf(Color.Transparent, maskColor), + startX = if (leftEdge) 0f else size.width, + endX = if (leftEdge) edgeWidthPx else size.width - edgeWidthPx + ), + blendMode = BlendMode.DstIn + ) } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt index 3544cff..1dab847 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt @@ -24,7 +24,6 @@ fun DarkModePicker( val context = LocalContext.current val isInDarkTheme = isSystemInDarkTheme() - var darkModeState by rememberPrefIntState( Constants.PREF_DARK_MODE, Constants.PREF_DARK_MODE_DEFAULT @@ -34,6 +33,7 @@ fun DarkModePicker( title = stringResource(R.string.pref_dark_mode), description = stringResource(R.string.pref_dark_mode_desc), horizontalArrangement = Arrangement.spacedBy(5.dp), + fadedEdgeWidth = 8.dp, modifier = modifier ) { DarkModeItem( diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt index 83e2993..f021705 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt @@ -37,6 +37,7 @@ fun PalettePicker( title = stringResource(R.string.pref_palette_style), description = stringResource(R.string.pref_palette_style_desc), horizontalArrangement = Arrangement.spacedBy(5.dp), + fadedEdgeWidth = 8.dp, modifier = modifier ) { paletteOptions.forEach { paletteStyle ->