mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-05-04 18:04:17 +02:00
feat(wm): use ghost windows for movement animations
This commit tries to render move/resize animations on a DWM-thumbnail "ghost" window instead of calling MoveWindow per-frame on the real HWND. The source is cloaked via IApplicationView::SetCloak, the thumbnail is animated via DwmUpdateThumbnailProperties on a layered host owned by a single "ghost owner" thread, the border for the source follows the lerped rect via a new WM_ANIMATE_RECT message handled on the border's own WndProc thread (preserving today's per-frame border tracking), and the real SetWindowPos happens once at the end of the animation. Apps repaint exactly once per animation instead of N times, which is a substantial win for heavy renderers (browsers, IDEs, Office). For non-Chromium sources the source is also pre-positioned to target_rect before the thumbnail is registered so the captured texture is target- sized and downscales to native 1:1 at the end of the animation rather than upscaling to a stretched/blurry final frame. Chromium-shell sources skip the pre-paint step: their NativeWindowOcclusionTrackerWin reads DWMWA_CLOAKED and treats any cloak value as hidden, suspending the renderer; WM_SIZE while cloaked produces no new frame and the post-uncloak swap chain shows stale or black content. For those apps we keep the source cloaked at start_rect for the whole animation and do the SetWindowPos in post_render after uncloak, where the visibility flip is what wakes Viz back up. A short ease-in opacity crossfade in post_render masks the texture transition for the Chromium path and gives slow renderers time to present their first post-resize frame before the overlay is removed.
This commit is contained in:
10
schema.json
10
schema.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"title": "StaticConfig",
|
||||
"description": "The `komorebi.json` static configuration file reference for `v0.1.41`",
|
||||
"description": "The `komorebi.json` static configuration file reference for `v0.1.42`",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"animation": {
|
||||
@@ -778,6 +778,14 @@
|
||||
"default": 60,
|
||||
"minimum": 0
|
||||
},
|
||||
"ghost_movement": {
|
||||
"description": "Render movement animations on a GPU-composited ghost surface (recommended).\nWhen false, falls back to the legacy per-frame MoveWindow path.",
|
||||
"type": [
|
||||
"boolean",
|
||||
"null"
|
||||
],
|
||||
"default": true
|
||||
},
|
||||
"style": {
|
||||
"description": "Set the animation style",
|
||||
"anyOf": [
|
||||
|
||||
Reference in New Issue
Block a user