<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/shaders/ui.frag.glsl, branch release-0.24</title>
<subtitle>Pardes</subtitle>
<id>https://git.0x4200.cafe/pardes.git/atom?h=release-0.24</id>
<link rel='self' href='https://git.0x4200.cafe/pardes.git/atom?h=release-0.24'/>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/'/>
<updated>2026-10-01T03:12:16Z</updated>
<entry>
<title>G13: Parallax, lapis's dots drift with the text at a quarter of its speed</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T11:28:40Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=0a2694e935fa8a79f1a399f2d2cbc643f8c3734e'/>
<id>urn:sha1:0a2694e935fa8a79f1a399f2d2cbc643f8c3734e</id>
<content type='text'>
Parallax on|off (off, a pixel shell's; Chrome.fx bit 3). A body region
carries its first line (Region.line, a file's scroll or a terminal's grid
offset; the wire's region record grows a u32). The GUI offsets each
body's page dots by a quarter of its line in rows, and of G6's glide
offset while one runs, so the pattern drifts with the text and settles
with it; the cell shader reads it from the instance's serial slot, whose
per-cell dissolve noise G7 left unused (the dead noise code goes).

Tests: a scrolled body tells its line; the shift handed to the shader is
a quarter of it within the dots' period. Measured in a capture: four lines
move the dots 13 px (140 px / 4 mod 22). Gates as before, goldens
byte-identical. Feel review: .scratch/render/parallax/.
</content>
</entry>
<entry>
<title>G7: a moving pane casts a shadow, a retargeted move keeps its speed, a dissolve crossfades</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T09:58:19Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=c1dbb16d069a54f52533f346655b0fc49026c9a4'/>
<id>urn:sha1:c1dbb16d069a54f52533f346655b0fc49026c9a4</id>
<content type='text'>
- Track.launch: a move retargeted mid-way (Presentation.sync) starts at
  the old move's speed along the new one's longest side (carriedLaunch,
  Motion.easeFrom/speedFrom), so a second change during a slide bends the
  motion instead of stopping it dead. The macOS track ABI grows the float
  (pardes.h, 48 bytes; its reserved byte is named motion, as in Zig).
- A pane that slides, zooms or rises casts Lift's soft shadow at
  sin(pi x progress) of its strength, on the other panes' bodies and
  rails alone, under the same contrast ceiling, carried by its track.
- The GUI's PanelDissolve is a crossfade: the new cell drawn first, the
  old one over it at 1 - progress, premultiplied, on the blending cell
  pipeline for such groups (new cells now emitted before old ones, as the
  old layers already came after the new). sRGB blend, not linear light
  (documented). The tty keeps its per-cell swap.

Presentation.zig's and animation.zig's tests were not in any test root;
pardes.zig's test block now takes them in.

Tests: a retargeted move carries its speed and still lands exactly; a
moving pane's shadow is clipped off every tag, grip and its own body,
none at the start or the landing, most mid-way. GUI golden 18 changes by
the shadow (frame 6 of a slide). Gates as G6. Feel review:
.scratch/render/transitions/.
</content>
</entry>
<entry>
<title>G5: lapis, 0x4200.cafe's manuscript, as a theme with its ornament</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T09:04:28Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=09ec515c5e94de741104038cd61f18b2b997e78c'/>
<id>urn:sha1:09ec515c5e94de741104038cd61f18b2b997e78c</id>
<content type='text'>
A native theme `lapis` (src/themes/lapis.zig) from web/theme/lapis.css:
a lapis-deep page, lapis tags with gold names, vellum text, vermilion
rubrics, gold rules and a vermilion tag rule, gold selection in lapis ink.
Its ornament is the theme's new `decor` (colors.Decor), drawn by a pixel
shell inside the chrome it already has (decision 1), all of it off every
focus indicator:

- page_dots: the site's gold dot grid (#e8c46a22, 22 px), drawn by the
  cell shader on page-coloured cells alone (flag 0x10000000), so it lies
  under the text and never under a selection, a tag or the cursor; fixed
  to the window, a page the panes lie on.
- rail_checker: the dither frame's gold and lapis checker in the scroll
  track (a decor kind, flag 0x08000000), anchored to its rail; the thumb
  stays solid gold.
- tag plaques (tag_border, tag_shadow, tag_stripe): every tag a raised
  plaque inside its own band, the site's trail: a 2px gold frame and a
  hard 5px vermilion shadow down and right, both within the band's rows
  and columns (down, what the slack under the text leaves), so no shadow
  reaches a body, a grip or the next pane. The focused pane's plaque is
  the code window's title bar, gold and lapis stripes of 2px, its words
  on plates of the focused ground; unfocused ones are plain; column and
  workspace tags take the object-label language (1px frame, 2px shadow
  toward the page). Drawn as decor under the cells (a group's under
  range), with blank tag cells see-through and the cells blended
  premultiplied (pipeline_over) on such frames; opaque windows only.
- title_shadow: the titles' vermilion offset shadow under a file name's
  letters, sampled in the cell shader inside the letters' own cells (flag
  0x08000000), none on a cursor.

Chrome carries the decor (decor_*, name_ink, active_name_ink); a theme
file folds a nested decor literal field by field. Left out, with why, in
docs/effects.md: the fonts, the ornaments, a decor crossfade, and in the
tty anything but the colours (a tag row has no spare cell for a shadow).
An empty column is the page. The effect id is masked to 27 bits (ui.vert/ui.frag) for the
fifth flag.

Tests: the cell flags land only on page ground and file-name cells, never
a cursor, nothing without decor; lapis's plaques stay inside their tag's
band, clear of every grip, only the focused one striped; its checker is in
the track; no other theme draws any; the separator and focus
tests cover lapis. Goldens: theme and themesel (the ring gains lapis after
acme). Gates as G4. Feel review: .scratch/render/lapis/ (lapis.png, lapis-2x.png,
tags-focused-vs-unfocused-2x.png, a PanelSlide at 60 fps and a quarter).
</content>
</entry>
<entry>
<title>G1: Lift, soft elevation shadows (off by default)</title>
<updated>2026-10-01T03:12:15Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-28T19:44:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=deeb8ac54f71d4322a778336db9a7aec411c23ce'/>
<id>urn:sha1:deeb8ac54f71d4322a778336db9a7aec411c23ce</id>
<content type='text'>
`Lift` (a GUI toggle, capability lift) lifts the focused pane on a
critically damped spring (animation.Spring: closed form, about 240 ms to
settle, velocity kept across retargets, settled = no frames) and floats
notices. The core puts the lift on the regions (Region.lift, on the wire);
the GUI casts from it: a soft shadow is decor, an erf rectangle on one
quad grown by 3 sigma (decor.frag, flag 0x10000000), in the quad's own
space so a track's transform carries it; darken-only, the caster's rect
left alone, alpha pre-warped for linear light and IGN-dithered. Cast last
in its group, so a neighbour's rails and rules darken with its text; a
notice's before its rule. Strength is capped per theme so text over the
darkest shadow keeps min(its contrast, 4.5) (test over the native themes).

Opt-in until the focus lift/dim default is decided. Feel review material:
docs/effects.md. Test-mode PARDES_TEST_SERIES keeps every captured frame.

Shared files touched: pardes.zig (two fields, one nextWake line),
detached/wire.zig (lift on the region), config.zig, builtins.zig
(capability), gui.zig. Not touched: Messages.zig, mouse.zig, tty,
host_io.
</content>
</entry>
<entry>
<title>The GUI draws in tiers from the regions; pane chrome moves with its pane</title>
<updated>2026-10-01T03:12:15Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-28T17:59:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=360b72ade0acfa655a3740b638a0cc8e23238a05'/>
<id>urn:sha1:360b72ade0acfa655a3740b638a0cc8e23238a05</id>
<content type='text'>
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.
</content>
</entry>
<entry>
<title>9p: use cloud9 protocol sessions and transports</title>
<updated>2026-09-15T20:24:42Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-14T16:55:41Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=95681ff7017b8a9e4c8f9fa6a7371d1233432f2f'/>
<id>urn:sha1:95681ff7017b8a9e4c8f9fa6a7371d1233432f2f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>macos fix</title>
<updated>2026-09-01T11:30:41Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-08-28T19:12:01Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=848ad99fa597387a85f75e752dc4c9e10f8c24f4'/>
<id>urn:sha1:848ad99fa597387a85f75e752dc4c9e10f8c24f4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>animation: core publishes transition records; gui evaluates via shaders, tty over grid cells</title>
<updated>2026-08-19T02:45:04Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-08-17T19:12:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=31fece62f56aa2311e2325de83659edbc9e641db'/>
<id>urn:sha1:31fece62f56aa2311e2325de83659edbc9e641db</id>
<content type='text'>
</content>
</entry>
<entry>
<title>big slow change: prebuilt shaders (SPIR-V/Metal), core gui reflow, docs, web + snapshot refresh</title>
<updated>2026-08-19T02:44:42Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-08-16T18:49:12Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=1551e409c31992437cb2fa864f576d45c8433801'/>
<id>urn:sha1:1551e409c31992437cb2fa864f576d45c8433801</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Better text rendering</title>
<updated>2026-08-10T12:17:07Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-08-09T23:31:09Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=4b5e793f48f6e721c39ab6ddcf755604df73b643'/>
<id>urn:sha1:4b5e793f48f6e721c39ab6ddcf755604df73b643</id>
<content type='text'>
</content>
</entry>
</feed>
