From c291de8e2b30d02bb07d3fab7cfeb945b2deb5bf Mon Sep 17 00:00:00 2001 From: OrientCOMPASS <316423573+OrientCOMPASS@users.noreply.github.com> Date: Fri, 9 Oct 2026 14:51:48 +0000 Subject: [PATCH] fix: stop the volume ring from stuttering while streaming on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2.1.0 clipped the whole document with a rounded body clip-path and drove the two continuous streaming loops (central glow breathing, status dot pulse) through the anime.js v4 engine. On Windows WebView2 the document-wide rounded clip forces every composited frame through a clip render surface, and the JS engine ticked on the main thread against the high-rate audio IPC events — together they made the volume ring animation hitch continuously as soon as the first client started streaming. - scope the body clip-path to .platform-linux, matching the per-platform design of the frameless shell rework: Windows rounds via the DWM corner preference, macOS via the NSWindow corner radius from vibrancy - run the streaming loops as compositor-driven CSS keyframe animations (transform/opacity only, same durations and easing curves); anime.js stays for one-shot interactions (hover, click rebound) - round the plugin panel window root itself; that window never applied the platform classes and so no longer inherits a document clip Backend untouched; no version bump. --- AGENTS.md | 2 + tauri-app/src/App.vue | 61 ++----------------- .../plugins/components/PluginPanelWindow.vue | 2 +- tauri-app/src/shared/assets/index.css | 34 ++++++++++- 4 files changed, 39 insertions(+), 60 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index cea3a458..1932f511 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -87,6 +87,8 @@ Shared config in `~/.config/micyou/` (Linux) or `%APPDATA%\micyou` (Windows), re - Every invoke is try/catch-wrapped with an optimistic update and rollback; connection errors funnel into `ConnectionErrorDialog` via `utils/connectionError.ts` - UI-only prefs persist through `@vueuse/core` `useStorage` with `micyou_*` keys; anything CLI or TUI also reads belongs in the shared config files - Windows are frameless and transparent with self-drawn chrome; mark glass panels with `data-blur-region` so `useWindowEffects` requests matching native blur +- Rounded window corners are per platform: DWM corner preference on Windows, NSWindow corner radius via vibrancy on macOS, and a `clip-path` on `body` only under `.platform-linux` — do not clip the document on Windows/macOS, the full-page clip mask made streaming animations stutter in WebView2 +- Continuous animations (the streaming glow and status dot loops) are CSS keyframe animations on transform/opacity so the compositor drives them; keep JS animation libraries (anime.js) for one-shot interactions only - The settings window is a separate webview (`features/settings/components/SettingsWindow.vue` plus one component per page under `sections/`); it shares state with the main window through `useStorage` storage events and `emitToWindow('main', …)`, drags from any non-control element marked `data-drag-surface`, and dialogs inside a section use `` to escape the page transition - Styling: the theme lives in the `@theme inline` block of `src/shared/assets/index.css` (no `tailwind.config.js` or PostCSS config); Material 3 HSL variables, 8 themes in light and dark via `.dark`; shadcn color names (`popover`, `accent`, `muted`, …) are aliased to Material 3 tokens; a scoped `