1) Tap/touch during a fling: the ListView's Flickable already stops the fling when a press lands (its press handler resets the fling animation — slint core items/flickable.rs, remove_binding = set_animated_value(current, none)); the bug was that the press is then forwarded to the cell (~100 ms later, FORWARD_DELAY) and the release opened the viewer. The cell TouchArea now reports its pointer-event down (1.18 has no pressed callback) via cell-pressed → on_cell_pressing, which marks the tap as a fling-stopper when the grid moved within the last 150 ms (the tick tracks raw list-y changes in grid_motion); on_open_image then swallows the tap. 2) Zooming past max resolution moved the image: zoom_at applied the raw factor to tx/ty BEFORE clamping s — at the cap s stayed put but the translation still shifted about the (moving) pinch center, so the image followed the fingers like a two-finger drag. zoom_at now clamps s first (factor derived from the clamped s: at the cap factor = 1, a true no-op), and Input::pinch sticks at both caps (the handler reports a CUMULATIVE scale from the pinch start, so past the cap every later update would otherwise drift). The zoom cap is now NATIVE resolution: max(fit, 1.0) — 1 device pixel per image pixel (small images keep fit); zooming further only pixelates, so it is not allowed (was 20× fit). Tests: zoom_at_past_cap_is_noop, pinch_sticks_at_caps (new), clamp_zoom_bounds (native cap + small-image fit), updated pinch_handler_sequence (4× fit now clamps at native). 36/36. Emulator: fling+tap → 0 viewer opens, grid settled; normal tap still opens (cached path). |
||
|---|---|---|
| docs/BUGS | ||
| scripts | ||
| src | ||
| vendor | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| HANDOFF.md | ||
| LICENSE | ||
| README.md | ||
gallery
A high-performance image gallery for Android (primary), Linux and macOS — Rust + Slint 1.18.
Status: M1 (metadata scan + DB) done. See HANDOFF.md — the development hand-off with the full plan: architecture, thumbnail pipeline, milestones M1–M7, Slint gotchas, permission flow, and performance targets. Next: M2 (thumbnail engine).
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 Slint, used under the Slint royalty-free license for proprietary apps (see HANDOFF.md §10.4).