Skip to content

Commit 99212a1

Browse files
committed
fix(bill): tweak wave rendering to fade out and not be condensed
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 49bf047 commit 99212a1

2 files changed

Lines changed: 51 additions & 13 deletions

File tree

app/src/main/java/com/getcode/ui/utils/Modifier.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,24 @@ import androidx.compose.foundation.combinedClickable
99
import androidx.compose.foundation.interaction.MutableInteractionSource
1010
import androidx.compose.material.ripple.rememberRipple
1111
import androidx.compose.runtime.Composable
12+
import androidx.compose.runtime.getValue
13+
import androidx.compose.runtime.mutableStateOf
1214
import androidx.compose.runtime.remember
15+
import androidx.compose.runtime.setValue
1316
import androidx.compose.ui.ExperimentalComposeUiApi
1417
import androidx.compose.ui.Modifier
1518
import androidx.compose.ui.composed
1619
import androidx.compose.ui.draw.drawBehind
1720
import androidx.compose.ui.draw.drawWithContent
1821
import androidx.compose.ui.geometry.Offset
1922
import androidx.compose.ui.graphics.BlendMode
23+
import androidx.compose.ui.graphics.Brush
2024
import androidx.compose.ui.graphics.Color
25+
import androidx.compose.ui.graphics.CompositingStrategy
2126
import androidx.compose.ui.graphics.RectangleShape
2227
import androidx.compose.ui.graphics.Shape
28+
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
29+
import androidx.compose.ui.graphics.graphicsLayer
2330
import androidx.compose.ui.input.pointer.pointerInteropFilter
2431
import androidx.compose.ui.layout.layout
2532
import androidx.compose.ui.layout.onPlaced
@@ -184,4 +191,37 @@ fun Modifier.punchCircle(color: Color) = this.drawWithContent {
184191
)
185192

186193
drawContent()
194+
}
195+
196+
fun Modifier.drawWithGradient(
197+
color: Color,
198+
startY: ContentDrawScope.(Float) -> Float,
199+
endY: ContentDrawScope.(Float) -> Float = { Float.POSITIVE_INFINITY },
200+
blendMode: BlendMode = BlendMode.SrcOver
201+
) = this.composed {
202+
var height by remember {
203+
mutableStateOf(0.dp)
204+
}
205+
206+
val density = LocalDensity.current
207+
208+
Modifier
209+
.onPlaced {
210+
height = with(density) { it.size.height.toDp() }
211+
}
212+
.graphicsLayer {
213+
compositingStrategy = CompositingStrategy.Offscreen
214+
}
215+
.drawWithContent {
216+
val colors = listOf(Color.Transparent, color)
217+
drawContent()
218+
drawRect(
219+
brush = Brush.verticalGradient(
220+
startY = startY(height.toPx()),
221+
endY = endY(height.toPx()).takeIf { it != Float.POSITIVE_INFINITY } ?: height.toPx(),
222+
colors = colors,
223+
),
224+
blendMode = blendMode
225+
)
226+
}
187227
}

app/src/main/java/com/getcode/view/main/bill/CashBill.kt

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.size
2525
import androidx.compose.foundation.layout.statusBarsIgnoringVisibility
2626
import androidx.compose.foundation.layout.width
2727
import androidx.compose.foundation.layout.windowInsetsPadding
28-
import androidx.compose.foundation.layout.wrapContentHeight
2928
import androidx.compose.material.Text
3029
import androidx.compose.runtime.Composable
3130
import androidx.compose.runtime.getValue
@@ -45,7 +44,6 @@ import androidx.compose.ui.graphics.ImageBitmap
4544
import androidx.compose.ui.graphics.asImageBitmap
4645
import androidx.compose.ui.graphics.drawscope.DrawScope
4746
import androidx.compose.ui.layout.ContentScale
48-
import androidx.compose.ui.platform.LocalDensity
4947
import androidx.compose.ui.res.imageResource
5048
import androidx.compose.ui.res.painterResource
5149
import androidx.compose.ui.unit.Dp
@@ -61,11 +59,11 @@ import com.getcode.model.KinAmount
6159
import com.getcode.solana.keys.Key32.Companion.kinMint
6260
import com.getcode.solana.keys.base58
6361
import com.getcode.theme.CodeTheme
64-
import com.getcode.ui.utils.debugBounds
65-
import com.getcode.util.formattedRaw
62+
import com.getcode.ui.utils.drawWithGradient
6663
import com.getcode.ui.utils.nonScaledSp
6764
import com.getcode.ui.utils.punchCircle
6865
import com.getcode.ui.utils.punchRectangle
66+
import com.getcode.util.formattedRaw
6967
import kotlinx.coroutines.CoroutineScope
7068
import kotlinx.coroutines.Dispatchers
7169
import kotlinx.coroutines.launch
@@ -212,7 +210,7 @@ private class CashBillGeometry(width: Dp, height: Dp) {
212210
val wavesPosition: Offset
213211
get() = Offset(
214212
x = (size.width.value * 0.5f),
215-
y = (size.height.value * 0.5f)
213+
y = (size.height.value * 0.9f)
216214
)
217215

218216
init {
@@ -256,6 +254,7 @@ internal fun CashBill(
256254
blendMode = BlendMode.Multiply,
257255
alpha = 0.6f,
258256
)
257+
259258
// Grid pattern
260259
CashBillAssets.grid?.let {
261260
Image(
@@ -293,14 +292,13 @@ internal fun CashBill(
293292
Image(
294293
modifier = Modifier
295294
.requiredWidth(geometry.globeWidth)
296-
.align(Alignment.BottomCenter)
297-
.height(geometry.wavesPosition.y.dp)
298-
.offset {
299-
IntOffset(
300-
x = geometry.wavesPosition.x.toInt(),
301-
y = 0
302-
)
303-
},
295+
.fillMaxHeight()
296+
.offset { IntOffset(x = geometry.wavesPosition.x.toInt(), y = 0) }
297+
.drawWithGradient(
298+
color = CashBillDefaults.BillColor.copy(CashBillDefaults.CodeBackgroundOpacity),
299+
startY = { it / 2f },
300+
blendMode = BlendMode.DstIn
301+
),
304302
contentDescription = null,
305303
contentScale = ContentScale.FillBounds,
306304
bitmap = ImageBitmap.imageResource(R.drawable.ic_bill_waves),

0 commit comments

Comments
 (0)