Высота: видео в контейнере прижимается к верху/низу по vertical (Row-центрирование съедало вертикаль)

This commit is contained in:
2026-08-25 02:15:48 +03:00
parent 6d22f56bd8
commit 883fd8e5e4
2 changed files with 40 additions and 1 deletions
@@ -115,6 +115,9 @@ fun GlassesMovieScreen(
) {
Row(
modifier = Modifier.fillMaxWidth().background(Color.Black),
// Видео в контейнере прижимается к верху (vertical=1) или низу (vertical=0):
// Row-центрирование съедало вертикаль — картинка оставалась «по центру».
verticalAlignment = Alignment.Top,
horizontalArrangement = if (side == Side.LEFT) Arrangement.End else Arrangement.Start,
) {
if (SCALE_DEBUG_SQUARE) {
@@ -125,7 +128,9 @@ fun GlassesMovieScreen(
BinocularVideoPlayer(
player = player,
renderer = renderer,
modifier = Modifier.size(playerWidth.px, playerHeight.px),
modifier = Modifier
.size(playerWidth.px, playerHeight.px)
.offset(y = videoOffsetY(containerH, playerHeight, vertical).px),
)
}
}
@@ -155,6 +160,14 @@ fun scaleOffsetX(side: Side, screenWidthPx: Int, scale: Float): Int =
fun verticalOffsetY(screenHeightPx: Int, scale: Float, vertical: Float): Int =
((1f - vertical) * screenHeightPx * (1f - scale)).toInt()
/**
* Смещение видео внутри контейнера глаза: vertical=1.0 — у верха контейнера,
* 0.0 — у низа (нижняя кромка видео прижата к низу контейнера, который сам
* у низа экрана при vertical=0). Row-центрирование иначе съедало вертикаль.
*/
fun videoOffsetY(containerHeightPx: Int, videoHeightPx: Int, vertical: Float): Int =
((1f - vertical) * (containerHeightPx - videoHeightPx).coerceAtLeast(0)).toInt()
/** Отладочный режим: красный квадрат вместо видео (проверка масштаба/позиций скрином). Перед финалом — false. */
private const val SCALE_DEBUG_SQUARE = false