Files
imajviewer/docs/rapor-gezinme-ayarlar-print.md

3.5 KiB
Raw Permalink Blame History

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.sortByNamesetGalleryFromPaths 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.readAsBytespw.MemoryImagepw.Document A4 sayfa, BoxFit.containPrinting.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).