From b2a9215788296d01d89aa83d29fc5f5df899ca18 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 8 Apr 2026 16:29:06 -0400 Subject: [PATCH] Fixes shadow clipping in the light theme on FAB buttons. --- .../ui/layouts/DisappearingFloatingButton.kt | 7 +++++- .../ui/screen/loggedIn/home/NewNoteButton.kt | 23 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/layouts/DisappearingFloatingButton.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/layouts/DisappearingFloatingButton.kt index 0da9167d35..0ec601a382 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/layouts/DisappearingFloatingButton.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/layouts/DisappearingFloatingButton.kt @@ -22,12 +22,15 @@ package com.vitorpamplona.amethyst.ui.layouts import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.size import androidx.compose.material3.BottomAppBarScrollBehavior import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.layout +import androidx.compose.ui.unit.dp @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -42,6 +45,7 @@ fun DisappearingFloatingButton( Box( modifier = Modifier + .size(75.dp) .layout { measurable, constraints -> val placeable = measurable.measure(constraints) // Adjust the height of the layout so the FAB doesn't leave a "hole" @@ -50,12 +54,13 @@ fun DisappearingFloatingButton( placeable.placeRelative(0, 0) } }.graphicsLayer { + this.translationY = this.size.height / 3.5f this.scaleX = progress this.scaleY = progress this.alpha = progress - // Clip the content as it shrinks to prevent overflow clip = true }, + contentAlignment = Alignment.TopCenter, content = content, ) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/NewNoteButton.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/NewNoteButton.kt index 8049609ed8..e96c8e744a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/NewNoteButton.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/home/NewNoteButton.kt @@ -21,8 +21,11 @@ package com.vitorpamplona.amethyst.ui.screen.loggedIn.home import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.BottomAppBarDefaults +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -30,8 +33,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.ui.layouts.DisappearingFloatingButton import com.vitorpamplona.amethyst.ui.navigation.navs.EmptyNav import com.vitorpamplona.amethyst.ui.navigation.navs.INav import com.vitorpamplona.amethyst.ui.navigation.routes.Route @@ -41,11 +46,25 @@ import com.vitorpamplona.amethyst.ui.theme.Size26Modifier import com.vitorpamplona.amethyst.ui.theme.Size55Modifier import com.vitorpamplona.amethyst.ui.theme.ThemeComparisonRow +@OptIn(ExperimentalMaterial3Api::class) +@Preview @Composable fun NewNoteButtonPreview() { + val bottomBehavior = + BottomAppBarDefaults.exitAlwaysScrollBehavior( + canScroll = { true }, + ) + ThemeComparisonRow { - Box(Modifier.size(200.dp), contentAlignment = Alignment.Center) { - NewNoteButton(EmptyNav()) + Column { + Box(Modifier.size(200.dp), contentAlignment = Alignment.Center) { + DisappearingFloatingButton(bottomBehavior) { + NewNoteButton(EmptyNav()) + } + } + Box(Modifier.size(200.dp), contentAlignment = Alignment.Center) { + NewNoteButton(EmptyNav()) + } } } }