ui(glasses): оверлей ассистента накрывает весь вьюпорт (fillMaxSize, непрозрачный чёрный) — независимо от масштаба и регулятора «Высота» видео
This commit is contained in:
@@ -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),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user