Change state propagation and rectangle selection
This commit is contained in:
parent
6b0a2566bd
commit
fa51fc03db
@ -96,8 +96,8 @@ fun App() {
|
||||
|
||||
centerCoordinates?.let {
|
||||
group(id = "center") {
|
||||
circle(center = it, color = Color.Blue, size = 1f)
|
||||
text(position = it, it.toShortString(), color = Color.Blue)
|
||||
circle(center = it, color = Color.Blue, id = "circle", size = 1f)
|
||||
text(position = it, it.toShortString(), id = "text", color = Color.Blue)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@ public interface MapFeatureBuilder {
|
||||
|
||||
public val features: MutableMap<FeatureId, MapFeature>
|
||||
|
||||
public fun attributes(): Map<FeatureId, MapFeatureAttributeSet>
|
||||
public val attributes: Map<FeatureId, MapFeatureAttributeSet>
|
||||
|
||||
//TODO use context receiver for that
|
||||
public fun FeatureId.draggable(enabled: Boolean = true) {
|
||||
@ -42,7 +42,7 @@ internal class MapFeatureBuilderImpl(
|
||||
override val features: SnapshotStateMap<FeatureId, MapFeature>,
|
||||
) : MapFeatureBuilder {
|
||||
|
||||
private val attributes = SnapshotStateMap<FeatureId, SnapshotStateMap<MapFeatureAttributeKey<out Any?>, in Any?>>()
|
||||
private val _attributes = SnapshotStateMap<FeatureId, SnapshotStateMap<MapFeatureAttributeKey<out Any?>, in Any?>>()
|
||||
|
||||
|
||||
private fun generateID(feature: MapFeature): FeatureId = "@feature[${feature.hashCode().toUInt()}]"
|
||||
@ -54,11 +54,11 @@ internal class MapFeatureBuilderImpl(
|
||||
}
|
||||
|
||||
override fun <T> setAttribute(id: FeatureId, key: MapFeatureAttributeKey<T>, value: T) {
|
||||
attributes.getOrPut(id) { SnapshotStateMap() }[key] = value
|
||||
_attributes.getOrPut(id) { SnapshotStateMap() }[key] = value
|
||||
}
|
||||
|
||||
override fun attributes(): Map<FeatureId, MapFeatureAttributeSet> =
|
||||
attributes.mapValues { MapFeatureAttributeSet(it.value) }
|
||||
override val attributes: Map<FeatureId, MapFeatureAttributeSet>
|
||||
get() = _attributes.mapValues { MapFeatureAttributeSet(it.value) }
|
||||
|
||||
}
|
||||
|
||||
|
@ -104,15 +104,15 @@ public fun MapView(
|
||||
buildFeatures: @Composable (MapFeatureBuilder.() -> Unit) = {},
|
||||
) {
|
||||
|
||||
var viewPointOverride by remember { mutableStateOf(initialViewPoint ?: MapViewPoint.globe) }
|
||||
var viewPointOverride by remember(initialViewPoint, initialRectangle) { mutableStateOf(initialViewPoint ?: MapViewPoint.globe) }
|
||||
|
||||
val featuresBuilder = MapFeatureBuilderImpl(mutableStateMapOf()).apply { buildFeatures() }
|
||||
|
||||
val features: SnapshotStateMap<FeatureId, MapFeature> = remember { featuresBuilder.features }
|
||||
val features: SnapshotStateMap<FeatureId, MapFeature> = remember(buildFeatures) { featuresBuilder.features }
|
||||
|
||||
val attributes = remember { featuresBuilder.attributes() }
|
||||
val attributes = remember(buildFeatures) { featuresBuilder.attributes }
|
||||
|
||||
val featureDrag = remember {
|
||||
val featureDrag by derivedStateOf {
|
||||
DragHandle.withPrimaryButton { _, start, end ->
|
||||
val zoom = start.zoom
|
||||
attributes.filterValues {
|
||||
|
Loading…
Reference in New Issue
Block a user