21be4fc620
windows-drivers / probe-and-proto (push) Successful in 23s
ci / rust (push) Failing after 49s
ci / docs-site (push) Successful in 50s
ci / web (push) Successful in 53s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 8s
decky / build-publish (push) Successful in 17s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 6s
apple / swift (push) Successful in 1m13s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 8s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 7s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 45s
windows-drivers / driver-build (push) Successful in 1m28s
flatpak / build-publish (push) Failing after 56s
android / android (push) Has been cancelled
apple / screenshots (push) Has been cancelled
arch / build-publish (push) Has been cancelled
ci / bench (push) Has been cancelled
deb / build-publish (push) Has been cancelled
docker / deploy-docs (push) Has been cancelled
release / apple (push) Has been cancelled
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Has been cancelled
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Has been cancelled
windows-host / package (push) Has been cancelled
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Has been cancelled
windows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Has been cancelled
windows / build (aarch64-pc-windows-msvc) (push) Has been cancelled
windows / build (x86_64-pc-windows-msvc) (push) Has been cancelled
- Remove the "releases mouse/keyboard" shortcut hint from the stats overlay (kept the capture hint). The release shortcut still lives on the Stream menu and, on macOS, the start-of-stream banner. - Animate the overlay: one shared glass card now wraps the tier content, so a verbosity change MORPHS the card's frame/shape in place instead of cross-fading a fresh card; the enter/exit transition is a scale-up from the HUD's own corner. Driven by .animation(.smooth, value: statsVerbosity). - iOS: give the card a corner radius concentric with the physical display (displayCornerRadius - inset, continuous curve) so it no longer cuts into the very rounded device corner. Reads _displayCornerRadius via KVC with a safe fallback (note: private API — App Store consideration). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
47 lines
1.6 KiB
Swift
47 lines
1.6 KiB
Swift
// The HUD-corner model persisted by Settings and read wherever the overlay is placed
|
|
// (ContentView, StreamHUDView).
|
|
|
|
import SwiftUI
|
|
|
|
/// Which corner the HUD overlay occupies (persisted as `DefaultsKey.hudPlacement`). The raw
|
|
/// values are stable on disk — rename the cases freely, never the strings.
|
|
enum HUDPlacement: String, CaseIterable, Identifiable {
|
|
case topLeading, topTrailing, bottomLeading, bottomTrailing
|
|
|
|
var id: String { rawValue }
|
|
|
|
/// SwiftUI overlay alignment for `.overlay(alignment:)`.
|
|
var alignment: Alignment {
|
|
switch self {
|
|
case .topLeading: return .topLeading
|
|
case .topTrailing: return .topTrailing
|
|
case .bottomLeading: return .bottomLeading
|
|
case .bottomTrailing: return .bottomTrailing
|
|
}
|
|
}
|
|
|
|
/// The HUD's own stack hugs the screen edge it sits against, so its text aligns outward.
|
|
var isTrailing: Bool { self == .topTrailing || self == .bottomTrailing }
|
|
|
|
/// The corner as a `UnitPoint`, so a scale transition grows/shrinks the HUD out of its own
|
|
/// corner rather than its centre.
|
|
var unitPoint: UnitPoint {
|
|
switch self {
|
|
case .topLeading: return .topLeading
|
|
case .topTrailing: return .topTrailing
|
|
case .bottomLeading: return .bottomLeading
|
|
case .bottomTrailing: return .bottomTrailing
|
|
}
|
|
}
|
|
|
|
/// User-facing corner label.
|
|
var label: String {
|
|
switch self {
|
|
case .topLeading: return "Top Left"
|
|
case .topTrailing: return "Top Right"
|
|
case .bottomLeading: return "Bottom Left"
|
|
case .bottomTrailing: return "Bottom Right"
|
|
}
|
|
}
|
|
}
|