Окна у выреза
Создавайте нативные окна macOS, прикреплённые к корпусу камеры.
NewNotchWindow создаёт фигурную неактивирующую панель macOS, прикреплённую к корпусу камеры. Wails управляет её нативным расположением, чёрными боковыми областями примыкания, прозрачным внешним холстом, уровнем окна, поведением в пространствах Spaces, а также необязательной анимацией показа и скрытия. Веб-содержимое занимает только запрошенную внутреннюю прямоугольную область. При наведении указателя на окно его webview немедленно становится ключевым, не активируя приложение.
alert := app.Window.NewNotchWindow(application.NotchWindowOptions{
Width: 660,
Height: 92,
Animated: true,
WindowOptions: application.WebviewWindowOptions{
Name: "alert",
URL: "/alert",
},
})
alert.Show()
alert.Hide()
visible := alert.Visibility()
alert.Close()Параметры
| Поле | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
Width |
int |
660 |
Доступная ширина webview внутри нативных фигурных краёв. |
Height |
int |
92 |
Доступная высота webview внутри нативных фигурных краёв. |
Animated |
bool |
false |
Сдвигает окно вниз при Show и вверх при Hide. |
AnimationSpeed |
time.Duration |
420ms |
Продолжительность показа. Для скрытия используются две трети этого значения; по умолчанию — 280ms. |
Screen |
*Screen |
основной дисплей | Выбирает конкретный дисплей. Если он не указан, Wails использует основной дисплей. |
WindowOptions |
WebviewWindowOptions |
значения по умолчанию | Задаёт имя, URL или HTML, CSS, JavaScript, сочетания клавиш и другие параметры поведения webview. |
NewNotchWindow управляет внешними размерами, положением, рамкой, прозрачностью, политикой изменения размера, классом нативной панели, уровнем окна и поведением в коллекциях. Значения этих полей в WindowOptions намеренно заменяются. Остальные поля сохраняются. Нативное перетаскивание за фон и области перетаскивания CSS отключены, чтобы окно оставалось прикреплённым к корпусу камеры.
Возвращаемый NotchWindow намеренно предоставляет только Show, Hide, Visibility и Close; нативную геометрию нельзя изменить через высокоуровневый дескриптор.
Жизненный цикл
Showпоказывает существующее нативное окно. Если анимация включена, оно выдвигается вниз из-за верхней границы дисплея.Hideсохраняет окно для повторного использования. Если анимация включена, оно сдвигается обратно за верхнюю границу дисплея, прежде чем будет убрано с экрана. Webview, состояние JavaScript, привязки и обработчики событий остаются загруженными, но скрытое окно не реагирует на наведение; чтобы снова показать его, приложение должно вызватьShow.Visibilityсообщает текущее состояние нативной видимости.Closeбезвозвратно уничтожает нативное окно. Прежде чем снова показать это уведомление, создайте новое окно.- При наведении указателя окно у выреза выводится на передний план, а его webview получает фокус для немедленного взаимодействия с клавиатурой, при этом панель по-прежнему не активирует приложение.
Каждый вызов NewNotchWindow создаёт независимое окно с собственным содержимым, состоянием видимости и анимации. Окна используют один и тот же нативный уровень, поэтому последний показанный экземпляр или экземпляр, на который последним навели указатель, выводится на передний план и может перекрывать предыдущие экземпляры. Если окна предназначены для разных экранов, каждое из них центрируется относительно корпуса камеры соответствующего экрана. macOS не координирует окна у выреза, принадлежащие разным приложениям; если разные приложения показывают окна в одном месте и на одном уровне, последним выведенное окно оказывается на переднем плане.
При работе с уведомлениями приложения обычно повторно используют скрытое окно или поддерживают собственную очередь в одном webview. Wails не навязывает очередь, замену, автоматическое скрытие или политику единственного окна.
См. пример notch-notification с компактным системным монитором, текущее состояние JavaScript которого сохраняется при многократных циклах показа и скрытия уведомления.