Configures this subspace element to be interactive and movable.
BasicMovableSample
/** A sample demonstrating a simple movable component. */
@SubspaceComposable
@Composable
public fun BasicMovableSample() {
SpatialPanel(
modifier = SubspaceModifier.movable(enabled = true, movePolicy = MovePolicy.default())
) {
Text("The user can move me around!")
}
}
CustomMovableSample
/** A sample demonstrating a custom movable component. */
@SubspaceComposable
@Composable
public fun CustomMovableSample() {
var offsetX by remember { mutableStateOf(0.dp) }
var offsetY by remember { mutableStateOf(0.dp) }
var offsetZ by remember { mutableStateOf(0.dp) }
var rotation by remember { mutableStateOf(Quaternion.Identity) }
val density = LocalDensity.current
val customMovement: (SpatialMoveEvent) -> Unit = { moveEvent ->
offsetX = with(density) { moveEvent.pose.translation.x.toDp() }
offsetY = with(density) { moveEvent.pose.translation.y.toDp() }
offsetZ = with(density) { moveEvent.pose.translation.z.toDp() }
rotation = moveEvent.pose.rotation
}
SpatialPanel(
modifier =
SubspaceModifier.movable(
enabled = true,
movePolicy = MovePolicy.custom(onMove = customMovement),
)
.offset(x = offsetX, y = offsetY, z = offsetZ)
.rotate(rotation)
) {
Text("The user can move me around!")
}
}