dark glass, the whole app: frost on every pane, and the periscope pattern for every glass bar the frost sits under - backdrop-filter black-flattens over see-through ground (measured 3-vs-40), so bars over frost blur a scroll-synced clone behind a static band cut instead; the bar moved out of the scroller (pane shell, inner .content keeping the closest-contract, the old negative-margin flow replayed by a spacer after the artist page's sticky physics named the scrollport padding sacred); painted pages declare data-painted and keep the real backdrop bar, which is how the artist hero runs under the glass again; np wash rides the scroll away and dissolves to frost like the album banner; perf measured to vsync - 142px blur wraps (27.9ms frames down to 6.9), idle scroll-gated reclones, clip-path band, content-visibility on library rows, async cover decode; mini frosts over the mini:glass channel and the rest-frame flags ride window config because the env-var lane dies on some webview2 runtimes
This commit is contained in:
1 parent
225c9139aa
commit
6ba1864498
16 files changed
+821
-117
No files matched your search
+29
-48
@@ -27,39 +27,6 @@ mod ytdlp;
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
// Two WebView2 presentation fixes, both delivered by env var because
|
||||
// tauri.conf's additionalBrowserArgs never reaches the browser process
|
||||
// (verified via its command line). Merge, don't clobber — dev launches
|
||||
// carry the CDP port here. Both found 2026-08-26 via the dark-glass work:
|
||||
//
|
||||
// 1. NO delegated compositing: with it, DWM composes the webview's layers
|
||||
// at rest and blends semi-transparent darks in the wrong colorspace —
|
||||
// the app rested washed-out LIGHT and looked correct only while an
|
||||
// animation forced Chromium to compose in-process.
|
||||
// 2. Force the sRGB color profile: on an HDR display the MAXIMIZED
|
||||
// window's rest path takes a different SDR-white tone mapping than
|
||||
// the animated path — covers blew out near-white at rest and snapped
|
||||
// correct on hover. One profile, one mapping, both paths agree.
|
||||
#[cfg(windows)]
|
||||
{
|
||||
const KEY: &str = "WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS";
|
||||
let mut args = std::env::var(KEY).unwrap_or_default();
|
||||
let mut ensure = |flag: &str, key: &str| {
|
||||
if !args.contains(key) {
|
||||
if !args.is_empty() {
|
||||
args.push(' ');
|
||||
}
|
||||
args.push_str(flag);
|
||||
}
|
||||
};
|
||||
ensure(
|
||||
"--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection,DelegatedCompositing",
|
||||
"DelegatedCompositing",
|
||||
);
|
||||
ensure("--force-color-profile=srgb", "force-color-profile");
|
||||
std::env::set_var(KEY, args);
|
||||
}
|
||||
|
||||
tauri::Builder::default()
|
||||
.manage(state::AppState::default())
|
||||
.setup(|app| {
|
||||
@@ -256,23 +223,37 @@ pub fn run() {
|
||||
vocal_sep::vocal_sep_download,
|
||||
])
|
||||
.run({
|
||||
#[allow(unused_mut)]
|
||||
let mut context = tauri::generate_context!();
|
||||
// Debug builds expose CDP on 9222 for instrumentation (see HANDOFF.md).
|
||||
// wry always sets AdditionalBrowserArguments programmatically, so the
|
||||
// WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS env var is ignored; the flag has
|
||||
// to go through the window config. Explicit args replace wry's defaults,
|
||||
// so those are restated here.
|
||||
// Browser args ride the WINDOW CONFIG, nothing else: wry always sets
|
||||
// AdditionalBrowserArguments programmatically, and at least WebView2
|
||||
// 151.x then drops the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS env var
|
||||
// entirely — flags "delivered" that way vanish silently on some
|
||||
// runtimes (they held on the home machine, gone on the work one).
|
||||
// Verify in the browser process command line (Get-CimInstance
|
||||
// Win32_Process), never by assumption. Explicit args replace wry's
|
||||
// defaults, so those are restated. Two WebView2 presentation fixes
|
||||
// live here (2026-08-26, the dark-glass work):
|
||||
//
|
||||
// 1. NO delegated compositing: with it, DWM composes the webview's
|
||||
// layers at rest and blends semi-transparent darks in the wrong
|
||||
// colorspace — the app rested washed-out LIGHT and looked correct
|
||||
// only while an animation forced Chromium to compose in-process.
|
||||
// 2. Force the sRGB color profile: on an HDR display the MAXIMIZED
|
||||
// window's rest path takes a different SDR-white tone mapping
|
||||
// than the animated path — covers blew out near-white at rest
|
||||
// and snapped correct on hover. One profile, one mapping, both
|
||||
// paths agree.
|
||||
//
|
||||
// Debug builds add CDP on 9222 for instrumentation (see HANDOFF.md).
|
||||
let base = "--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection,DelegatedCompositing \
|
||||
--autoplay-policy=no-user-gesture-required \
|
||||
--force-color-profile=srgb";
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
for window in &mut context.config_mut().app.windows {
|
||||
window.additional_browser_args = Some(
|
||||
"--disable-features=msWebOOUI,msPdfOOUI,msSmartScreenProtection \
|
||||
--autoplay-policy=no-user-gesture-required \
|
||||
--remote-debugging-port=9222"
|
||||
.into(),
|
||||
);
|
||||
}
|
||||
let args = format!("{base} --remote-debugging-port=9222");
|
||||
#[cfg(not(debug_assertions))]
|
||||
let args = base.to_string();
|
||||
for window in &mut context.config_mut().app.windows {
|
||||
window.additional_browser_args = Some(args.clone());
|
||||
}
|
||||
context
|
||||
})
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"minimizable": false,
|
||||
"alwaysOnTop": true,
|
||||
"shadow": true,
|
||||
"backgroundColor": "#181818"
|
||||
"transparent": true
|
||||
}
|
||||
],
|
||||
"security": {
|
||||
|
||||
Reference in new issue
Block a user