# imajViewer

Ultra hafif görüntü izleyici. Flutter ile yazıldı — Linux & Windows desteği.

## Özellikler

- **Dosya formatları:** PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP
- **Pan:** Sol tık + sürükle
- **Zoom:** Fare tekerleği (imleç merkezli, rotate modunda viewport merkezli)
- **Fill/Fit geçişi:** Sol çift tık
- **Contrast ayarı:** Sağ tık + dikey sürükle
- **Saturation ayarı:** Ctrl + Sağ tık + dikey sürükle
- **Brightness ayarı:** Ctrl+Shift + Sağ tık + dikey sürükle
- **Rotate:** Shift + Sağ tık + dikey sürükle (~100px = 90°)
- **Reset (tüm efektler):** Sağ çift tık
- Sürükle-bırak ile resim açma
- Pencere boyutu/konumu hatırlama (JSON persistence)
- Varsayılan görüntü izleyici olarak ayarlanabilir
- Yeni pencere öncekinin yanında açılır (cascade — taşarsa alt satır)
- Taskbar gruplama (Linux: `StartupWMClass`, otomatik)

## Linux Kurulum

**Flutter SDK gerekmez** — `dist/` dizininde hazır .deb paketi gelir.

### .deb paketi ile kurulum (Önerilen)

```bash
git clone https://git.softmediadesign.com/git_alhan/imajviewer.git
cd imajviewer
sudo dpkg -i dist/imajviewer_1.0.0_amd64.deb
sudo apt-get install -f  # eksik bağımlılıklar varsa
```

### install.sh ile kurulum (kaynaktan/build)

```bash
git clone https://git.softmediadesign.com/git_alhan/imajviewer.git
cd imajviewer
./install.sh
```

Kurulum sonrası `xdg-open <dosya>` ile açabilir veya dosyaya çift tıklayabilirsiniz.
Aynı uygulamanın pencereleri taskbar'da otomatik gruplanır.

### Kaldırma

```bash
rm -rf ~/.local/lib/imajviewer ~/.local/bin/imajviewer \
      ~/.local/share/applications/imajviewer.desktop \
      ~/.local/share/icons/hicolor/64x64/apps/imajviewer.png
```

## Windows Kurulum

### Seçenek 1 — Inno Setup Installer (Önerilen)

`dist/imajviewer_setup_1.0.0.exe` dosyasını çift tıklayarak kurun. Yönetici yetkisi ister.

Kurulum şunları yapar:
- Program Files altına kurulum
- Başlat menüsü kısayolu
- İsteğe bağlı masaüstü kısayolu
- Kayıt defterine dosya ilişkilendirmeleri (PNG, JPG, JPEG, WebP, BMP, GIF)
- Kaldırma desteği (Ayarlar > Uygulamalar)

### Seçenek 2 — MSIX Paketi

`build\windows\x64\runner\Release\imajviewer.msix` dosyasını PowerShell ile kurun:

```powershell
Add-AppxPackage -Path "build\windows\x64\runner\Release\imajviewer.msix"
```

> **Not:** MSIX imzalı değildir. Kurulum için Windows Developer Mode açık olmalıdır
> (Ayarlar > Geliştiriciler için > Geliştirici Modu).

### Seçenek 3 — Portable (Kendin Derle)

| Gereksinim | Açıklama |
|---|---|
| [Flutter SDK](https://docs.flutter.dev/get-started/install/windows) | stable channel |
| Visual Studio 2022 Build Tools | "Desktop development with C++" iş yükü |
| Windows Developer Mode | Ayarlar > Geliştiriciler için > Geliştirici Modu |

```powershell
git clone https://git.softmediadesign.com/git_alhan/imajviewer.git
cd imajviewer
flutter pub get
flutter build windows --release
```

Çıktı: `build\windows\x64\runner\Release\` dizini. `imajviewer.exe` ile birlikte tüm DLL'ler burada — taşınabilir, başka makinelere kopyalanabilir.

### Installer'ı Yeniden Oluşturma

```powershell
flutter pub get
flutter build windows --release
"C:\ProgramData\chocolatey\bin\ISCC.exe" windows\installer.iss
```

Çıktı: `dist\imajviewer_setup_1.0.0.exe`

## Klavye / Fare Kısayolları

| Etkileşim | Eylem |
|---|---|
| Sol tık + sürükle | Pan |
| Fare tekerleği | Zoom (imleç merkezli) |
| Sol çift tık | Fill / Fit geçişi |
| Sağ tık + dikey sürükle | Contrast (0.0 – 2.0) |
| Ctrl + Sağ tık + dikey sürükle | Saturation (0.0 – 2.0) |
| Ctrl+Shift + Sağ tık + dikey sürükle | Brightness (-100 – 100) |
| Shift + Sağ tık + dikey sürükle | Rotate (serbest) |
| Sağ çift tık | Reset (tüm efektler) |
| Ctrl + O | Dosya aç |
| Ctrl + Tab / Ctrl + Shift + Tab | Sonraki / önceki resim |

## CI / Otomatik Build

Gitea Actions ile Windows build ve Inno Setup installer otomatik oluşturulur:

- **Trigger:** `main` dalına push
- **İş akışı:** `.gitea/workflows/build-windows.yml`
- **Çıktı:** `imajviewer.exe` + tüm DLL'ler, `imajviewer_setup_*.exe`
- **Tag bazlı release:** `v*` tag'i push'lanırsa Gitea Release oluşturulur (`GITEA_TOKEN` gerekli)

## Sistem Gereksinimleri — Donanım Hızlandırma (VM önerisi)

Uygulama yazılımsal render (llvmpipe) altında çalışır, ancak efekt sürüklemesi
büyük görsellerde kare atlayabilir. Sanal makinede akıcı kullanım için:

- **virtio-gpu + VirGL**: QEMU/libvirt'ta `virtio-vga-gl` / `virtio-gpu-gl`
  (mesa VirGL yoluyla hızlandırılmış GL). `/dev/dri` görünür hale gelir,
  llvmpipe yerine donanım render'ı kullanılır.
- **PCIe Passthrough**: gerçek GPU'nun VM'e bağlanması (en yüksek performans).

## Geliştirme

Flutter SDK gereklidir.

```bash
flutter pub get
flutter build linux    # Linux
flutter build windows  # Windows
```

### .deb paketini güncelleme

```bash
flutter build linux --release
bash dist/rebuild-deb.sh
```

## Lisans

MIT
