80 lines
3.0 KiB
Markdown
80 lines
3.0 KiB
Markdown
# 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
|