From 1e8ee3b0ae54021120500cc9b83d873407d84bc0 Mon Sep 17 00:00:00 2001 From: Sargun Vohra Date: Tue, 31 Dec 2024 10:06:41 -0800 Subject: [PATCH] fix: use texture mode on android to fix compose animations --- .../kotlin/dev/sargunv/maplibrecompose/demoapp/app.kt | 2 +- .../sargunv/maplibrecompose/demoapp/demos/FrameRateDemo.kt | 4 ++-- .../kotlin/dev/sargunv/maplibrecompose/demoapp/util.kt | 5 +---- .../dev/sargunv/maplibrecompose/compose/AndroidMapView.kt | 4 +++- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/app.kt b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/app.kt index dceb148e..9103bc72 100644 --- a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/app.kt +++ b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/app.kt @@ -60,7 +60,7 @@ private val DEMOS = buildList { add(AnimatedLayerDemo) } if (!Platform.isDesktop) add(CameraStateDemo) - if (Platform.isNative) add(CameraFollowDemo) + if (Platform.usesMaplibreNative) add(CameraFollowDemo) if (!Platform.isDesktop) add(FrameRateDemo) } diff --git a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/demos/FrameRateDemo.kt b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/demos/FrameRateDemo.kt index 5e091d39..93789886 100644 --- a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/demos/FrameRateDemo.kt +++ b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/demos/FrameRateDemo.kt @@ -24,7 +24,7 @@ import dev.sargunv.maplibrecompose.demoapp.DemoOrnamentSettings import dev.sargunv.maplibrecompose.demoapp.DemoScaffold import dev.sargunv.maplibrecompose.demoapp.FrameRateState import dev.sargunv.maplibrecompose.demoapp.Platform -import dev.sargunv.maplibrecompose.demoapp.isNative +import dev.sargunv.maplibrecompose.demoapp.usesMaplibreNative import kotlin.math.roundToInt object FrameRateDemo : Demo { @@ -59,7 +59,7 @@ object FrameRateDemo : Demo { value = maximumFps.toFloat(), onValueChange = { maximumFps = it.roundToInt() }, valueRange = 15f..systemRefreshRate.toFloat().coerceAtLeast(15f), - enabled = Platform.isNative, + enabled = Platform.usesMaplibreNative, ) Text( "Target: $maximumFps ${fpsState.spinChar} Actual: ${fpsState.avgFps}", diff --git a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/util.kt b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/util.kt index 5d590e63..4c37b73b 100644 --- a/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/util.kt +++ b/demo-app/src/commonMain/kotlin/dev/sargunv/maplibrecompose/demoapp/util.kt @@ -90,8 +90,5 @@ val Platform.supportsLayers: Boolean val Platform.supportsBlending: Boolean get() = isAndroid || isIos -val Platform.isNative: Boolean +val Platform.usesMaplibreNative: Boolean get() = isAndroid || isIos - -val Platform.isJs: Boolean - get() = isWeb || isDesktop diff --git a/lib/maplibre-compose/src/androidMain/kotlin/dev/sargunv/maplibrecompose/compose/AndroidMapView.kt b/lib/maplibre-compose/src/androidMain/kotlin/dev/sargunv/maplibrecompose/compose/AndroidMapView.kt index cc513fe4..bdf8a45b 100644 --- a/lib/maplibre-compose/src/androidMain/kotlin/dev/sargunv/maplibrecompose/compose/AndroidMapView.kt +++ b/lib/maplibre-compose/src/androidMain/kotlin/dev/sargunv/maplibrecompose/compose/AndroidMapView.kt @@ -15,6 +15,7 @@ import dev.sargunv.maplibrecompose.core.AndroidMap import dev.sargunv.maplibrecompose.core.AndroidScaleBar import dev.sargunv.maplibrecompose.core.MaplibreMap import org.maplibre.android.MapLibre +import org.maplibre.android.maps.MapLibreMapOptions import org.maplibre.android.maps.MapView @Composable @@ -58,7 +59,8 @@ internal fun AndroidMapView( modifier = modifier, factory = { context -> MapLibre.getInstance(context) - MapView(context).also { mapView -> + MapView(context, MapLibreMapOptions.createFromAttributes(context).textureMode(true)).also { + mapView -> currentMapView = mapView mapView.getMapAsync { map -> currentMap =