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 import pw.binom.viewmate.glasses.gestures.scrollOffset
/** /**
* Оверлей режима общения с ассистентом: затемняет 72% чёрным ЛЮБУЮ картинку * Оверлей режима общения с ассистентом: непрозрачным чёрным накрывает ВСЁ вьюпорт
* (кино или экран подключения) — режим общения явный (docs/gestures-and-modes.md). * каждого глаза (100% площади) — независимо от масштаба/высоты видео (регулятор
* По глазам ([Binocular]), как все экраны. Состояния: «слушаю»/«думаю...» — заголовок, * «Высота»): полная замена картины оверлеем (TZ-ui-four п.4). Содержимое остаётся
* в том же scale-контейнере, что у экранов. Режим общения явный
* (docs/gestures-and-modes.md). По глазам ([Binocular]), как все экраны.
* Состояния: «слушаю»/«думаю...» — заголовок,
* «ответ виден» — прокручиваемая история диалога (дельта скролла от жестов — * «ответ виден» — прокручиваемая история диалога (дельта скролла от жестов —
* [GlassesApp.answerScrollDelta]). * [GlassesApp.answerScrollDelta]).
*/ */
@@ -81,7 +84,13 @@ fun AssistantOverlay() {
overlayBox(app, state, chatHistory, scrollState) overlayBox(app, state, chatHistory, scrollState)
} }
/** Поглазник: тот же scale/offset-контейнер, что у экранов, но с затемнением вместо чёрного. */ /**
* Поглазник: затемняющий слой накрывает ВСЁ поле глаза (100% viewport)
* непрозрачным чёрным — поверх SurfaceView-видео и любого положения регулятора
* «Высота» (TZ-ui-four п.4: 72%-полупрозрачный слой поверх контейнера видео
* оставался «проглядывающим» — видео светилось/не затемнялось). Контент
* (текст/редактирование) остаётся в том же scale/offset-контейнере, что у экранов.
*/
@Composable @Composable
private fun overlayBox( private fun overlayBox(
app: GlassesApp, app: GlassesApp,
@@ -96,6 +105,11 @@ private fun overlayBox(
val side = BinocularScreenSide.current val side = BinocularScreenSide.current
val containerW = (screenWidthPx * scale).toInt() val containerW = (screenWidthPx * scale).toInt()
val containerH = (screenHeightPx * scale).toInt() val containerH = (screenHeightPx * scale).toInt()
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Black),
) {
Box( Box(
modifier = Modifier modifier = Modifier
.width(containerW.px) .width(containerW.px)
@@ -103,8 +117,7 @@ private fun overlayBox(
.offset( .offset(
x = scaleOffsetX(side, screenWidthPx, scale).px, x = scaleOffsetX(side, screenWidthPx, scale).px,
// вертикаль (vertical) — только для видео; оверлей всегда у верха // вертикаль (vertical) — только для видео; оверлей всегда у верха
) ),
.background(Color.Black.copy(alpha = 0.72f)),
) { ) {
AssistantOverlayContent(state, chatHistory, scrollState) AssistantOverlayContent(state, chatHistory, scrollState)
@@ -120,6 +133,7 @@ private fun overlayBox(
} }
} }
} }
}
@Composable @Composable
private fun AssistantOverlayContent( private fun AssistantOverlayContent(