From 236ff185435346f698157f02b48a03c21479acd7 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 27 Aug 2026 18:46:31 +0300 Subject: [PATCH] =?UTF-8?q?ui(glasses):=20=D0=BE=D0=B2=D0=B5=D1=80=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B0=D1=81=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BD=D0=B0=D0=BA=D1=80=D1=8B=D0=B2=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B2=D0=B5=D1=81=D1=8C=20=D0=B2=D1=8C=D1=8E=D0=BF?= =?UTF-8?q?=D0=BE=D1=80=D1=82=20(fillMaxSize,=20=D0=BD=D0=B5=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B7=D1=80=D0=B0=D1=87=D0=BD=D1=8B=D0=B9=20=D1=87=D1=91?= =?UTF-8?q?=D1=80=D0=BD=D1=8B=D0=B9)=20=E2=80=94=20=D0=BD=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=BC=D0=B0=D1=81=D1=88=D1=82=D0=B0=D0=B1=D0=B0=20=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D1=83=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B0=20?= =?UTF-8?q?=C2=AB=D0=92=D1=8B=D1=81=D0=BE=D1=82=D0=B0=C2=BB=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../viewmate/glasses/ui/AssistantOverlay.kt | 54 ++++++++++++------- 1 file changed, 34 insertions(+), 20 deletions(-) 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), + ) + } } } }