226 lines
9.1 KiB
Markdown
226 lines
9.1 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to imajViewer are documented in this file.
|
||
|
||
## [Unreleased]
|
||
|
||
## [1.9.2] - 2026-10-31
|
||
|
||
### Changed
|
||
- Settings dialog is now tabbed (General / Size / Shortcuts) instead of one
|
||
long scrolling column; settings dialog panel has no outer margin, no rounded
|
||
corners and fills the window on small sizes — separated from the canvas by a
|
||
thin border.
|
||
- Tab bar spans the panel width; size grid cells stretch to fill the tab.
|
||
- Size grid: top-left cell is the `H:W` axis label; cells highlight on hover
|
||
with a pointer cursor.
|
||
- Sort labels are single words (Time / Name) so they never wrap on narrow
|
||
windows; section titles are bold.
|
||
- Shortcut key column uses the UI font (monospace removed) and is narrower.
|
||
- Footer tagline: "Simple, clean, light, fast image viewer."
|
||
- Language row (English / Türkçe / Français) added to the General tab as a
|
||
disabled placeholder — switching is not wired yet.
|
||
- Title bar: crop-save icon moved from the window controls to the left group,
|
||
right next to the settings gear.
|
||
- Hover highlight color is selectable in Settings > General (8-color palette,
|
||
default red) and applies to title bar buttons, navigation arrows and size
|
||
grid cells; stored as `hoverColor` in `window.json`.
|
||
- Title bar drag area: grab cursor and a faint hover tint while the pointer is
|
||
on the bar (buttons keep the click cursor and their own highlight).
|
||
|
||
## [1.9.1] - 2026-10-31
|
||
|
||
### Changed
|
||
- Settings dialog: compact single top row — "Settings" title on the left,
|
||
print and close as icon buttons on the right (bottom action row removed).
|
||
- Settings dialog facelift: capped 520×560 centered dialog, M3 section cards,
|
||
segmented sort control, two-column shortcuts, fixed footer, size grid
|
||
cells 52×28.
|
||
|
||
## [1.9.0] - 2026-10-31
|
||
|
||
### Added
|
||
- Taskbar/alt-tab title now shows the opened image's file name (falls back to
|
||
"imajViewer" when no image is open).
|
||
- Full hicolor icon size set (16–256 px) instead of only 64 px, so small-icon
|
||
contexts (Thunar "Open With", Xfce app menu) keep the symbol visible.
|
||
|
||
### Changed
|
||
- `install.sh` generates the full icon size set and rewrites the hicolor
|
||
index; uninstall hint updated.
|
||
- Settings size grid is now a fixed 4-column layout (the wide/narrow
|
||
transposition introduced in this release was removed).
|
||
|
||
## [1.8.0] - 2026-10-31
|
||
|
||
### Added
|
||
- Window size presets: 4×8 screen-ratio grid in settings; clicking a preset
|
||
resizes the window to that fraction of the screen work area (taskbar
|
||
excluded). Minimum window size lowered to 160×100.
|
||
|
||
### Fixed
|
||
- Settings file-properties rows were centered under the longest row (path);
|
||
now left-aligned.
|
||
|
||
## [1.7.2] - 2026-10-25
|
||
|
||
### Fixed
|
||
- Rotating sometimes vanished before saving: the right-button double-click reset was
|
||
detected on button *down* against the previous down time and position, so two rotate
|
||
drags started quickly at nearly the same spot were treated as a double click — all
|
||
effects (rotation included) were wiped and the second drag was ignored, so `Ctrl+S`
|
||
saved an unrotated crop. A double click is now only counted for actual clicks
|
||
(movement ≤ 4 px, decided on button up), a drag breaks the chain, and
|
||
`pointer up` is matched by pointer id so a left-drag pan never counts as a click.
|
||
|
||
## [1.7.1] - 2026-10-25
|
||
|
||
### Added
|
||
- Zoom percentage badge at the bottom center, between the previous/next buttons: shown
|
||
together with the hover controls, translucent background, live while wheeling
|
||
(100% = one image pixel per screen pixel), recomputed on fill/fit toggle, image
|
||
change and window resize.
|
||
|
||
### Changed
|
||
- Image header parsing (pixel size without decoding) moved from the viewer screen into
|
||
`lib/services/image_header.dart`; the settings file-properties panel and the zoom badge
|
||
use the same code.
|
||
|
||
## [1.7.0] - 2026-10-20
|
||
|
||
### Added
|
||
- Settings dialog shows the app version next to the name.
|
||
- Fine zoom: `Ctrl`+wheel zooms 1% per step (plain wheel stays 10% per step).
|
||
- Settings shortcut list completed: `Ctrl+O` (open), `Esc` (exit fullscreen), scroll/zoom,
|
||
`Ctrl`+scroll fine zoom, left-drag pan, double right click (reset effects).
|
||
|
||
### Changed
|
||
- README: zoom feature line and shortcut table updated to match.
|
||
|
||
## [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
|