Skip to content

Commit affa4bd

Browse files
committed
chore(fc): adjust layout for hostable avatar some more for clip prevention
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 3616918 commit affa4bd

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

ui/components/src/main/kotlin/com/getcode/ui/components/chat/HostableAvatar.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.draw.clip
1414
import androidx.compose.ui.graphics.Color
1515
import androidx.compose.ui.graphics.ColorFilter
16+
import androidx.compose.ui.graphics.CompositingStrategy
17+
import androidx.compose.ui.graphics.graphicsLayer
1618
import androidx.compose.ui.graphics.painter.Painter
1719
import androidx.compose.ui.layout.Layout
1820
import androidx.compose.ui.layout.MeasureScope
@@ -59,7 +61,7 @@ fun HostableAvatar(
5961
}
6062
) {
6163
Layout(
62-
modifier = modifier,
64+
modifier = modifier.graphicsLayer { clip = false },
6365
content = {
6466
UserAvatar(
6567
modifier = Modifier
@@ -73,6 +75,7 @@ fun HostableAvatar(
7375
if (isHost) {
7476
Image(
7577
modifier = imageModifier
78+
.graphicsLayer { compositingStrategy = CompositingStrategy.Offscreen }
7679
.layoutId("crown")
7780
.size(getBadgeSize(size))
7881
.background(color = Color(0xFFE9C432), shape = CircleShape)
@@ -88,6 +91,7 @@ fun HostableAvatar(
8891
is AvatarEndAction.Icon -> {
8992
Image(
9093
modifier = imageModifier
94+
.graphicsLayer { compositingStrategy = CompositingStrategy.Offscreen }
9195
.layoutId("badge")
9296
.size(getBadgeSize(size))
9397
.background(color = endAction.backgroundColor, shape = CircleShape)
@@ -160,13 +164,13 @@ private fun MeasureScope.placeBadgeOnAvatarPerimeter(
160164

161165
val badgeRadius = widthOrZero(placeable) / 2f
162166

163-
val distanceBetweenCenters = avatarRadius + badgeRadius - 16.dp.toPx()
167+
val distanceBetweenCenters = avatarRadius + badgeRadius - (avatarRadius * 0.30f)
164168

165169
val badgeCenterX = centerX + distanceBetweenCenters * cos(angle)
166170
val badgeCenterY = centerY + distanceBetweenCenters * sin(angle)
167171

168172
val offsetX = badgeCenterX - badgeRadius
169-
val offsetY = badgeCenterY - badgeRadius
173+
val offsetY = badgeCenterY - badgeRadius + 2.dp.toPx()
170174

171175
return IntOffset(offsetX.roundToInt(), offsetY.roundToInt())
172176
}

0 commit comments

Comments
 (0)