@@ -14,13 +14,17 @@ import androidx.compose.ui.Alignment
1414import androidx.compose.ui.Modifier
1515import androidx.compose.ui.draw.clip
1616import androidx.compose.ui.graphics.painter.Painter
17+ import androidx.compose.ui.layout.Layout
18+ import androidx.compose.ui.layout.layoutId
1719import androidx.compose.ui.res.painterResource
1820import androidx.compose.ui.res.stringResource
1921import androidx.compose.ui.tooling.preview.Preview
2022import androidx.compose.ui.unit.Dp
2123import com.getcode.R
2224import com.getcode.theme.CodeTheme
25+ import com.getcode.util.heightOrZero
2326import com.getcode.util.rememberedClickable
27+ import com.getcode.util.widthOrZero
2428import com.getcode.view.components.Badge
2529import com.getcode.view.components.Row
2630import com.getcode.view.components.chat.ChatNodeDefaults
@@ -49,7 +53,7 @@ internal fun HomeBottom(
4953 top = CodeTheme .dimens.grid.x1,
5054 bottom = CodeTheme .dimens.grid.x2,
5155 ),
52- imageSize = CodeTheme .dimens.grid.x6 ,
56+ imageSize = CodeTheme .dimens.grid.x7 ,
5357 painter = painterResource(R .drawable.ic_wallet),
5458 onClick = { onPress(HomeBottomSheet .GET_KIN ) }
5559 )
@@ -88,28 +92,51 @@ private fun BottomBarAction(
8892 badge : @Composable () -> Unit = { },
8993 onClick : () -> Unit ,
9094) {
91- Box (modifier = modifier) {
92- Column (
93- modifier = Modifier
94- .align(Alignment .Center )
95- .clip(CodeTheme .shapes.medium)
96- .rememberedClickable { onClick() },
97- horizontalAlignment = Alignment .CenterHorizontally
98- ) {
99- Image (
95+ Layout (
96+ modifier = modifier,
97+ content = {
98+ Column (
10099 modifier = Modifier
101- .padding(contentPadding)
102- .size(imageSize),
103- painter = painter,
104- contentDescription = null ,
105- )
106- Text (
107- text = label,
108- style = CodeTheme .typography.body2
109- )
100+ .clip(CodeTheme .shapes.medium)
101+ .rememberedClickable { onClick() }
102+ .layoutId(" action" ),
103+ horizontalAlignment = Alignment .CenterHorizontally
104+ ) {
105+ Image (
106+ modifier = Modifier
107+ .padding(contentPadding)
108+ .size(imageSize),
109+ painter = painter,
110+ contentDescription = null ,
111+ )
112+ Text (
113+ text = label,
114+ style = CodeTheme .typography.body2
115+ )
116+ }
117+
118+ Box (modifier = Modifier .layoutId(" badge" )) {
119+ badge()
120+ }
110121 }
111- Box (modifier = Modifier .align(Alignment .TopEnd )) {
112- badge()
122+ ) { measurables, incomingConstraints ->
123+ val constraints = incomingConstraints.copy(minWidth = 0 , minHeight = 0 )
124+ val actionPlaceable =
125+ measurables.find { it.layoutId == " action" }?.measure(constraints)
126+ val badgePlaceable =
127+ measurables.find { it.layoutId == " badge" }?.measure(constraints)
128+
129+ val maxWidth = widthOrZero(actionPlaceable)
130+ val maxHeight = heightOrZero(actionPlaceable) // + heightOrZero(badgePlaceable) / 2
131+ layout(
132+ width = maxWidth,
133+ height = maxHeight,
134+ ) {
135+ actionPlaceable?.placeRelative(0 , 0 )
136+ badgePlaceable?.placeRelative(
137+ x = maxWidth - widthOrZero(badgePlaceable),
138+ y = - (heightOrZero(badgePlaceable) / 2 )
139+ )
113140 }
114141 }
115142}
0 commit comments