1
0
Fork 0
forked from wry/wry

Add multiphase no-overlap planner groundwork

This commit is contained in:
atagen 2026-05-21 18:23:33 +10:00
parent 2115518edf
commit 41d2fef177
3 changed files with 629 additions and 0 deletions

View file

@ -30,6 +30,15 @@ be handled deliberately.
partial inspiration for tiling style and titlebar/grouping behavior.
- Mono mode should mostly avoid animations. Exceptions are windows entering or
exiting mono mode, where a visual transition can clarify the hierarchy change.
- Multiphase shrink steps should not normally need to reduce a tiled window far
below roughly one quarter of the relevant full size. The implementation may
enforce a conservative sanity minimum, and pathological cases may fall back.
- If the no-overlap planner cannot produce a legal sequence, only the affected
group should fall back to linear animation. This is expected to be rare for
valid tiling layouts.
- When entering mono mode, the active child should animate to the mono geometry.
Inactive siblings may snap invisible. Floats may overlap normally and do not
need the no-overlap planner.
## Texture Freezing Decision
@ -188,12 +197,22 @@ Preferred approach:
animated visual actors.
- Derive every leaf's per-phase rect from one phase schedule so parent and child
effects cannot compose into forbidden motion.
- Build the planner as pure geometry first. Live integration should collect
eligible leaf `(old, new)` rects across a command-driven layout pass, then
submit planner-produced phases as a batch. Per-node `tl_change_extents` calls
are too incremental to plan safely by themselves.
- Add container-level grouping only after the leaf planner proves correct.
- Include hierarchy-transition metadata in the planner input: source parent,
target parent, source depth, target depth, and whether the window is ascending,
descending, or staying at the same hierarchy level.
- For mono containers, suppress ordinary in-mono focus/tab changes. Animate only
transitions into mono, out of mono, or across the mono boundary.
- When entering mono, the active child animates to the full mono area and
inactive siblings snap invisible. When exiting mono, ordinary tiled geometry
may animate from the mono child where that produces a clear hierarchy
transition.
- If a legal no-overlap sequence cannot be found for a group, fall back to the
linear animator for that group only. Float windows are outside this invariant.
Tests: