T26a Media: images

A new chapter, src/media. ImageViewer fits a picture to its stage and
zooms by the document steps, by keys, buttons and Cmd-scroll about the
pointer; a drag through gpui's drag, a scroll or the arrows pan it once it
overhangs; R turns it a quarter at a time. gpui paints pictures without a
transform, so media::turn turns the decoded frames off the main thread,
an asset keyed by the picture and the turn; `image` 0.25, which gpui
already decodes with, is now a dependency. ImageThumbnail shows a picture
in its own shape with a corner label and a ring when chosen, and is a Tab
stop only with a handler. Lightbox / Gallery Viewer points to
overlays::Lightbox, which the gallery opens from the thumbnails.

T26 splits into T26a–e. AGENTS.md: the drag rule says drags that pan,
turn or slide go through gpui's drag; pictures turn by their pixels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-26 15:34:45 -04:00
1 parent 4678773383
commit f8a51a5352
14 files changed
+1171 -7

No files matched your search

+17 -5
View File
@@ -251,16 +251,26 @@
- [x] PromptPlayground
- [x] PromptDiff / PromptVersionHistory
## T26 Media — `src/media`
## T26a Media · Images — `src/media`
- [x] ImageViewer — zoom, pan, rotate, fit
- [x] ImageThumbnail
- [x] Lightbox / Gallery Viewer → `overlays::Lightbox`
## T26b Media · Crop and annotate
- [ ] ImageViewer — zoom, pan, rotate, fit
- [ ] ImageCropper — also T06e ImageUpload
- [ ] ImageAnnotator
- [ ] ImageThumbnail
- [ ] Lightbox / Gallery Viewer → `overlays::Lightbox`
## T26c Media · Video
- [ ] VideoPlayer — host frames
- [ ] VideoTimeline / Scrubber
- [ ] VideoThumbnailStrip
- [ ] SubtitleEditor
## T26d Media · Audio and controls
- [ ] AudioPlayer — host playback
- [ ] AudioWaveform
- [ ] AudioSpectrum / Visualizer
@@ -268,7 +278,9 @@
- [ ] PlaybackSpeedControl
- [ ] MediaControls
- [ ] Playlist
- [ ] SubtitleEditor
## T26e Media · Capture and devices
- [ ] ScreenRecorderControls
- [ ] CameraPreview — host frames
- [ ] MicLevelMeter