81 lines
3.5 KiB
Markdown
81 lines
3.5 KiB
Markdown
# Rapor — Gezinme Okları, Ayarlar (Sıralama) ve Yazdırma
|
||
|
||
Tarih: 2026-08-06
|
||
Durum: Uygulandı
|
||
|
||
## Amaç
|
||
|
||
Klavyede zaten çalışan sol/sağ ok tuşu gezinmesine görsel karşılık eklemek;
|
||
ayarlar (gear) penceresiyle klasör sıralamasını kullanıcıya bırakmak; resmi
|
||
yazıcıya göndermek.
|
||
|
||
## Yapılan Değişiklikler
|
||
|
||
### 1. Gezinme okları (görsel arayüz)
|
||
|
||
- Sol/sağ alt köşeye sade yuvarlak ok butonları eklendi (`_NavButton`,
|
||
`lib/screens/viewer_screen.dart`).
|
||
- Normalde görünmez; mouse görüntü alanına girince belirir
|
||
(`MouseRegion` → `_controlsVisible`).
|
||
- Hover'da kırmızı arka plan (kapatma butonuyla aynı stil).
|
||
- Tooltip yok (kullanıcı istemedi).
|
||
- `ImageManager.instance.previousImage()/nextImage()` çağırır — klavye
|
||
kısayoluyla aynı yolu kullanır.
|
||
|
||
### 2. PITFALL — MouseRegion flicker döngüsü (çözüldü)
|
||
|
||
İlk uygulamada MouseRegion yalnızca resim alanını sarıyordu, butonlar
|
||
Stack'te üstte ayrı duruyordu. Mouse butonun üzerine gelince hit-test
|
||
butona gidiyor → MouseRegion `onExit` → butonlar kayboluyor → mouse tekrar
|
||
resim alanına düşüyor → `onEnter` → sonsuz yanıp sönme ve tıklanamama.
|
||
|
||
Çözüm: `MouseRegion`'ı **tüm Stack'in** üzerine taşı (DropTarget'ın
|
||
çocuğu). Butonlar da Stack içinde kaldığı için onların üzerindeyken
|
||
bölgeden çıkılmaz; `onExit` yalnızca pencere alanı terk edilince tetiklenir.
|
||
|
||
### 3. Gear (Ayarlar) butonu
|
||
|
||
- İlk olarak görüntü alanının sol üstüne kondu; kullanıcı "title yüzünden
|
||
aşağıda çıkıyor" deyince **title bar'ın soluna** taşındı
|
||
(`CustomTitleBar(onSettings: ...)`, `lib/widgets/custom_title_bar.dart`).
|
||
- Title bar `visible` parametresiyle `_controlsVisible`'a bağlandı: mouse
|
||
resmin dışındayken title (gear dahil) saydam (AnimatedOpacity 0), mouse
|
||
girince görünür.
|
||
- Hover arka planı kırmızı (`_BarButton` varsayılanı).
|
||
|
||
### 4. Ayarlar penceresi (`_showSettings`)
|
||
|
||
Gear'a tıklayınca açılan AlertDialog:
|
||
- **Sıralama**: Zamana göre / İsme göre (RadioListTile).
|
||
`ImageManager.sortByName` — `setGalleryFromPaths` içinde sıralama
|
||
karşılaştırıcısı buna göre değişir; isim sıralaması `toLowerCase`
|
||
karşılaştırma ile (büyük/küçük harf duyarsız). Mod değişince mevcut
|
||
galeri `setGalleryFromPaths([_images[_currentIndex]])` ile yeniden
|
||
kurulur (açık resim korunur).
|
||
- Uygulamanın amacı (kısa paragraf).
|
||
- Kısayollar listesi (F11 satırı kaldırıldı — tam ekran özelliği yok).
|
||
|
||
### 5. Yazdırma (`_printImage`)
|
||
|
||
- Yeni bağımlılıklar: `printing: ^5.13.4`, `pdf: ^3.11.1` (Linux dahil
|
||
masaüstü destekli).
|
||
- Buton ayarlar penceresinin actions kısmında ("Yazdır"); ayrı köşe butonu
|
||
değil (kullanıcı istediği yerleşim).
|
||
- Akış: `File.readAsBytes` → `pw.MemoryImage` → `pw.Document` A4 sayfa,
|
||
`BoxFit.contain` → `Printing.layoutPdf` (sistem yazıcı dialogu).
|
||
|
||
### 6. `_BarButton.hoverColor` kaldırıldı
|
||
|
||
Gear title'a taşınıp tek hover rengi (kırmızı) kaldığı için opsiyonel
|
||
parametre gereksizleşti; analyze uyarısı (unused_element_parameter)
|
||
temizlendi.
|
||
|
||
## Doğrulama
|
||
|
||
- `flutter analyze`: 21 info (pre-existing baseline; yeni hata yok).
|
||
- `flutter build linux --release`: ✓ Built.
|
||
- `./install.sh` (debug bundle silinip release kuruldu): exit 0.
|
||
- `bash dist/rebuild-deb.sh`: `dist/imajviewer_1.0.1_amd64.deb` (11M) üretildi.
|
||
- Görsel davranış kullanıcı tarafından manuel test edildi (oklar,
|
||
gear/title saydamlığı, hover renkleri, sıralama, print dialogu).
|