LocationPin : disable hardware rendering if needed

This commit is contained in:
ganfra
2026-03-05 18:03:29 +01:00
parent 3cce8caec4
commit 4704a6fc2a
3 changed files with 24 additions and 6 deletions

View File

@@ -25,12 +25,13 @@ import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.graphics.drawscope.Fill
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.unit.dp
import coil3.request.allowHardware
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.components.avatar.Avatar
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.avatar.avatarShape
import io.element.android.libraries.designsystem.components.avatar.internal.ImageAvatar
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@@ -61,6 +62,7 @@ private val CONTENT_OFFSET = 5.dp
fun LocationPin(
variant: PinVariant,
modifier: Modifier = Modifier,
allowHardwareBitmapRendering: Boolean = true,
) {
val colors = LocationPinColors.fromVariant(variant)
Box(
@@ -80,12 +82,16 @@ fun LocationPin(
when (variant) {
is PinVariant.UserLocation -> {
Avatar(
val avatarShape = AvatarType.User.avatarShape()
ImageAvatar(
avatarData = variant.avatarData,
forcedAvatarSize = avatarSize,
avatarType = AvatarType.User,
avatarShape = avatarShape,
modifier = contentModifier
.border(width = 1.dp, color = colors.avatarStoke, shape = AvatarType.User.avatarShape()),
.border(width = 1.dp, color = colors.avatarStoke, shape = avatarShape),
configureRequest = { builder ->
builder.allowHardware(allowHardwareBitmapRendering)
}
)
}
PinVariant.PinnedLocation, PinVariant.StaleLocation -> {

View File

@@ -17,10 +17,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp
import coil3.compose.AsyncImagePainter
import coil3.compose.SubcomposeAsyncImage
import coil3.compose.SubcomposeAsyncImageContent
import coil3.request.ImageRequest
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import timber.log.Timber
@@ -31,10 +33,16 @@ internal fun ImageAvatar(
forcedAvatarSize: Dp?,
modifier: Modifier = Modifier,
contentDescription: String? = null,
configureRequest: (ImageRequest.Builder) -> ImageRequest.Builder = { it },
) {
val size = forcedAvatarSize ?: avatarData.size.dp
val request = ImageRequest.Builder(LocalContext.current)
.data(avatarData)
.let(configureRequest)
.build()
SubcomposeAsyncImage(
model = avatarData,
model = request,
contentDescription = contentDescription,
contentScale = ContentScale.Crop,
modifier = modifier