diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-22 09:31:11 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:14 -0300 |
| commit | a1d5ee19a648abc65b557dffa14a3b2f70577286 (patch) | |
| tree | ef36c11168bcc2f7bbb9b7a6a29519c7e0882fab /features.txt | |
| parent | 43b9d696f9e25ad7589527b91a74666e71ff0472 (diff) | |
| download | pardes-a1d5ee19a648abc65b557dffa14a3b2f70577286.tar.gz pardes-a1d5ee19a648abc65b557dffa14a3b2f70577286.zip | |
Notices become chips that float over the body, not rows taken from it
A notice is an overlay now, which is the one place it is NOT like the
tree-sitter context: it takes no row from the body and moves no text. Each one
is a chip as wide as its own message plus a blank cell either side, anchored
to the pane right edge on the body top rows. The rest of each of those rows is
ordinary body text that still reads and still answers a click -- Notices.left
records where each chip starts, and the hit test refuses only the cells it
covers rather than the whole row.
The width is counted in GRID columns rather than scaled into the tagline face
the chip is drawn in, because the canonical grid is what a terminal client
draws and a chip narrower than its own text there would clip it; the narrower
tagline face simply leaves a little more room inside the chip. The tag layer
takes the geometry the grid pass already chose, so the two cannot disagree and
the GUI skipping the cells a tag layer covers leaves no stub behind.
Pane.body_offset is gone with the reservation it existed for, and bodyTop
takes only a rect. The body layer keeps every row it had, the scrollbar runs
the full body again, and the GUI smooth-scroll extents go back to the pane.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Diffstat (limited to 'features.txt')
| -rw-r--r-- | features.txt | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/features.txt b/features.txt index d035648a..fa1c0f6b 100644 --- a/features.txt +++ b/features.txt @@ -173,10 +173,15 @@ renderHeaderLayer the pane and column tags use, as a TagLayer of the new `.notic offset and its border for free -- none of which a body-grid row can have just by wearing a tagline font. The text is right aligned. The prompt stays on the canonical grid because it owns a cursor, which has to sit on a real cell. -The body starts BELOW the bands rather than under them: Pane.body_offset is the number of rows they take, and every painter and hit test derives the body's -first row from Pardes.bodyTop(pane, rect). That replaced fifteen copies of `if (tag_bottom) r.y else r.y + BOX_H` scattered across the paint and pointer paths, -which is what let the bands and the text they sit over come adrift in the first place. renderBodyLayer zeroes the offset around its own render, because it -paints into a surface of its own that carries no bands. +A notice is an OVERLAY, which is the one place it is NOT like the tree-sitter context: it takes no row from the body and moves no text. It is a chip as wide +as its own message plus a blank cell either side, anchored to the pane's right edge on the body's top rows, and the rest of each of those rows is ordinary +body text that still reads and still answers a click -- Notices.left records where each chip starts and the hit test refuses only the cells it covers. The +chip is measured in GRID columns rather than scaled into the tagline face it is drawn in, because the canonical grid is what a terminal client draws and a +chip narrower than its own text there would clip it; the narrower tagline face simply leaves a little more room inside the chip. The tag layer takes the +geometry the grid pass already chose, so the two cannot disagree and the GUI's "skip the cells a tag layer covers" leaves no stub behind. + +Pardes.bodyTop(rect) is now the single answer to "where does the body begin", replacing fifteen copies of `if (tag_bottom) r.y else r.y + BOX_H` scattered +across the paint, hit-test, scroll, PDF and image paths -- which is what let the bands and the text under them come adrift in the first place. Every notice is ALSO painted on the canonical grid, because the grid is what a terminal client draws and a band it cannot see is a message it never gets. The GUI skips grid cells a tag layer covers, so nothing is drawn twice there. |
