A second drag while the first was settling showed the new image briefly at the wrong size: the commit copied the preview's src into vimg (an async paint — one frame of old content in the new box) and openViewer then reset vScale=1, so the promoted image rendered at thumb scale until full-res landed. Commit now swaps the ELEMENTS' roles instead of copying pixels: the preview element already shows the incoming image at its own size and scale, so finishCommit promotes it in place (geometry adopted from the loaded preview, moved to 0, brought to front, old primary hidden immediately). No src copy, no async paint, no re-layout — the settled frame is the drag frame. P/S role variables replace the fixed vimg/vimg2 references throughout the viewer. openViewer(keepVisible) no longer resets the view state (the commit already set it), and a full-res landing while a slide owns base/vScale is deferred to the safety timer instead of jumping the animation. Verified on the emulator: mid second-drag the promoted image holds its exact fit size (1081 px) in every captured frame (the bug showed ~288), both images visible on the strip, and the chained landing is pixel-identical to two deliberate swipes. |
||
|---|---|---|
| docs/BUGS | ||
| harnesses | ||
| scripts | ||
| shim/out | ||
| src | ||
| tools | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| HANDOFF.md | ||
| LICENSE | ||
| README.md | ||
gallery
A high-performance image gallery for Android (primary), Linux and macOS —
Rust + egui 0.31 (egui_glow / winit 0.30 / glow 0.16).
Ported from Slint 1.18 after the zero-jank campaign showed Slint-on-Mali
janky at its base level while egui measured 3–7× cleaner (HANDOFF.md
§8.11–8.12). The Slint tree is preserved in git history and
docs/BUGS/.
Status: M0–M4 ported to egui, zero-jank tuning in progress. See HANDOFF.md — the development hand-off: architecture, thumbnail pipeline, milestones M1–M7, the Slint jank campaign, the egui port, and the sltest/egtest/tttest harnesses (A/B/C: Slint/egui/WebView).
Build
./scripts/build.sh debug # debug x86_64 APK + install on emulator
./scripts/build.sh # release x86_64 (emulator)
./scripts/build.sh aarch64 # release aarch64 (device)
cargo run # desktop (Linux needs libfontconfig1 + pkg-config)
Requires: Rust (rustup), cargo-apk2, Android SDK + NDK 27 (see HANDOFF.md §3
for exact paths/env).
License
GPL-3.0 (see LICENSE). Built on egui (MIT/Apache-2.0).