build: github acik kaynak hazirligi — LICENSE/CI/topluluk dosyalari eklendi, binary'ler takipten cikarildi, README EN, kok dokumanlar docs/'a tasindi
This commit is contained in:
1 parent
cd3f573f57
commit
8972ef7225
35 files changed
+560
-151
No files matched your search
@@ -0,0 +1,45 @@
|
||||
# ImajViewer — Pan Sınırlama & Zoom Merkezi Sorunu ✅ ÇÖZÜLDÜ
|
||||
|
||||
> **Tarih:** 2026-07-23
|
||||
> **Dosya:** `lib/widgets/image_canvas.dart`
|
||||
> **Durum:** ✅ Çözüldü
|
||||
|
||||
---
|
||||
|
||||
## Nihai Çözüm
|
||||
|
||||
### 1. Zoom — `Matrix4.copy(m)..translate..scale..translate`
|
||||
Cursor merkezli zoomAroundPoint. Hem fill hem fit modunda çalışır çünkü `localPosition` her zaman Listener'a göre doğru koordinat verir. `_currentScale` listener'da güncellenir.
|
||||
|
||||
### 2. `_clampAfterZoom` — Image offset + sadece boundary clamp
|
||||
**Kritik:** Fit modunda (BoxFit.contain) Image, Center widget içinde **ortalanır**. Offset hesaplanarak image'ın viewport'taki gerçek sınırları bulunur:
|
||||
|
||||
```dart
|
||||
imgOffsetX = (viewportW - imageW) / 2 // fill modunda 0, fit modunda >0
|
||||
imgLeft = tx + imgOffsetX * scale
|
||||
imgRight = tx + (imgOffsetX + imageW) * scale
|
||||
```
|
||||
|
||||
**SADECE** image viewport'tan büyükse clamp yapılır. Küçükse **dokunulmaz** — zoom-around-point merkezi korunur. Kullanıcı double-tap ile istediği zaman ortalamayı sıfırlayabilir (`Matrix4.identity()`).
|
||||
|
||||
### 3. `translate` — asla `setTranslationRaw` kullanma
|
||||
`setTranslationRaw` matrisin translation sütununu ezer → zoom merkezini bozar. `translate(dx,dy)` ekleme yapar → zoom merkezi korunur.
|
||||
|
||||
### 4. Listener'da clamp YOK
|
||||
Sadece `_currentScale` takip edilir. Pan → `boundaryMargin: EdgeInsets.zero`, Zoom → `_handleScroll` içinde `_clampAfterZoom`.
|
||||
|
||||
---
|
||||
|
||||
## Akış
|
||||
|
||||
```
|
||||
Scroll → _handleScroll → zoomAroundPoint → _controller.value
|
||||
↓
|
||||
_clampAfterZoom()
|
||||
├─ image > viewport → translate ile clamp
|
||||
└─ image ≤ viewport → dokunma
|
||||
|
||||
Pan → InteractiveViewer → _controller.value (boundaryMargin sınırlar)
|
||||
↓
|
||||
_onTransformChanged → sadece _currentScale
|
||||
```
|
||||
Reference in new issue
Block a user