summaryrefslogtreecommitdiffhomepage
path: root/packages/ext-stage-dock/ext-stage-dock.md
blob: 025066e7968d20e86333d9847dfcec8f376360d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# ext-stage-dock

The **stage dock** (slice 10): the left-edge ui surface holding minimized-window
**previews**, **revealed** by a left-edge **swipe** (GLOSSARY; notes/plan.md §2).
A **standard**-tier extension (`id "stage-dock"`, `depends_on {"xdg-shell"}`). It
is a LEAF consumer for now: its whole contract is the `create()` factory in
`include/unbox/ext-stage-dock/ext_stage_dock.hpp` — no exported hooks/services
yet.

## Status (b4 — skeleton + pure cores)
This step ships ONLY the unit skeleton and the two pure decision cores, doctest-
hard with no kernel/wlroots running. `activate()` is a deliberate no-op (one log
line). Runtime wiring comes later: c2 = static integration (consume
ext-xdg-shell's Service, build the RML document), d1 = reveal animation, e1 =
the edge-swipe gesture feeding the recognizer.

## Pure cores
- `src/reveal.hpp` — the **reveal** recognizer: a reversible, finger-following
  recognizer for the left-edge swipe. `begin()` accepts only edge-started
  presses (`x <= edge_slop`); `update()` returns the reveal **fraction** in
  [0,1] (inward travel / `dock_width`, clamped, reversible); `end()` commits
  open/close from final fraction + recent velocity (a fast fling overrides the
  position threshold). A `start_fraction` arg lets the SAME recognizer drive the
  symmetric CLOSE drag (seed 1.0, drag back toward the edge).
- `src/dock_layout.hpp` — the dock **frame** + reveal **offset** + scroll/
  capacity math. `dock_box(f)` slides the dock from `x = -dock_width` (f=0,
  hidden) to `x = 0` (f=1, revealed), covering output height. `visible_slots`,
  `content_height`, `slot_box(i, scroll)` give the slot stacking + scroll range.
  Fork B: RML/RCSS does the in-dock slot FLOW; this core does the frame/offset.

## Layout
- `include/unbox/ext-stage-dock/ext_stage_dock.hpp` — the factory (contract).
- `src/reveal.hpp` — reveal recognizer (pure; header-only).
- `src/dock_layout.hpp` — dock geometry (pure; header-only).
- `src/extension.cpp` — glue: minimal manifest + no-op `activate()` (skeleton).
- `tests/test_policy.cpp` — both cores, doctest-hard.

## Vocabulary
All terms used (stage dock, reveal, swipe, preview, slot) are canonical in
GLOSSARY.md — no new coinage.