diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/ui/AssistantOverlay.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/ui/AssistantOverlay.kt index 6402758..08def1c 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/ui/AssistantOverlay.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/ui/AssistantOverlay.kt @@ -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), + ) + } } } }