LocationPin : disable hardware rendering if needed
This commit is contained in:
@@ -182,7 +182,11 @@ private fun LocationPinMarkerLayer(
|
||||
@Composable
|
||||
private fun rememberLocationPinImage(variant: PinVariant): ImageBitmap {
|
||||
val bitmap = rememberMarkerBitmap(variant) {
|
||||
LocationPin(variant = variant)
|
||||
LocationPin(
|
||||
variant = variant,
|
||||
// Disable as it doesn't work with the rememberMarkerBitmap method
|
||||
allowHardwareBitmapRendering = false
|
||||
)
|
||||
}
|
||||
return bitmap.asImageBitmap()
|
||||
}
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user