- Rebuilt dist/imajviewer_1.9.2_amd64.deb (10.7M) with current dependency set
- Updated pubspec.lock (intl, matcher, meta version changes)
- v1.9.2 release already published on Gitea (id 5, tag v1.9.2)
- No source code changes, dependency rebuild only
- Settings 'Size' section: 8 col x 4 row grid, 31 buttons labeled a:b
(a splits H, b splits W); top-left cell empty placeholder (no 1:1 —
title bar double click already maximizes)
- Click resizes the window to work.width/b x work.height/a of the
display's work area (screen_retriever visibleSize, taskbar excluded);
position unchanged, no selection state tracking
- minimumSize 400x300 -> 160x100 (4:8 cell needs it)
- Settings file-properties rows left-aligned (were centered under path)
Two rotate drags started quickly at nearly the same spot were treated as a
double click: the reset was detected on button down against the previous down
time/position, so it wiped all effects and ignored the second drag, leaving
Ctrl+S to save an unrotated crop.
- Double click is now only counted for actual clicks (movement <= 4px) and is
decided on button up; a drag breaks the chain.
- Pointer up is matched by pointer id, so a left-drag pan never counts as a click.
- dist: 1.7.2 .deb replaces the tracked 1.7.1 package.
- Percentage shown between the prev/next buttons, together with the hover
controls, on a translucent background.
- Value is the on-screen scale relative to the image's real pixel size
(100% = 1:1); updated on wheel zoom, fill/fit toggle, image change and
window resize.
- Pixel-size header parsing moved to lib/services/image_header.dart, shared
with the settings file-properties panel.
- dist: 1.7.1 .deb replaces the tracked 1.7.0 package.
The GTK embedder's OpenGL compositor uploaded the frame with the window's new
dimensions while its pixel buffer still held the previous size, so memcpy read
past the end of the buffer and the process died with SIGSEGV
(fl_compositor_opengl.cc). Upstream fix: flutter#187626, present in Flutter
3.47.7 but not in 3.44.7.
Linux builds now use /home/alhan/development/flutter-3.47.7; pubspec.lock was
re-resolved for Dart 3.13.5 and the new tool added its build/platform excludes
to analysis_options.yaml. dist/ carries the 1.6.3 package instead of 1.6.2.
On some keymaps the R key resolves to a different logical key (observed on a
Turkish remote-desktop setup: the R key arrives as logical T), so the Ctrl+R
shortcut never fired even though the key events reached the app. The shortcut
now matches PhysicalKeyboardKey.keyR as well; a regression test covers the
wrong-layout case.
- R mirrors the view about the viewport centre and clears the active effects
(same reset as double right click); pressing R again restores the original
orientation. Pan/zoom are kept.
- Image switch, fill/fit toggle and right double click also clear the flip.
- Crop save (Ctrl+S) mirrors the output too, so the saved JPEG matches the
on-screen view (verified in combination with rotation).
- Shortcut lists (tr/en), README and CHANGELOG updated; deb rebuilt as 1.6.0.
The double-click fill/fit mode was hardcoded (image_canvas: _isFilled = true) and
reset on every image change, so it never survived a restart. It is now stored as
"filled" in window.json and restored on launch and on image switch.
WindowPersistence.saveSync() now merges with the existing file, otherwise the
startup/move/resize geometry writes would drop the mode key.
Also: version 1.5.0, CHANGELOG entry, dist/ ships imajviewer_1.5.0_amd64.deb
(replaces 1.4.2).
m[13] (blue alpha coefficient, always 0) was read as the blue offset instead of
m[14], so saved JPEGs lost the blue brightness/contrast offset and came out with a
color cast. Saturation/rotate were unaffected (no offsets).
Also: version 1.4.2, CHANGELOG entry, dist/ ships imajviewer_1.4.2_amd64.deb
(replaces 1.4.1).
- docs/ untracked: internal dev docs (reports, sessions, plans) stay local
- dist/: keep only latest .deb (1.3.1) and .exe (1.1.0); remove 4 old builds
- .gitignore: ignore /docs/ and all dist binaries except the two latest
- Save visible area at original resolution as JPEG q90 (title bar button or Ctrl+S)
- Output name: original name + _HHmmss suffix; no overwrite, warning shown
- Active color effects baked in; rotation saves bounding box
- New: crop_save_service, l10n strings TR/EN, docs/plan-crop-save.md
Downsample used ResizeImagePolicy.exact which forced a 2048×2048
square and stretched non-square images. Switch to ResizeImagePolicy.fit
to preserve aspect ratio while still capping both dimensions.
- _imageSize reset on image switch (wrong swap threshold on nav)
- downsample caps both dims (tall images no longer full-res decode)
- single _readImageSize instead of leaking loadingBuilder listeners
- evict old downsample provider on full-res swap
- remove imageCache.clear() that dropped live image (gallery flash)
- Büyük resimler ilk yüklemede max 2048px'e downsampling (RAM ~1.6MB)
- Zoom 1.5x stretch'i geçince full-res'e swap (orijinal çözünürlük)
- Resim geçişinde eski provider evict + ImageCache.evict() (RAM leak)
- Tiled render kodu tamamen kaldırıldı