Compose Unstyled 2.0 is out! Check the official announcement blog ->
Function

transformingMovable

Configures this subspace element to be interactive and movable, delegating the pose transformation to the system.

BasicTransformingMovableSample

/** A sample demonstrating a simple movable component. */
@SubspaceComposable
@Composable
public fun BasicTransformingMovableSample() {
    SpatialPanel(modifier = SubspaceModifier.transformingMovable()) {
        Text("The user can move me around!")
    }
}

TransformingMovableSiblingSample

/**
 * A sample demonstrating movement of sibling composables using the onMove callback from the
 * transformingMovable modifier
 */
@SubspaceComposable
@Composable
public fun TransformingMovableSiblingSample() {
    val density = LocalDensity.current
    var xOffset by remember { mutableStateOf(0.dp) }
    var yOffset by remember { mutableStateOf(0.dp) }
    var zOffset by remember { mutableStateOf(0.dp) }
    val customMovement: (SpatialMoveEvent) -> Unit = { moveEvent ->
        with(density) {
            xOffset = moveEvent.pose.translation.x.toDp()
            yOffset = moveEvent.pose.translation.y.toDp()
            zOffset = moveEvent.pose.translation.z.toDp()
        }
    }
    Subspace {
        SpatialPanel(modifier = SubspaceModifier.transformingMovable(onMove = customMovement)) {
            Text("The user can move me around")
        }
        SpatialPanel(modifier = SubspaceModifier.offset(x = xOffset, y = yOffset, z = zOffset)) {
            Text("Sibling Panel")
        }
    }
}

Last updated: