Панель статуса сдвигается к носу вместе с контейнером (panelOffsetX): центр панели = центр контейнера
This commit is contained in:
@@ -140,7 +140,10 @@ fun GlassesMovieScreen(
|
||||
}
|
||||
|
||||
StatusPanelCompose(
|
||||
modifier = Modifier.align(Alignment.BottomCenter).padding(bottom = 10.dp),
|
||||
modifier = Modifier
|
||||
.align(Alignment.BottomCenter)
|
||||
.offset(x = panelOffsetX(side, screenWidthPx, scale).px)
|
||||
.padding(bottom = 10.dp),
|
||||
scale = scale, // панель масштабируется вместе с контентом, но прибита к низу
|
||||
)
|
||||
}
|
||||
@@ -170,6 +173,14 @@ fun verticalOffsetY(screenHeightPx: Int, scale: Float, vertical: Float): Int =
|
||||
fun videoOffsetY(containerHeightPx: Int, videoHeightPx: Int, vertical: Float): Int =
|
||||
((1f - vertical) * (containerHeightPx - videoHeightPx).coerceAtLeast(0)).toInt()
|
||||
|
||||
/**
|
||||
* Горизонтальный сдвиг панели статуса к центру (к носу), чтобы её центр совпадал
|
||||
* с центром контейнера при любом масштабе: LEFT — вправо, RIGHT — влево,
|
||||
* на половину хода контейнера ((1 - scale) * W / 2).
|
||||
*/
|
||||
fun panelOffsetX(side: Side, screenWidthPx: Int, scale: Float): Int =
|
||||
((1f - scale) * screenWidthPx / 2f).toInt() * if (side == Side.LEFT) 1 else -1
|
||||
|
||||
/** Отладочный режим: красный квадрат вместо видео (проверка масштаба/позиций скрином). Перед финалом — false. */
|
||||
private const val SCALE_DEBUG_SQUARE = false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user