ui(glasses): оверлей ассистента накрывает весь вьюпорт (fillMaxSize, непрозрачный чёрный) — независимо от масштаба и регулятора «Высота» видео

This commit is contained in:
2026-08-27 18:46:31 +03:00
parent 412e093174
commit 236ff18543
@@ -36,9 +36,12 @@ import pw.binom.viewmate.glasses.gestures.overlayVisible
import pw.binom.viewmate.glasses.gestures.scrollOffset
/**
* Оверлей режима общения с ассистентом: затемняет 72% чёрным ЛЮБУЮ картинку
* (кино или экран подключения) — режим общения явный (docs/gestures-and-modes.md).
* По глазам ([Binocular]), как все экраны. Состояния: «слушаю»/«думаю...» — заголовок,
* Оверлей режима общения с ассистентом: непрозрачным чёрным накрывает ВСЁ вьюпорт
* каждого глаза (100% площади) — независимо от масштаба/высоты видео (регулятор
* «Высота»): полная замена картины оверлеем (TZ-ui-four п.4). Содержимое остаётся
* в том же scale-контейнере, что у экранов. Режим общения явный
* (docs/gestures-and-modes.md). По глазам ([Binocular]), как все экраны.
* Состояния: «слушаю»/«думаю...» — заголовок,
* «ответ виден» — прокручиваемая история диалога (дельта скролла от жестов —
* [GlassesApp.answerScrollDelta]).
*/
@@ -81,7 +84,13 @@ fun AssistantOverlay() {
overlayBox(app, state, chatHistory, scrollState)
}
/** Поглазник: тот же scale/offset-контейнер, что у экранов, но с затемнением вместо чёрного. */
/**
* Поглазник: затемняющий слой накрывает ВСЁ поле глаза (100% viewport)
* непрозрачным чёрным — поверх SurfaceView-видео и любого положения регулятора
* «Высота» (TZ-ui-four п.4: 72%-полупрозрачный слой поверх контейнера видео
* оставался «проглядывающим» — видео светилось/не затемнялось). Контент
* (текст/редактирование) остаётся в том же scale/offset-контейнере, что у экранов.
*/
@Composable
private fun overlayBox(
app: GlassesApp,
@@ -98,24 +107,29 @@ private fun overlayBox(
val containerH = (screenHeightPx * scale).toInt()
Box(
modifier = Modifier
.width(containerW.px)
.height(containerH.px)
.offset(
x = scaleOffsetX(side, screenWidthPx, scale).px,
// вертикаль (vertical) — только для видео; оверлей всегда у верха
)
.background(Color.Black.copy(alpha = 0.72f)),
.fillMaxSize()
.background(Color.Black),
) {
AssistantOverlayContent(state, chatHistory, scrollState)
Box(
modifier = Modifier
.width(containerW.px)
.height(containerH.px)
.offset(
x = scaleOffsetX(side, screenWidthPx, scale).px,
// вертикаль (vertical) — только для видео; оверлей всегда у верха
),
) {
AssistantOverlayContent(state, chatHistory, scrollState)
if (state.listening) {
Box(
modifier = Modifier
.align(Alignment.TopEnd)
.padding(top = 12.dp, end = 12.dp)
.size(16.dp)
.background(Color(0xFFFF3B30), CircleShape),
)
if (state.listening) {
Box(
modifier = Modifier
.align(Alignment.TopEnd)
.padding(top = 12.dp, end = 12.dp)
.size(16.dp)
.background(Color(0xFFFF3B30), CircleShape),
)
}
}
}
}