573b2af334
UX polish batch 1 (clients/windows/ui-polish-plan.md, workstreams W0/A1/B/C/E):
- W0: the shell's duplicated trust/settings structs are gone — src/trust.rs
re-exports pf-client-core's, so the shell and the spawned session binary share
ONE Settings shape over client-windows-settings.json. Fixes real bugs: the
shell's saves no longer drop session-side fields; the stats-overlay toggle
(show_hud -> show_stats, serde alias migrates old files) and the forwarded-
controller pick now actually reach the spawned session. The "Streaming engine"
Settings combo is gone (PUNKTFUNK_BUILTIN_STREAM=1 stays as the dev A/B knob).
- Forwarded-controller pinning by stable key (vid:pid:name, pf-client-core's
format): persisted as forward_pad, applied by the shell's own service at
startup AND by the session binary in session_params (both OSes — the session
never applied the pin before).
- A1 single window: the shell hides itself when the spawned session window
presents its first frame ({"ready":true}) and restores + foregrounds on the
child's exit — exactly one visible Punktfunk window at any time. Restore runs
before the request-access cancel gate so a Ready/Cancel race can't strand the
shell hidden.
- C console UI: punktfunk-session --browse gains --json-status (ready when the
library window presents; error line on a failed start), and the shell
surfaces it — "Open console UI" on paired hosts' menus, plus a controller-
detected hint card targeting the most recent paired host (x64 only; aarch64
ships no skia ui feature). Browse spawns hide/restore the shell like streams.
- B responsive: minimum window size (420x360); the hosts header collapses to
icon-only buttons below 700 px; the session status card shrinks instead of
clipping (max_width); busy pages, help actions, licenses and long labels wrap.
- E polish: session exe gets the app icon (winresource + WM_SETICON via the new
pf-presenter win32.rs); both exes share an explicit AppUserModelID on
unpackaged runs (packaged identity wins) so the windows group as one taskbar
app across the visibility handoff; "Start streams fullscreen" toggle passes
--fullscreen (GTK parity); connects stamp KnownHost::last_used; the connect
target is stashed for every route so "Connecting to X" always names the host.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
46 lines
2.0 KiB
TOML
46 lines
2.0 KiB
TOML
[package]
|
|
name = "pf-presenter"
|
|
description = "The Vulkan session presenter — SDL3 window, ash swapchain, frame present, input capture; the stage-2 presenter of punktfunk-planning linux-client-rearchitecture.md"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
authors.workspace = true
|
|
repository.workspace = true
|
|
|
|
# Same Linux+Windows gating as the rest of the client stack (dmabuf import is the one
|
|
# Linux-only module — see lib.rs).
|
|
[target.'cfg(any(target_os = "linux", windows))'.dependencies]
|
|
pf-client-core = { path = "../pf-client-core" }
|
|
# AVVkFrame access (Vulkan Video frames: live sync state under the frames lock).
|
|
pf-ffvk = { path = "../pf-ffvk" }
|
|
punktfunk-core = { path = "../punktfunk-core", features = ["quic"] }
|
|
|
|
# `loaded` dlopens libvulkan at runtime (no link-time dependency — GPU-less boxes still
|
|
# start and fail into a clean error; on Windows vulkan-1.dll is a GPU-driver component).
|
|
# `ash` on sdl3 types SDL_Vulkan_CreateSurface with ash 0.38 handles so the surface
|
|
# hands over without transmutes.
|
|
ash = { version = "0.38", features = ["loaded"] }
|
|
|
|
async-channel = "2"
|
|
anyhow = "1"
|
|
tracing = "0.1"
|
|
|
|
# Linux links the system SDL3; Windows builds it from source (same choice as the rest
|
|
# of the workspace's Windows SDL consumers).
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
sdl3 = { version = "0.18", features = ["hidapi", "ash"] }
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
sdl3 = { version = "0.18", features = ["hidapi", "ash", "build-from-source"] }
|
|
# Window branding only (win32.rs): the exe-embedded icon onto the SDL window's title
|
|
# bar/taskbar (WM_SETICON) and the shared AppUserModelID for unpackaged runs, so the
|
|
# shell and the session window group as ONE taskbar app across the visibility handoff.
|
|
windows-sys = { version = "0.61", features = [
|
|
"Win32_Foundation",
|
|
"Win32_Storage_Packaging_Appx",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
] }
|