mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-07-11 21:10:33 +02:00
## Summary Refactors the reusable transparent-overlay infrastructure in `src/common/Common.UI.Controls/` into a clean separation between a pure host window and a self-animating acrylic surface. ### What changed - **`TransparentWindow`** is now animation-agnostic. It raises `Showing` / `Hiding` events; `Hiding` exposes a deferral so the HWND stays visible until the surface's out-animation finishes. - **`TransientSurface`** (renamed from `TransparentCard`) is a self-animating "pseudo-window" content control. It owns all chrome — `ThemeShadow`, always-active desktop acrylic, 1px border, rounded corners — and its own show/hide slide animations. - `SlideFrom` (`None`/`Left`/`Top`/`Right`/`Bottom`) selects the slide edge. `None` is the default and plays **no animation at all** (instant show/hide). - `AcrylicKind` (new) is exposed and bound to the backdrop via `TemplateBinding`, defaulting to **thin acrylic**. Consumers can override to `Default`/`Base`. - **`AlwaysActiveDesktopAcrylicBackdrop`** gains a matching `Kind` dependency property. - **CmdPal `ToastWindow`** is migrated to the new pattern as the proving consumer (`Surface.SubscribeTo(this)`). ### Coordination model A module declares a `<TransientSurface>` as the window's content and calls `SubscribeTo(window)` once. The window raises `Showing`/`Hiding`; the surface animates itself in/out and uses the `Hiding` deferral to keep the window alive until the out-animation completes. ## Testing - `Common.UI.Controls` builds clean (x64 Debug, exit 0). - `Microsoft.CmdPal.UI` builds clean (x64 Debug, exit 0). - ToastWindow keeps its slide-up animation (`SlideFrom="Bottom"`). https://github.com/user-attachments/assets/a06b0f1a-740a-4fcd-bba8-6f7a64ed261b --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>