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.
133 lines
5.0 KiB
Markdown
133 lines
5.0 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to imajViewer are documented in this file.
|
||
|
||
## [Unreleased]
|
||
|
||
## [1.6.3] - 2026-10-20
|
||
|
||
### Fixed
|
||
- `SIGSEGV` while resizing the window. The GTK embedder's OpenGL compositor uploaded the frame using
|
||
the window's new dimensions while its pixel buffer still held the previous size, so `memcpy` read
|
||
past the end of the buffer (`engine/.../linux/fl_compositor_opengl.cc`). Fixed upstream in
|
||
flutter#187626, which is not part of Flutter 3.44.7 — the Linux build now uses Flutter 3.47.7,
|
||
where the compositor derives the texture size from the framebuffer itself.
|
||
|
||
## [1.6.2] - 2026-10-14
|
||
|
||
### Changed
|
||
- Crop save JPEG quality raised from 93 to 95.
|
||
|
||
## [1.6.1] - 2026-10-14
|
||
|
||
### Fixed
|
||
- Horizontal flip shortcut (`Ctrl+R`) never fired when the keyboard layout resolves the R key to a
|
||
different logical key (reported with a Turkish/remote-desktop setup where the R key arrives as
|
||
logical `T`). The shortcut now matches the physical R key position as well.
|
||
|
||
## [1.6.0] - 2026-10-14
|
||
|
||
### Added
|
||
- Horizontal flip (`Ctrl+R`): mirrors the image left-right about the viewport centre and clears
|
||
the active effects (same reset as double right click); pressing `Ctrl+R` again restores the
|
||
original orientation. Zoom/pan are kept.
|
||
- Crop save (`Ctrl+S`) now bakes the flip into the output as well, so the saved JPEG matches
|
||
the mirrored view (also in combination with rotation).
|
||
|
||
## [1.5.0] - 2026-10-12
|
||
|
||
### Added
|
||
- Fill/fit mode (double-click) is now persisted in `window.json` and restored on the next launch
|
||
and when switching images, instead of always resetting to fill.
|
||
|
||
## [1.4.2] - 2026-10-12
|
||
|
||
### Fixed
|
||
- Crop save dropped the blue channel's brightness/contrast offset (matrix index `m[13]`, the
|
||
alpha coefficient, instead of `m[14]`), so saved JPEGs came out with a color cast whenever
|
||
brightness or contrast was applied. Saturation/rotate were unaffected.
|
||
|
||
## [1.4.1] - 2026-10-11
|
||
|
||
### Fixed
|
||
- Crop save always writes JPEG (previously kept the source extension, e.g. PNG) — quality 93
|
||
- Crop save with rotation now saves the rotated view 1:1 instead of an unrotated bounding box
|
||
|
||
## [1.4.0] - 2026-10-11
|
||
|
||
### Added
|
||
- Crop save: saves the visible area at original resolution as JPEG quality 90 — title bar save button or Ctrl+S
|
||
- Output name: original name + `_HHmmss` time suffix (e.g. `photo.jpg` → `photo_143025.jpg`)
|
||
- If a file with the same name exists, nothing is written and a warning is shown
|
||
- Active color effects (contrast/saturation/brightness) are baked into the output
|
||
- With rotation active, the bounding box around the visible area is saved
|
||
|
||
## [1.3.2] - 2026-08-28
|
||
|
||
### Fixed
|
||
- Window position/size persistence under Wayland — forces X11 backend (XWayland) when an X server is available
|
||
|
||
## [1.3.1] - 2026-08-14
|
||
|
||
### Fixed
|
||
- Aspect ratio distortion on image switch — downsample now uses `ResizeImagePolicy.fit` (was `exact`, which forced 2048×2048 square and stretched non-square images)
|
||
|
||
## [1.3.0] - 2026-08-14
|
||
|
||
### Fixed
|
||
- `_imageSize` now resets on image switch (wrong swap threshold on navigation)
|
||
- Downsample now caps both dimensions, not just width (tall images no longer full-res decode)
|
||
- Image size listener leak in `loadingBuilder` — replaced with single `_readImageSize`
|
||
- Old downsample provider now evicted on full-res swap
|
||
- Removed `imageCache.clear()` that also dropped the live image (gallery flash)
|
||
|
||
## [1.2.0] - 2026-08-14
|
||
|
||
### Added
|
||
- Downsampling: large images decode at max 2048px on first load (RAM ~1.6MB)
|
||
- Full-res swap: zooming in past 1.5x stretch swaps to original resolution
|
||
- Internationalization: Turkish + English, auto-detected from system locale
|
||
- Zoom decodes at original resolution while zooming in (crisp details)
|
||
- Max zoom increased to 20x
|
||
|
||
### Fixed
|
||
- RAM leak on image switch — old providers now evicted + `ImageCache.evict()`
|
||
- Black screen flash during zoom (gapless playback)
|
||
|
||
### Changed
|
||
- App ID `com.example.imajviewer` → `com.softmediadesign.imajviewer`
|
||
- CI now runs `flutter analyze` and `flutter test` on every push
|
||
- `pubspec.yaml` description in English (open-source ready)
|
||
|
||
## [1.1.0] - 2026-08-06
|
||
|
||
### Fixed
|
||
- `Ctrl+Q` now closes the window reliably (`onKeyEvent` rework)
|
||
- Pan freeze regression on effect-applied images (root cause analysis)
|
||
|
||
### Added
|
||
- Navigation arrows (visible on hover)
|
||
- Settings window: folder sorting by time/name, print, shortcut info
|
||
- Print support (printing package, A4 fit)
|
||
- Title bar hover transparency
|
||
- Shader warmup — right-click effects no longer stutter on first use
|
||
|
||
## [1.0.1] - 2026-07-27
|
||
|
||
### Fixed
|
||
- Zoom/pan issues on large images
|
||
- Image provider memoize — repeated opens no longer reload from disk
|
||
|
||
### Changed
|
||
- Version now sourced from `pubspec.yaml` (single source of truth)
|
||
|
||
## [1.0.0] - 2026-07-22
|
||
|
||
### Added
|
||
- Initial release: ultra-lightweight image viewer
|
||
- Formats: PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP
|
||
- Pan (left drag), zoom (wheel, cursor-centered), fill/fit toggle (double click)
|
||
- Contrast / saturation / brightness / rotate gestures
|
||
- Drag & drop, window position memory, set-as-default-viewer
|
||
- Linux (.deb) and Windows (setup.exe) installers
|