view: implement cascade placement policy

Adds following settings:
<placement>
  <policy>cascade</policy>
  <cascadeOffset x="40" y="30" />
</placement>

"Cascade" policy places a new window at the center of the screen like
"center" policy, but possibly shifts its position to bottom-right so the
new window doesn't cover existing windows.

The algorithm is copied from KWin's implementation:
df9f8f8346/src/placement.cpp (L589)

Also added some helper functions to manipulate `wlr_box`.
This commit is contained in:
tokyo4j 2024-05-04 06:26:27 +09:00 committed by Johan Malm
parent 3be8fe25f3
commit 46ec513630
10 changed files with 199 additions and 17 deletions

View file

@ -276,9 +276,9 @@ Actions are used in menus and keyboard/mouse bindings.
*<action name="AutoPlace" policy="value"/>*
Reposition the window according to the desired placement policy.
*policy* [automatic|cursor|center] Use the specified policy, which has
the same meaning as the corresponding value for *<placement><policy>*.
Default is automatic.
*policy* [automatic|cursor|center|cascade] Use the specified policy,
which has the same meaning as the corresponding value for
*<placement><policy>*. Default is automatic.
*<action name="Shade" />*++
*<action name="Unshade" />*++