Repository navigation
Conversation
Recognize SVG files in directory scans and rasterize them through the shared image decoder with resvg. Preserve transparency by converting premultiplied pixels to straight RGBA, resolve local image references relative to the SVG, and share a lazily loaded system font database. Fit renders use bounded dimensions without upscaling; zoom retains the existing intrinsic-raster path. Bypass the persistent SVG thumbnail cache because its source-only key cannot track referenced images or system fonts. Apply the standard image decoder allocation budget before creating SVG raster buffers so excessive intrinsic dimensions return an error instead of aborting allocation, while bounded thumbnails and fit renders remain possible. Add rendering, resource, cache freshness, allocation-limit and file-discovery coverage, update dependencies, and document SVG usage and raster zoom behavior. Model: openai-codex/gpt-6.1-sol:high
Keep parsed SVG trees as fullscreen zoom sources instead of magnifying intrinsic-resolution bitmaps. Re-render each SVG view at its output pixel resolution with continuous crop geometry, retaining fractional detail and matching mouse pan displacement. Leave raster crop/resize behavior intact. Render filtered SVGs on a full zoomed canvas before cropping so effects retain inputs outside the viewport. Preserve fractional alignment, budget canvas and crop allocations together, and report rendering failures in the viewer with recovery when the zoom or viewport changes. Unfiltered SVGs continue to allocate only the visible viewport. Add regressions for fine vector detail, fractional pan and transparency, offscreen filter inputs, allocation limits and recovery. Update SVG viewing documentation to describe vector zoom and filtered rendering limits. Model: openai-codex/gpt-6.1-sol:high
Enable terminal mouse capture for the viewer and disable it on restoration and terminal initialization failures. Route wheel events over the fullscreen image viewport through the existing zoom controls, and track left-button drags using cell-to-pixel displacements and the shared source-crop geometry. Clamp drag panning at image edges and cancel gestures on release, keyboard input, resize, focus loss and modal transitions. Keep mouse navigation inactive in gallery, picker, video and dialog modes. Add pixel-displacement and fit-scale regression coverage, and document the controls in README, fullscreen hints and compact help entries. Model: openai-codex/gpt-6.1-sol:high
Move zoom rendering off the terminal input thread using one background job at a time and shared immutable image sources. Coalesce requests to the latest desired geometry, publish ordered pan progress during continuous motion, and reject completions for obsolete images, zoom scales or viewports. Retain a budgeted premultiplied SVG canvas for whole-pixel pan crops. Re-render when scale or subpixel phase changes, preserve filter inputs, and keep the viewport-only fallback for unfiltered canvases exceeding the buffer limit. Preserve fit images when obsolete zoom-source failures arrive after reset. Bound input draining, poll pending work promptly, and pace fullscreen frame publication without retransmitting unchanged images. Buffer Kitty output, keep pending work from painting over overlays, and restore explicitly cleared frames even when navigation stays at the same image. Add state-transition and SVG pixel regressions and document the background rendering and canvas reuse behavior. Model: openai-codex/gpt-6.1-sol:high
Upload fullscreen frames into an inactive Kitty image slot while the prior placement remains visible. Flush the bulk transfer before a short synchronized place-before-retire swap, alternate two reserved IDs, and clean both stored slots on real mode exits and terminal restoration. Preserve re-placement without retransmission and re-upload after external storage clears. Use fast lossless PNG for fullscreen transfers and stream base64 through a fixed chunk buffer instead of allocating a whole-image encoded string and chunk list. Keep the existing gallery and video transport selection unchanged. Retain cached SVG canvases in straight RGBA so whole-pixel pans copy the visible crop without repeating alpha conversion. Compute pixel phase in f64 before narrowing render transforms, avoiding accidental cache misses for whole-pixel movement while retaining genuine subpixel rendering, filter inputs and shared allocation limits. Start rendering independently of publication pacing and poll pending workers at 4ms to reduce input-to-frame delay. Add publication ordering, storage invalidation, cleanup and transport round-trip regressions, and document continuous fullscreen swaps and cached SVG navigation. Model: openai-codex/gpt-6.1-sol:high
Stop publishing obsolete pan results merely to preserve an ordered stream of intermediate frames. Keep the displayed image until a current result is ready, or recrop a completed SVG canvas at the newest desired pan when its source, scale, fractional phase and dimensions still match. Drop obsolete output before allocating the replacement crop and retain stale-source, viewport and scale rejection. Share SVG viewport geometry between rendering and cache recropping so exact vector detail, fractional alpha, filter inputs and allocation limits remain consistent. Remove the fixed fullscreen publication cadence so ready images can follow input immediately without an artificial frame deadline. Update regression coverage for stale raster results, latest SVG recropping and fractional-phase fallback, and document the responsiveness-first navigation policy. Model: openai-codex/gpt-6.1-sol:high
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dependency and review scope
Depends on #2. The branch stacks the four mouse/navigation commits after the two SVG commits.
Because
svg-supportexists in the fork, not as a base branch in this upstream repository, this PR remains based onmainand includes the SVG prerequisites until they are integrated. Review the mouse-only delta here: mrzv/rview@svg-support...mouse-navigationMouse/navigation commits
[ai] Add fullscreen mouse pan and zoom[ai] Smooth fullscreen zoom and mouse panning[ai] Keep navigation visible and reduce SVG pan latency[ai] Prioritize newest mouse position during navigationChanges
Verification
cargo test43 passed;cargo test --no-default-features42 passed; formatting and release build passed.cargo test --features video44 passed using compatible FFmpeg 8 libraries in an isolated temporary environment; video release build and actual decoded frame advancement, pause/resume, image/video/gallery transitions and cleanup passed.Latest responsiveness measurements
Same dense filtered SVG fixture and fixed 240 Hz drag stream, release binaries before/after the latest commit:
The gap estimate has approximately 7.7 px pixel-quantization uncertainty. Both runs had zero blank upload states; the final decoded frame matched an independent fresh viewer at the same final displacement, and reset restored the original pixels.
Earlier continuity/performance measurements
Same fixtures and input streams, before/after the preceding continuity commit:
All three after-runs observed zero blank upload states. Measurements are fixture-specific controlling-PTY/protocol observations, not a live Kitty GUI benchmark; pixel fidelity was checked from decoded graphics payloads.