# Session Özeti — 2026-07-27 ## Eklenen Özellikler ### Çalışan | Özellik | Tetikleyici | Durum | |---|---|---| | Pan (sürükleme) | Sol tık | ✓ | | Zoom (mouse tekeri) | Scroll | ✓ | | Fill/Fit geçişi | Sol çift tık | ✓ | | Contrast | Sağ tık + dikey sürükleme | ✓ (matrix row-major) | | Saturation | Ctrl + sağ tık + dikey sürükleme | ✓ (desaturate + oversaturate) | | Reset (tüm efektler) | Sağ çift tık | ✓ | ### Tamamlanmamış / İptal | Özellik | Durum | |---|---| || Rotate | Shift + Sağ tık + dikey sürükleme | ✓ (viewport merkezi, ~100px=90°) | | Brightness | **Kaldırıldı** — hiç çalışmadı | | Single-instance | **İptal** — kullanıcı istemedi. Bunun yerine StartupWMClass ile taskbar gruplama | --- ## Performans Durumu - **Çıplak mod (pan + zoom)**: Süper hızlı ✓ - **ColorFiltered (contrast + saturation)**: Ciddi performans düşüşü ✗ - **Çözüm**: `hasFilter` mantığı eklendi. `_saturation == 1.0 && _contrast == 1.0` ise `ColorFiltered` widget'ı **hiç render edilmez**. Efekt uygulanınca devreye girer. |- **Rotate**: Ayrı `Transform` katmanı, sadece `_angle != 0` iken render edilir. Sıfır ek yük. --- ## Teknik Detaylar ### Color Matrix - **Format**: Row-major 5x4 (column-major çalışmadı!) - **Birleşik matrix**: `M_combined = M_contrast × M_saturation` (tek GPU pass) - **Cache**: `_cachedFilter` ile değerler değişmediğinde yeniden oluşturulmaz - **Lazy render**: `hasFilter` false ise `ColorFiltered` widget ağacına eklenmez ### Klavye Modifier Tracking - `HardwareKeyboard.instance.addHandler(_onHardwareKey)` ile global seviyede - `HardwareKeyboard.instance.isShiftPressed` / `isControlPressed` **çalışmıyor** (Linux bug'ı) - Kendi `_ctrlPressed` / `_shiftPressed` state'imizi tuttuk ### install.sh - Önce `build/linux/x64/debug/bundle/`, yoksa `release/bundle/` yolunu dener ### Gesture Sistemi - `Listener` (sağ tık event'leri) + `GestureDetector` (sol tık pan/çift tık) hibrit yapısı - `Listener.onPointerDown/Move/Up` ile manuel gesture handling --- ## Bilinen Sorunlar 1. **Zoom throttle kaldırıldı** — her scroll event'inde `setState`, bu da performansı etkiliyor olabilir 2. **Rotate düzeltildi** — viewport merkezi, lazy Transform. Pan/zoom ile uyumlu. 3. **BlendMode saturation oversaturate yapamıyor** — matrix'e geçildi (çalışıyor) --- ## Dosya Yapısı | Dosya | Açıklama | |---|---| | `lib/widgets/image_canvas.dart` | Tüm görüntü işleme, filtreler, gesture'lar | | `install.sh` | Kurulum scripti (debug/release otomatik seçim) | | `docs/image-canvas-interactions.md` | Detaylı analiz raporu | | `docs/index.md` | Dokümantasyon indeksi | --- ## Sonraki Session İçin 1. Single-instance implementasyonu (lock file / Unix socket) 2. Rotate'i düzeltip tekrar ekleme (performans ve pan yönü sorunları) 3. Zoom performans optimizasyonu (throttle veya GestureDetector.onScaleUpdate) 4. `.deb` ve Windows installer güncellemesi