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
+14
-2
@@ -2,9 +2,21 @@
|
||||
// root (global.css thins the base surfaces), the OS half is the acrylic
|
||||
// backdrop behind the transparent window (window_glass command). Both are
|
||||
// idempotent, so boot and the Settings toggle share this one entry point.
|
||||
//
|
||||
// This file runs in the MAIN window only. The mini frosts itself from the
|
||||
// `mini:glass` event this emits (one setting, two windows): it toggles its
|
||||
// own root class and invokes window_glass, which acts on the CALLING window.
|
||||
// The mini must never import this — its applier would re-emit into its own
|
||||
// listener.
|
||||
import { emit } from "@tauri-apps/api/event";
|
||||
import { windowGlass } from "./api.js";
|
||||
|
||||
let current = false;
|
||||
export const glassOn = () => current;
|
||||
|
||||
export function applyGlass(on) {
|
||||
document.documentElement.classList.toggle("glass", !!on);
|
||||
void windowGlass(!!on).catch(() => {});
|
||||
current = !!on;
|
||||
document.documentElement.classList.toggle("glass", current);
|
||||
void windowGlass(current).catch(() => {});
|
||||
void emit("mini:glass", { on: current });
|
||||
}
|
||||
@@ -11,11 +11,14 @@
|
||||
// throttled ~5/s
|
||||
// mini:queue { rows: [{ title, dur }], index, next: { title, artUrl } }
|
||||
// on queue shape change
|
||||
// mini:glass { on } on dark-glass flips
|
||||
// (applyGlass) + hello
|
||||
// mini:cmd { op, value } mini → here
|
||||
// mini:hello {} mini → here, answered
|
||||
// with a full snapshot
|
||||
import { emit } from "@tauri-apps/api/event";
|
||||
import * as api from "./api.js";
|
||||
import { glassOn } from "./glass.js";
|
||||
import {
|
||||
player,
|
||||
theme,
|
||||
@@ -154,6 +157,9 @@ export function initMiniBridge() {
|
||||
void emitTrack();
|
||||
void emitQueue();
|
||||
emitTick();
|
||||
// Frost state rides its own channel: hello answers with the current
|
||||
// value, applyGlass pushes flips live (see glass.js).
|
||||
void emit("mini:glass", { on: glassOn() });
|
||||
});
|
||||
api.onEvent("mini:cmd", (p) => {
|
||||
const { op, value } = p ?? {};
|
||||
|
||||
Reference in new issue
Block a user