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
|
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(
|
||||||
|
|||||||
Reference in New Issue
Block a user