Omkar Amberkar
08/27/2023, 11:39 PMOmkar Amberkar
08/27/2023, 11:39 PM@Composable
private fun PlayerScaffoldLayout(
modifier: Modifier,
state: PlayerState,
containerColor: Color,
contentColor: Color,
content: @Composable () -> Unit,
player: @Composable (layoutHeight: Int) -> Unit,
) {
SubcomposeLayout { constraints ->
val layoutWidth = constraints.maxWidth
val layoutHeight = constraints.maxHeight
val looseConstraints = constraints.copy(minWidth = 0, minHeight = 0)
val playerPlaceable = subcompose(Player) {
player(layoutHeight)
}[0].measure(looseConstraints.copy())
val playerOffsetX = Integer.max(0, (layoutWidth - playerPlaceable.width) / 2)
val playerOffsetY = state.requireOffset().roundToInt()
val contentConstraints = looseConstraints.copy(maxHeight = layoutHeight)
val contentPlaceable = subcompose(Content) {
Surface(
modifier = modifier,
color = containerColor,
contentColor = contentColor,
) {
content()
}
}[0].measure(contentConstraints)
layout(layoutWidth, layoutHeight) {
// Placement order is important for elevation
contentPlaceable.placeRelative(0, 0)
playerPlaceable.placeRelative(playerOffsetX, playerOffsetY)
}
}
}
Omkar Amberkar
08/27/2023, 11:40 PM