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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
//! **The layout** — the two shapes a window takes, and the notice that stands
//! where content would have been.
//!
//! One function, and it is the whole window: a notice bar, the roster — which
//! since DESIGN §4.39 is the engines, their walls AND the aimed wall's
//! conversations, one list — and the conversation with its composer under it.
//! There is no per-pane enablement to drift: a pane with nothing to show says
//! so in its own words, which is a sentence an operator can act on rather than
//! a control that only looks actionable.
//!
//! **What a width buys is [`policy`]'s** and nothing here decides it. Wide
//! enough, and the two columns stand side by side with the list yielding to
//! the conversation's floor; narrower than that, the window shows one
//! [`Column`] at a time and a bar naming the two (bl-dfda, bl-b9a3). The panes
//! themselves know nothing about either shape: what changed is where they are
//! put, and — because a column's name has one home — where their heading is
//! painted.
//!
//! **What the policy owns of a width is the DEFAULT and the FLOORS** (§4.39,
//! bl-46e5). Every visible edge in this window drags — the list pane's edge
//! and the composer's top — and what an operator dragged is the seat's own
//! state (REMOTE §7), held on the [`Model`], written to the place file, and
//! clamped to the policy's range on every frame. `drag` is the mechanism and
//! the one line of egui that makes either edge hold.
use crate;
/// The two edges an operator drags, and the one line of egui that makes
/// either of them hold.
/// The notice bar: what the seat last heard that was not content.
/// The width policy: the yield, the two shapes, and the two columns.
pub use DISMISS;
pub use ;
/// Paint one frame of the whole window.
///
/// It takes the context rather than an `eframe::Frame`, which is what makes the
/// window testable at all: every assertion in this crate runs this function on
/// an offscreen context and reads back the glyphs it painted
/// (`crate::paint_probe`). The native boot is `src/main.rs`, which decides
/// nothing.
/// **The one list pane, side by side with the conversation** — the broad
/// shape, and the only one that has a side panel at all.
///
/// **The heading is painted here rather than by the pane** (bl-dfda). A
/// column's name has one home, and in the narrow shape that home is the bar:
/// two nodes carrying the word `engines` would be two things an operator — and
/// the accessibility tree the snapshot harness walks — has to tell apart. So
/// the pane paints its content and the layout paints its name, which also keeps
/// bl-e5d2's rule structural: the heading is outside the pane, and therefore
/// outside the region the pane scrolls.
///
/// **The width is the seat's where the operator set one, and the policy's
/// otherwise** (§4.39, reversing bl-fef8's *subtraction rather than loss*).
/// The edge drags, the width is clamped to the policy's floors on every frame,
/// and a width the clamp imposed is never taken back as the operator's — which
/// is what lets a window briefly made small narrow the pane without costing the
/// drag. The mechanism, and the one line of egui the drag used to die on, is
/// `drag`.
///
/// **The narrow shape consults none of it**, because it never calls this:
/// nothing competes for the width there, so there is no edge to drag.
/// **A column's heading**: `HEADING` size, in weak ink (`docs/STYLE.md` §5).
/// No fill and no rule under it — the gap is the boundary.
///
/// **It wears no mark saying whose the arrows are**, and that is the fold
/// subtracting rather than losing (DESIGN §4.39, bl-b9a3). The mark existed to
/// tell two list panes apart: one heading carried it and the other did not, so
/// an operator could see which list an arrow key would walk. There is one
/// list, so there is nothing to tell apart — a mark on the only answer says
/// nothing, and a window with one of them lit and no alternative reads as a
/// state that can change.
/// **The narrow shape's navigation**: the two columns' own names, with the
/// one on the glass showing as chosen.
///
/// It is a bar of both rather than a *back* control, because a stack would put
/// the number of gestures a pane costs at the mercy of where the operator
/// happened to be. One seat each is one gesture from anywhere to anywhere,
/// which is the bound `crate::snapshot::reach` asserts.
///
/// **It stands down under a covering pane**, exactly as the composer does: a
/// pane that covers the window is a modal, and a navigation control that
/// changed a column nobody can see would be a control that answers a click with
/// nothing. The way out of a covering pane is its own control, which is the
/// one that forgets where the material is a secret.
/// **What stands in the central panel**: a covering pane if one is open, and
/// otherwise the column the shape chose.
///
/// **The enrollment stands where the conversation would**, and it is the one
/// pane in this window that covers another. It earns that: what it holds is a
/// private key on a screen, the act is "look at this now and close it", and a
/// conversation legible behind it would invite the one thing the material must
/// not have, which is a long life on a display (`crate::ui::enroll`).
///
/// **Two panes may stand there and the enrollment wins**, which is an order
/// rather than a rule with an exception: it is the one that holds a secret, and
/// the material's whole product is a short life on a display.