LocationPin : disable hardware rendering if needed
This commit is contained in:
parent
785587911b
commit
5f16a5658b
3 changed files with 24 additions and 6 deletions
|
|
@ -182,7 +182,11 @@ private fun LocationPinMarkerLayer(
|
||||||
@Composable
|
@Composable
|
||||||
private fun rememberLocationPinImage(variant: PinVariant): ImageBitmap {
|
private fun rememberLocationPinImage(variant: PinVariant): ImageBitmap {
|
||||||
val bitmap = rememberMarkerBitmap(variant) {
|
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()
|
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.Fill
|
||||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import coil3.request.allowHardware
|
||||||
import io.element.android.compound.theme.ElementTheme
|
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.AvatarData
|
||||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
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.AvatarType
|
||||||
import io.element.android.libraries.designsystem.components.avatar.avatarShape
|
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.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
|
|
||||||
|
|
@ -61,6 +62,7 @@ private val CONTENT_OFFSET = 5.dp
|
||||||
fun LocationPin(
|
fun LocationPin(
|
||||||
variant: PinVariant,
|
variant: PinVariant,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
allowHardwareBitmapRendering: Boolean = true,
|
||||||
) {
|
) {
|
||||||
val colors = LocationPinColors.fromVariant(variant)
|
val colors = LocationPinColors.fromVariant(variant)
|
||||||
Box(
|
Box(
|
||||||
|
|
@ -80,12 +82,16 @@ fun LocationPin(
|
||||||
|
|
||||||
when (variant) {
|
when (variant) {
|
||||||
is PinVariant.UserLocation -> {
|
is PinVariant.UserLocation -> {
|
||||||
Avatar(
|
val avatarShape = AvatarType.User.avatarShape()
|
||||||
|
ImageAvatar(
|
||||||
avatarData = variant.avatarData,
|
avatarData = variant.avatarData,
|
||||||
forcedAvatarSize = avatarSize,
|
forcedAvatarSize = avatarSize,
|
||||||
avatarType = AvatarType.User,
|
avatarShape = avatarShape,
|
||||||
modifier = contentModifier
|
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 -> {
|
PinVariant.PinnedLocation, PinVariant.StaleLocation -> {
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,12 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import coil3.compose.AsyncImagePainter
|
import coil3.compose.AsyncImagePainter
|
||||||
import coil3.compose.SubcomposeAsyncImage
|
import coil3.compose.SubcomposeAsyncImage
|
||||||
import coil3.compose.SubcomposeAsyncImageContent
|
import coil3.compose.SubcomposeAsyncImageContent
|
||||||
|
import coil3.request.ImageRequest
|
||||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
|
|
@ -31,10 +33,16 @@ internal fun ImageAvatar(
|
||||||
forcedAvatarSize: Dp?,
|
forcedAvatarSize: Dp?,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
contentDescription: String? = null,
|
contentDescription: String? = null,
|
||||||
|
configureRequest: (ImageRequest.Builder) -> ImageRequest.Builder = { it },
|
||||||
) {
|
) {
|
||||||
val size = forcedAvatarSize ?: avatarData.size.dp
|
val size = forcedAvatarSize ?: avatarData.size.dp
|
||||||
|
val request = ImageRequest.Builder(LocalContext.current)
|
||||||
|
.data(avatarData)
|
||||||
|
.let(configureRequest)
|
||||||
|
.build()
|
||||||
|
|
||||||
SubcomposeAsyncImage(
|
SubcomposeAsyncImage(
|
||||||
model = avatarData,
|
model = request,
|
||||||
contentDescription = contentDescription,
|
contentDescription = contentDescription,
|
||||||
contentScale = ContentScale.Crop,
|
contentScale = ContentScale.Crop,
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue