Commit Graph

7 Commits

Author SHA1 Message Date
Mortdecai f7c619457b fix(composite): don't draw partially off-screen images (prevents sticky images on scroll) 2026-04-07 22:29:20 -04:00
Mortdecai 8e663b6e63 feat(composite): native Kitty graphics protocol for inline images
Use vaxis NewImage/Resize/Draw which auto-selects Kitty graphics protocol.
Images decode in background, vaxis handles async Kitty protocol encoding.
Removed halfblock fallback — Kitty only.
2026-04-07 22:12:06 -04:00
Mortdecai 8a19e0b95c feat(composite): halfblock image renderer — crash-proof, cross-terminal
Replace vaxis NewImage/Resize (which spawns goroutines that panic in
sixel encoder) with direct halfblock character rendering. Each terminal
cell uses upper-half-block with RGB fg/bg colors for 2x vertical
resolution. Pre-renders in background goroutine, Draw() just paints
pre-computed cells. Works in any 24-bit color terminal.
2026-04-07 22:03:34 -04:00
Mortdecai e6af1a6208 fix(composite): recover from sixel encoder panics, clean up debug logging
The go-sixel library panics on certain image dimensions during Resize().
Added panic recovery in drawImage() that falls back to alt text display.
Cleaned up all debug logging from the investigation.
2026-04-07 21:48:37 -04:00
Mortdecai 046ff03f8b fix(composite): async image decode, skip dead pager, prevent UI freeze
- Decode images in background goroutine, not in Draw()
- Show [loading image...] placeholder until decode completes
- Skip pv.term.Draw() when composite is active (pager got no input)
- Thread-safe access to decoded image cache via sync.Mutex
- Invalidate callback triggers redraw when images finish decoding
2026-04-07 21:11:44 -04:00
Mortdecai 20161fedeb feat(msgviewer): re-enable composite renderer with scroll support and inline images
Composite mode now handles j/k/g/G/PgUp/PgDown/mouse wheel for scrolling.
Text uses the configured default style. Images render inline via Vaxis.
Emails without images still use the standard pager path.
2026-04-07 21:04:27 -04:00
Mortdecai 9c7a770daa feat(app): add composite content model for text+image block rendering 2026-04-07 20:08:36 -04:00