| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
mark_hover is gone
Open point 6 of docs/render-pipeline.md: notice words are Look and Exec
targets, so the hover affordance headers have is back on notices, painted
once in the notice's layer and joined into the grid from it. Deleted:
Surface.mark_hover, Cell.hover and render's per-frame reset of it, none of
which had been set since stage 5 (macOS loses its glass hover rect; its
build is ignored for now). Snapshot goldens unchanged.
Shared files touched: macos.zig (the hover bit's removal). Not touched:
pardes.zig, Messages.zig, mouse.zig, gui.zig, detached/*.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stage 8 of docs/render-pipeline.md. The frame is drawn in groups: tier 0,
one per track in paint order (tiers 2 and 3), tier 4 (notices, then guides
and the debug box), tier 5 (bar cursors), each cells, images, decor. Decor
(rules, rails, thumbs, grip marks, spines, the workspace and column rules,
the bottom band, notice rules, bar cursors) is whole-pixel rects through
the new decor.frag over ui.vert, so it carries its track's transition and
clip. A closing pane's chrome comes from Surface.previous_regions.
Deleted: taglineBaseRgb, topbarPaneBorderHeight, bottomTaglinePresent,
frameChromeBg, cellBackgroundIs and the rail inference, paneGripCell's
scan, transient_on, PaintPlan. One cover map (coverFrame) is marked from
the layers and regions once a frame. New regions column, guide and debug;
Surface.chrome is the palette, carried in wire v8 (not shipped yet), so an
attached GUI draws the same chrome (test). A per-instance clip replaces the
vertical transition's scissor.
Goldens: 01-12 byte-identical. 13-17 differ only past the grid: the image
pass left its scissor at the grid's size, cutting rule ends, rail feet and
the bottom band in the leftover pixels whenever a picture was on screen.
16-debug now shows the debug box, which a context-row layer had hidden.
18-mid-transition is new: virtual clock (PARDES_TEST_CLOCK in the GUI),
PanelSlide Newcol with the picture, frame 6 of 12.
Also: the GUI sleeps when idle instead of polling every 16 ms, and a
minimized or occluded window sleeps through animation. Tracy 'gui frame
build' at 200x60: 992/1015 us median before, 989/987 us after.
Shared files touched: pardes.zig (one export), detached/client.zig,
detached/server.zig, detached/wire.zig (all additive), gui.zig. Not touched:
Messages.zig, mouse.zig, tagline.zig, colors.zig, tty.zig, host_io.zig,
dump.zig, exec.zig, panes.zig.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of rows; wire v8
src/Layer.zig merges TagLayer and BodyLayer. `rows` (0 = no layer) and a
cursor at {x, y}. A tag of N rows is ONE layer of N grid rows: tagHit answers
the row as `line`, bodyHit keeps its meaning, and the per-line layer bases
(TAG_LINE_LAYER_BASE, HEADER_LINE_LAYER_BASE) are gone, not aliased.
Wire v8, the one bump: tag layers carry rows and cursor y, and the frame
carries the placed region list. v7 and v9 peers are refused in both
directions (server test over both, a new frontend test over both).
web: tag_layer_value 11 = rows, 12 = cursor y; app.mjs lays every row.
macOS: the Zig side compiles against Layer; pardes.h still sees one row
per tag layer (accepted, the macOS shell is ignored for now).
No visual change: snapshot goldens and the 17 GUI goldens byte-identical.
Shared files touched: pardes.zig, Messages.zig, gui.zig, macos.zig,
detached/client.zig, detached/server.zig, detached/wire.zig (plus web.zig,
app.mjs, edit.zig, look.zig). Not touched: mouse.zig, tagline.zig,
colors.zig, tty.zig, dump.zig, exec.zig, host_io.zig, panes.zig.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A pane's tag rows, each notice chip and the workspace and column tags are
painted once, as their tag layers, and the grid's cells for them are copies
of those layers (joinCells): the second paint of every tag, the grid's own
notice pass and paintHeaders' grid text, hover, selection and caret are
gone, and so is renderTagLayers. The grid's caret for a tag, a header or a
prompt is the layer's, projected to grid columns. A wide glyph cut by the
edge of the copy is left as the band's blank, as the grid's print never drew
half of one (a test proves it, and fails without the re-clip).
Where the two copies disagreed, the grid's behaviour is kept, so every
snapshot golden is byte-identical:
- a notice highlighted the hovered word only as a layer; now it never does;
- a column tag's hover was suppressed during a column move only on the
grid; now in both;
- a header under edit showed the hovered word only on the grid; now in
both, under the selection;
- a notice's leading padding carried the band's ink only as a layer; the
grid copy keeps it blank;
- a notice whose band is wider in tagline pitch than in grid cells (a GUI
core) now shows the band's right end on the grid, where its text is, and
its prompt caret there.
A sweep begun on a tag and dragged into the body still shows on the body
rows it crossed, on the grid only (paintPointerSelection's from_row).
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
draw.place builds the Surface's region list at the head of render: the
page; each pane's grip, tag rows, body, rail with its thumb, and notice
chips; each column's grip and tag; the workspace tag. The painters read
their geometry from it instead of working it out again: the grid's notice
chips and the notice layers share one chip rectangle, the rails (file,
terminal, image, PDF page) paint the placed thumb (a native PDF measures
its own into the region as it places its pages), and the body, tag, notice
and column layers take their viewports from their regions. A collapsed pane
places only its grip and tag. The column-move rail's one-cell clip of the
layers under it is now a region field set in place, not a mutation of the
built layers. No behaviour change; a test checks every region against the
old geometry, the painted rail and the layer viewports across tag bottom,
column tags, notices, a collapsed pane and a multi-line tag.
|
| |
|
|
|
|
|
|
|
|
| |
Pure moves, no behaviour change. draw.zig holds the whole core frame in
order: render, the pane, tag, header and notice painters it calls, and the
character-effect composition (Pardes.render stays a declaration alias).
Presentation.zig is the panel presentation state as a file struct, and
animation.zig the easing curves, transition kinds, tracks and boxes, the
character effects' sources and the generic displayed-value transition, all
of which lived in layout.zig. layout.zig keeps only layout.
|
|
|
Pure move: Color, FontRole, CellStyle, Cell, AsciiDiff, PanelCellDiff,
ImageCacheKey, NativePlacement, ImagePatch, ImagePlace and Surface, with
their eight tests, go verbatim to the new surface.zig with the imports they
use. pardes.zig keeps one `pub const X = @import("surface.zig").X;` line
per type, as it already does for Pane, Rect and the tag layers, so the
shells' `pardes.Cell` / `pardes.Surface` spellings do not change.
Surface.print, clearRect and overlayDash become pub because render calls
them from pardes.zig. surface.zig is added to pardes.zig's test block and
to the embedded source list.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
|