1package com.peachpasswords.ui.theme23import androidx.compose.foundation.layout.Box4import androidx.compose.foundation.layout.BoxScope5import androidx.compose.foundation.layout.fillMaxSize6import androidx.compose.runtime.Composable7import androidx.compose.ui.Modifier8import androidx.compose.ui.draw.drawBehind9import androidx.compose.ui.geometry.Offset10import androidx.compose.ui.geometry.Size11import androidx.compose.ui.graphics.Brush12import androidx.compose.ui.graphics.Color13import androidx.compose.ui.graphics.drawscope.DrawScope14import androidx.compose.ui.graphics.drawscope.withTransform15import kotlin.math.abs16import kotlin.math.max171819202122232425262728293031@Composable32fun ShellBackground(33 modifier: Modifier = Modifier,34 content: @Composable BoxScope.() -> Unit,35) {36 val accent = LocalPeachAccent.current37 val base = MaterialTheme_background()38 Box(39 modifier = modifier40 .fillMaxSize()41 .drawBehind {42 drawRect(color = base)4344 drawBloom(45 center = Offset(0f, 0f),46 radiusX = size.width * 1.2f,47 radiusY = size.height * 0.8f,48 color = accent.copy(alpha = 0.08f),49 transparentAt = 0.65f,50 )51 drawBloom(52 center = Offset(size.width, size.height),53 radiusX = size.width * 0.85f,54 radiusY = size.height * 1.0f,55 color = accent.copy(alpha = 0.06f),56 transparentAt = 0.70f,57 )58 },59 content = content,60 )61}62636465666768private fun DrawScope.drawBloom(69 center: Offset,70 radiusX: Float,71 radiusY: Float,72 color: Color,73 transparentAt: Float,74) {75 val r = max(radiusX, radiusY)76 val sx = radiusX / r77 val sy = radiusY / r78 withTransform({ scale(sx, sy, pivot = center) }) {79 80 81 val left = center.x + (0f - center.x) / sx82 val right = center.x + (size.width - center.x) / sx83 val top = center.y + (0f - center.y) / sy84 val bottom = center.y + (size.height - center.y) / sy85 drawRect(86 brush = Brush.radialGradient(87 0f to color,88 transparentAt to Color.Transparent,89 center = center,90 radius = r,91 ),92 topLeft = Offset(minOf(left, right), minOf(top, bottom)),93 size = Size(abs(right - left), abs(bottom - top)),94 )95 }96}9798@Composable99private fun MaterialTheme_background(): Color =100 androidx.compose.material3.MaterialTheme.colorScheme.background