Files
imajviewer/docs/session-2026-07-27.md
Alhan 171476d30b
Some checks failed
Build Windows / build-windows (push) Has been cancelled
feat: rotate (Shift+sag tik), StartupWMClass taskbar gruplama, dist guncelle
2026-07-27 20:41:14 +03:00

80 lines
3.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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