Boot splash and periodic announcement banner

Splash: resources/splash/splash.gif built into the binary, played once by
SplashOverlay over a black cover present from the first frame (no UI
flash), then fades into the UI; hides icons loading. GIF, so no
QtMultimedia/gstreamer. Toggle: splash.enabled.

Banner (InfoBanner): metro-style band that fades/slides in with a hold
pictogram; text that does not fit runs as a seamless ticker for two
rounds. Never takes touches; hidden during splash and settings. Config
section banner (enabled, text, intervalSec, showSec, position,
accentColor), editable in the web UI and on-device settings; shown once
after saving.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-10 10:58:16 +00:00
co-authored by Claude Opus 5.5
parent ec84133417
commit f07e153f09
22 changed files with 753 additions and 3 deletions
+20
View File
@@ -192,6 +192,25 @@ Window {
z: 20
}
// Periodic announcement ("удерживайте кнопку"); config section "banner".
InfoBanner {
id: infoBanner
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 12
y: settingsContainer.bannerPosition === "top"
? 12 : parent.height - height - 12
z: 30
suppressed: splash.active || root.secureDialogOpen
}
// Boot splash over everything in the window (dialogs live in the overlay
// layer, but none can be open this early).
SplashOverlay {
id: splash
z: 900
}
Connections {
target: settingsContainer
onChanged: root.hideSensorsIfDisabled()
@@ -304,6 +323,7 @@ Window {
SettingsDialog {
id: settingsDialog
onBannerPreview: infoBanner.preview()
}
InputPanel {