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:
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Report a bug to help us improve
|
||||
title: "[Bug] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Open '...'
|
||||
2. Click on '...'
|
||||
3. See error
|
||||
|
||||
**Expected behavior**
|
||||
What you expected to happen.
|
||||
|
||||
**Screenshots / screen recording**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Environment**
|
||||
- OS / distro: [e.g. Ubuntu 24.04, Windows 11]
|
||||
- imajViewer version: [e.g. 1.1.0 — from `pubspec.yaml` or release name]
|
||||
- Desktop environment / GPU: [e.g. XFCE + llvmpipe, or NVIDIA driver]
|
||||
|
||||
**Additional context**
|
||||
Anything else relevant (log output, image that triggers the bug, etc.)
|
||||
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for imajViewer
|
||||
title: "[Feature] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem?**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
Other approaches or workarounds you've tried.
|
||||
|
||||
**Additional context**
|
||||
Screenshots, mockups, or any other context about the feature request.
|
||||
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
18
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
## Description
|
||||
|
||||
<!-- What does this PR do? What problem does it solve? -->
|
||||
|
||||
## Related issue
|
||||
|
||||
<!-- Link the issue this PR closes, e.g. Closes #12 -->
|
||||
|
||||
## Changes
|
||||
|
||||
- [ ] Feature / fix implemented
|
||||
- [ ] `flutter test` passes
|
||||
- [ ] `flutter analyze` shows no new issues
|
||||
- [ ] Changelog updated (if user-facing change)
|
||||
|
||||
## Screenshots (if applicable)
|
||||
|
||||
<!-- Before/after or new UI -->
|
||||
113
.github/workflows/build.yml
vendored
Normal file
113
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
name: Build & Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
tags: ['v*']
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-linux:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
|
||||
- name: Install packaging tools
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y patchelf fakeroot dpkg
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
|
||||
- name: Build Linux release
|
||||
run: flutter build linux --release
|
||||
|
||||
- name: Build .deb package
|
||||
run: bash dist/rebuild-deb.sh
|
||||
|
||||
- name: Upload .deb artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: imajviewer-linux
|
||||
path: dist/imajviewer_*.deb
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
|
||||
- name: Build Windows release
|
||||
run: flutter build windows --release
|
||||
|
||||
- name: Install Inno Setup
|
||||
run: |
|
||||
choco install innosetup --no-progress -y
|
||||
|
||||
- name: Sync version from pubspec.yaml
|
||||
shell: pwsh
|
||||
run: |
|
||||
$version = (Select-String -Path pubspec.yaml -Pattern '^version:\s*([0-9]+\.[0-9]+\.[0-9]+)').Matches[0].Groups[1].Value
|
||||
(Get-Content windows/installer.iss -Raw) -replace '#define MyAppVersion "[^"]+"', "#define MyAppVersion `"$version`"" | Set-Content windows/installer.iss
|
||||
Write-Host "Inno Setup version: $version"
|
||||
|
||||
- name: Build Inno Setup installer
|
||||
shell: cmd
|
||||
run: |
|
||||
"C:\ProgramData\chocolatey\bin\ISCC.exe" windows\installer.iss
|
||||
|
||||
- name: Upload installer artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: imajviewer-windows
|
||||
path: |
|
||||
build/windows/x64/runner/Release/
|
||||
dist/imajviewer_setup_*.exe
|
||||
|
||||
create-release:
|
||||
needs: [build-linux, build-windows]
|
||||
runs-on: ubuntu-latest
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- name: Download Linux artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: imajviewer-linux
|
||||
path: release-artifacts
|
||||
|
||||
- name: Download Windows artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: imajviewer-windows
|
||||
path: release-artifacts/windows
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
name: "imajViewer ${{ github.ref_name }}"
|
||||
body: |
|
||||
imajViewer ${{ github.ref_name }}
|
||||
|
||||
See the [changelog](CHANGELOG.md) for details.
|
||||
|
||||
### Downloads
|
||||
- Linux: `.deb` package (Ubuntu/Debian)
|
||||
- Windows: Inno Setup installer
|
||||
files: |
|
||||
release-artifacts/imajviewer_*.deb
|
||||
release-artifacts/windows/dist/imajviewer_setup_*.exe
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -44,10 +44,9 @@ app.*.map.json
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
|
||||
# Distribution binaries — only keep under dist/
|
||||
# Distribution binaries — release assets, not tracked in git
|
||||
*.deb
|
||||
*.tar.gz
|
||||
*.exe
|
||||
!dist/*.deb
|
||||
!dist/*.exe
|
||||
deb/usr/lib/imajviewer/
|
||||
release/
|
||||
35
CHANGELOG.md
Normal file
35
CHANGELOG.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to imajViewer are documented in this file.
|
||||
|
||||
## [1.1.0] - 2026-08-06
|
||||
|
||||
### Fixed
|
||||
- `Ctrl+Q` now closes the window reliably (`onKeyEvent` rework)
|
||||
- Pan freeze regression on effect-applied images (root cause analysis)
|
||||
|
||||
### Added
|
||||
- Navigation arrows (visible on hover)
|
||||
- Settings window: folder sorting by time/name, print, shortcut info
|
||||
- Print support (printing package, A4 fit)
|
||||
- Title bar hover transparency
|
||||
- Shader warmup — right-click effects no longer stutter on first use
|
||||
|
||||
## [1.0.1] - 2026-07-27
|
||||
|
||||
### Fixed
|
||||
- Zoom/pan issues on large images
|
||||
- Image provider memoize — repeated opens no longer reload from disk
|
||||
|
||||
### Changed
|
||||
- Version now sourced from `pubspec.yaml` (single source of truth)
|
||||
|
||||
## [1.0.0] - 2026-07-22
|
||||
|
||||
### Added
|
||||
- Initial release: ultra-lightweight image viewer
|
||||
- Formats: PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP
|
||||
- Pan (left drag), zoom (wheel, cursor-centered), fill/fit toggle (double click)
|
||||
- Contrast / saturation / brightness / rotate gestures
|
||||
- Drag & drop, window position memory, set-as-default-viewer
|
||||
- Linux (.deb) and Windows (setup.exe) installers
|
||||
64
CODE_OF_CONDUCT.md
Normal file
64
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity and
|
||||
orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances
|
||||
of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
alhan@softmediadesign.com. All complaints will be reviewed and investigated
|
||||
promptly and fairly.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
55
CONTRIBUTING.md
Normal file
55
CONTRIBUTING.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# Contributing to imajViewer
|
||||
|
||||
Thanks for taking the time to contribute! 🎉
|
||||
|
||||
## Development setup
|
||||
|
||||
- [Flutter SDK](https://docs.flutter.dev/get-started/install) (stable channel)
|
||||
- Linux: GTK dev libraries (`libgtk-3-dev`, `ninja-build`, `clang`, `cmake`)
|
||||
- Windows: Visual Studio 2022 Build Tools with "Desktop development with C++"
|
||||
|
||||
```bash
|
||||
flutter pub get
|
||||
flutter build linux # or: flutter build windows --release
|
||||
```
|
||||
|
||||
## Code style
|
||||
|
||||
- Follow `flutter_lints` (see `analysis_options.yaml`)
|
||||
- Keep changes minimal and focused — no drive-by refactors
|
||||
- Use existing patterns in `lib/` (services, widgets, screens)
|
||||
|
||||
## Tests
|
||||
|
||||
Run the test suite before opening a PR:
|
||||
|
||||
```bash
|
||||
flutter test
|
||||
```
|
||||
|
||||
## Commit conventions
|
||||
|
||||
We use conventional commit prefixes:
|
||||
|
||||
- `feat:` — new feature
|
||||
- `fix:` — bug fix
|
||||
- `perf:` — performance improvement
|
||||
- `build:` — build/packaging/CI changes
|
||||
- `docs:` — documentation only
|
||||
|
||||
## Pull request process
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a branch: `git checkout -b fix/describe-the-fix`
|
||||
3. Make your changes, run `flutter test`
|
||||
4. Commit with a conventional message
|
||||
5. Open a PR against `main` and describe what you changed and why
|
||||
|
||||
## Reporting bugs
|
||||
|
||||
Open an issue using the bug report template. Include:
|
||||
|
||||
- imajViewer version (from `pubspec.yaml` or the release name)
|
||||
- OS and desktop environment
|
||||
- Steps to reproduce
|
||||
- Expected vs. actual behavior
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Alhan
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
215
README.md
215
README.md
@@ -1,162 +1,113 @@
|
||||
# imajViewer
|
||||
|
||||
Ultra hafif görüntü izleyici. Flutter ile yazıldı — Linux & Windows desteği.
|
||||
[](LICENSE)
|
||||
[](https://github.com/alhan/imajviewer/actions/workflows/build.yml)
|
||||
[](https://github.com/alhan/imajviewer/releases/latest)
|
||||
|
||||
## Özellikler
|
||||
Ultra-lightweight image viewer written in Flutter — Linux & Windows.
|
||||
|
||||
- **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
|
||||
- **Gezinme okları:** Sol/sağ alt köşede, mouse resme girince görünür (hover'da kırmızı)
|
||||
- **Ayarlar (gear):** Title bar'da; klasör sıralaması (zamana/isme göre), yazdırma, kısayollar
|
||||
- **Yazdırma:** Ayarlar penceresinden resmi yazıcıya gönderir (A4, sığdır)
|
||||
- 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
|
||||
## Features
|
||||
|
||||
**Flutter SDK gerekmez** — `dist/` dizininde hazır .deb paketi gelir.
|
||||
- **Formats:** PNG, JPEG, JFIF, WebP, BMP, GIF, WBMP
|
||||
- **Pan:** Left drag
|
||||
- **Zoom:** Mouse wheel (cursor-centered; viewport-centered in rotate mode)
|
||||
- **Fill/Fit toggle:** Double left click
|
||||
- **Contrast:** Right drag + vertical move
|
||||
- **Saturation:** Ctrl + Right drag + vertical move
|
||||
- **Brightness:** Ctrl+Shift + Right drag + vertical move
|
||||
- **Rotate:** Shift + Right drag + vertical move (~100px = 90°)
|
||||
- **Reset (all effects):** Double right click
|
||||
- **Navigation arrows:** bottom corners, visible on hover
|
||||
- **Settings (gear):** sort by time/name, print, shortcut info
|
||||
- **Print:** send the image to a printer (A4, fit)
|
||||
- Drag & drop to open images
|
||||
- Window size/position memory (JSON persistence)
|
||||
- Set as default image viewer
|
||||
- Cascade placement for new windows
|
||||
- Taskbar grouping (Linux: `StartupWMClass`)
|
||||
|
||||
### .deb paketi ile kurulum (Önerilen)
|
||||
## Install
|
||||
|
||||
### Linux (.deb, recommended)
|
||||
|
||||
No Flutter SDK needed — grab the latest `.deb` from the
|
||||
[Releases page](https://github.com/alhan/imajviewer/releases/latest):
|
||||
|
||||
```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
|
||||
sudo dpkg -i imajviewer_*_amd64.deb
|
||||
sudo apt-get install -f # install missing dependencies, if any
|
||||
```
|
||||
|
||||
### install.sh ile kurulum (kaynaktan/build)
|
||||
After install, open an image with `xdg-open <file>` or double-click it.
|
||||
|
||||
```bash
|
||||
git clone https://git.softmediadesign.com/git_alhan/imajviewer.git
|
||||
cd imajviewer
|
||||
./install.sh
|
||||
```
|
||||
### Windows (installer)
|
||||
|
||||
Kurulum sonrası `xdg-open <dosya>` ile açabilir veya dosyaya çift tıklayabilirsiniz.
|
||||
Aynı uygulamanın pencereleri taskbar'da otomatik gruplanır.
|
||||
Download `imajviewer_setup_*.exe` from the
|
||||
[Releases page](https://github.com/alhan/imajviewer/releases/latest) and run it.
|
||||
The installer:
|
||||
|
||||
### Kaldırma
|
||||
- Installs to Program Files
|
||||
- Adds a Start Menu shortcut (optional desktop shortcut)
|
||||
- Registers file associations (PNG, JPG, JPEG, WebP, BMP, GIF)
|
||||
- Supports uninstall (Settings > Apps)
|
||||
|
||||
```bash
|
||||
rm -rf ~/.local/lib/imajviewer ~/.local/bin/imajviewer \
|
||||
~/.local/share/applications/imajviewer.desktop \
|
||||
~/.local/share/icons/hicolor/64x64/apps/imajviewer.png
|
||||
```
|
||||
### Build from source
|
||||
|
||||
## 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 |
|
||||
| Requirement | Notes |
|
||||
|---|---|
|
||||
| [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) |
|
||||
| Sol / Sağ ok | Önceki / sonraki resim |
|
||||
| Ctrl + Q | Pencereyi kapat |
|
||||
| Ctrl + Shift + Q | Tüm pencereleri kapat |
|
||||
|
||||
## 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.
|
||||
| [Flutter SDK](https://docs.flutter.dev/get-started/install) | stable channel |
|
||||
| Linux: GTK dev libs | `libgtk-3-dev`, `ninja-build`, `clang`, `cmake` |
|
||||
| Windows: VS 2022 Build Tools | "Desktop development with C++" workload |
|
||||
|
||||
```bash
|
||||
flutter pub get
|
||||
flutter build linux # Linux
|
||||
flutter build windows # Windows
|
||||
flutter build windows --release # Windows
|
||||
```
|
||||
|
||||
### .deb paketini güncelleme
|
||||
Linux output: `build/linux/x64/release/bundle/`
|
||||
Windows output: `build\windows\x64\runner\Release\` (portable: copy the whole
|
||||
folder including `imajviewer.exe` and all DLLs).
|
||||
|
||||
## Keyboard & Mouse Shortcuts
|
||||
|
||||
| Interaction | Action |
|
||||
|---|---|
|
||||
| Left drag | Pan |
|
||||
| Mouse wheel | Zoom (cursor-centered) |
|
||||
| Double left click | Fill / Fit toggle |
|
||||
| Right drag + vertical | Contrast (0.0 – 2.0) |
|
||||
| Ctrl + Right drag + vertical | Saturation (0.0 – 2.0) |
|
||||
| Ctrl+Shift + Right drag + vertical | Brightness (-100 – 100) |
|
||||
| Shift + Right drag + vertical | Rotate (free) |
|
||||
| Double right click | Reset (all effects) |
|
||||
| Left / Right arrow | Previous / next image |
|
||||
| Ctrl + Q | Close window |
|
||||
| Ctrl + Shift + Q | Close all windows |
|
||||
|
||||
## CI / Releases
|
||||
|
||||
GitHub Actions builds Linux `.deb` and Windows installer on every push to
|
||||
`main`. Pushing a `v*` tag creates a GitHub Release with both installers as
|
||||
assets.
|
||||
|
||||
## Development
|
||||
|
||||
```bash
|
||||
flutter pub get
|
||||
flutter analyze
|
||||
flutter test
|
||||
```
|
||||
|
||||
To rebuild the `.deb` locally:
|
||||
|
||||
```bash
|
||||
flutter build linux --release
|
||||
bash dist/rebuild-deb.sh
|
||||
```
|
||||
|
||||
## Lisans
|
||||
## License
|
||||
|
||||
MIT
|
||||
[MIT](LICENSE)
|
||||
|
||||
26
SECURITY.md
Normal file
26
SECURITY.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a vulnerability
|
||||
|
||||
Please do **not** open a public issue for security vulnerabilities.
|
||||
|
||||
Report them privately via GitHub's Security Advisories:
|
||||
|
||||
1. Go to the repository's **Security** tab
|
||||
2. Click **Report a vulnerability**
|
||||
3. Describe the issue, affected versions, and steps to reproduce
|
||||
|
||||
You can also email the maintainer directly: alhan@softmediadesign.com
|
||||
|
||||
We will acknowledge reports within 5 business days and keep you informed as the
|
||||
issue is triaged and fixed. Please allow time for a fix to be released before
|
||||
disclosing the vulnerability publicly.
|
||||
|
||||
## Supported versions
|
||||
|
||||
| Version | Supported |
|
||||
|---------|--------------------|
|
||||
| latest | ✅ Fully supported |
|
||||
| older | ❌ Best effort only |
|
||||
|
||||
We recommend always running the latest release.
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
[{"family":"MaterialIcons","fonts":[{"asset":"fonts/MaterialIcons-Regular.otf"}]}]
|
||||
Binary file not shown.
@@ -1 +0,0 @@
|
||||
{"format-version":[1,0,0],"native-assets":{}}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
{"app_name":"imajviewer","version":"1.0.0","build_number":"1","package_name":"imajviewer"}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
{"format-version":[1,0,0],"native-assets":{}}
|
||||
BIN
dist/imajviewer_setup_1.1.0.exe
vendored
BIN
dist/imajviewer_setup_1.1.0.exe
vendored
Binary file not shown.
@@ -1,7 +1,11 @@
|
||||
# imajViewer — Dokümantasyon İndeksi
|
||||
|
||||
| Tarih | Dosya | Konu |
|
||||
|---|---|---|
|
||||
||---|---|---|
|
||||
| 2026-08-06 | [rapor-github-acik-kaynak.md](rapor-github-acik-kaynak.md) | **Rapor** — GitHub açık kaynak hazırlığı (gereksinimler, riskler, plan) |
|
||||
| 2026-08-06 | [Implementation.md](Implementation.md) | Teknik uygulama dokümanı (kökten taşındı) |
|
||||
| 2026-08-06 | [PRD.md](PRD.md) | Product Requirements Document (kökten taşındı) |
|
||||
| 2026-08-06 | [update_plan_01.md](update_plan_01.md) | Pan sınırlama & zoom merkezi sorunu (kökten taşındı) |
|
||||
| 2026-08-06 | [rapor-pan-kilitleme-nuks.md](rapor-pan-kilitleme-nuks.md) | **Rapor** — efekt uygulanmış görselde pan sırasında kilitlenme nüksü (analiz, açık sorular) |
|
||||
| 2026-08-06 | [rapor-gezinme-ayarlar-print.md](rapor-gezinme-ayarlar-print.md) | **Rapor** — gezinme okları (hover), ayarlar/gear (sıralama), yazdırma (printing paketi) |
|
||||
| 2026-08-06 | [rapor-sag-tik-donma-analizi.md](rapor-sag-tik-donma-analizi.md) | **Rapor** — sağ tuş efektlerinde donma analizi + slider UI değerlendirmesi |
|
||||
|
||||
88
docs/rapor-github-acik-kaynak.md
Normal file
88
docs/rapor-github-acik-kaynak.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Rapor — imajViewer'ı GitHub'da Açık Kaynak Yapmak
|
||||
|
||||
> Tarih: 2026-08-06
|
||||
> Konu: GitHub'a açık kaynak repo koymak için gerekenler + mevcut repo durumu + geçmiş/silinme sorusu + "pro" hale getirme planı
|
||||
|
||||
## 1. Sorunun cevabı: dosya silersem GitHub'a eski dosyalar gider mi?
|
||||
|
||||
**Çalışma ağacından gider, geçmişten GİTMEZ.**
|
||||
|
||||
- Aynı repo geçmişini (aynı commit zincirini) GitHub'a push edersen: sildiğin dosyalar
|
||||
son sürümde (en son commit'te) görünmez, ama **git geçmişindeki eski commit'lerde
|
||||
aynen durur**. GitHub'da eski commit'lere tıklayan herkes o dosyaları görür ve indirebilir.
|
||||
- Üstelik bu geçmiş 391 MB binary taşıyor (aşağıda detay). GitHub'a geçmişle gitmek hem
|
||||
bu yükü hem de "eski dosyalar hâlâ orada" sorununu getirir.
|
||||
- **Öneri:** GitHub için geçmişsiz / tek commit'li temiz başlangıç yap. Ya `git init` ile
|
||||
yeni repo (sıfır geçmiş), ya da squash ile tek commit. O zaman ne sildiysen tamamen gider.
|
||||
|
||||
## 2. GitHub'a açık kaynak repo koymak için gerekenler (checklist)
|
||||
|
||||
| Öğe | Durum | Not |
|
||||
|---|---|---|
|
||||
| LICENSE dosyası | ❌ YOK | README'de "MIT" yazıyor ama kökte LICENSE dosyası yok. GitHub lisansı bunu algılamaz |
|
||||
| README | ⚠️ Var | Gitea URL'leri içeriyor, Türkçe, badge yok (detay: madde 4) |
|
||||
| CONTRIBUTING.md | ❌ YOK | Katkı kuralları (kod stili, test, PR süreci) |
|
||||
| CODE_OF_CONDUCT.md | ❌ YOK | GitHub topluluk standartları için beklenir |
|
||||
| SECURITY.md | ❌ YOK | Güvenlik açığı bildirim yolu (private advisory) |
|
||||
| CHANGELOG.md | ❌ YOK | 1.0.0 → 1.1.0 geçmişi yazılı değil |
|
||||
| CI (GitHub Actions) | ❌ YOK | Sadece `.gitea/workflows/` var — GitHub bunu ÇALIŞTIRMAZ, `.github/workflows/` gerekir |
|
||||
| Issue/PR template | ❌ YOK | `.github/ISSUE_TEMPLATE/` + `PULL_REQUEST_TEMPLATE.md` |
|
||||
| .gitignore | ✅ Var | İyi durumda (build/, .dart_tool/ ignore ediliyor) |
|
||||
| Repo metadata | ❌ | description + topics (image-viewer, flutter, linux, windows) + lisans seçimi |
|
||||
| Releases | ⚠️ | v1.1.0 tag + .deb/.exe asset'leri GitHub Releases'e taşınmalı |
|
||||
| FUNDING.yml | ❌ | Opsiyonel |
|
||||
|
||||
## 3. KRİTİK: Sızıntı / hijyen riskleri
|
||||
|
||||
1. **Gömülü token:** `git remote -v` çıktısında origin URL'si
|
||||
`https://git_alhan:1254baa3...@git.softmediadesign.com/...` — token URL'e gömülü.
|
||||
Bu dosya `.git/config`'te; push ile GitHub'a gitmez (config transfer edilmez).
|
||||
Ama GitHub'a yeni remote eklerken bu URL'yi yanlışlıkla kopyalamamaya dikkat.
|
||||
Token'ı Gitea'dan yenilemek en temizi.
|
||||
2. **Kişisel dosyalar repoda:** `imajviewer.desktop` (yerel .desktop, mode 600),
|
||||
`Implementation.md`, `PRD.md`, `update_plan_01.md`, `docs/session-*.md`,
|
||||
`docs/rapor-*.md` — iç geliştirme notları. Açık kaynak repo'da hepsi durmamalı.
|
||||
3. **Binary dosyalar git'te:** `deb/` (16 MB libflutter_linux_gtk.so vb. — build çıktısı)
|
||||
ve `dist/` (.deb, .exe — sürüm paketleri) git ile takip ediliyor. Binary'ler git'e
|
||||
girmez; release asset'i olur. `.gitignore`'da `*.deb`/`*.exe` var ama `!dist/*.deb`
|
||||
istisnası ve `deb/` dizini bunları açıkta bırakıyor.
|
||||
4. **Mutlak yol:** `pubspec.yaml` → `msix_config.logo_path: C:/projects/imajviewer/...`
|
||||
— yerel Windows yolu. GitHub runner'ında msix adımı kırılır; göreli yol olmalı.
|
||||
5. **Geçmiş 391 MB:** En büyük blob'lar: setup.exe 24 MB ×4 kopya, libflutter_linux_gtk.so
|
||||
16 MB, .deb'ler 8-11 MB ×8, tar.gz 9 MB. GitHub'da dosya limiti 100 MB — şu an
|
||||
geçmiyor ama repo 1 GB'a yaklaşırsa GitHub uyarır, şişkinlik de kötü görünür.
|
||||
|
||||
## 4. README düzeltmeleri
|
||||
|
||||
- Klon/curl komutlarındaki `git.softmediadesign.com` URL'leri GitHub URL'si olmalı
|
||||
- `.deb` kurulum adımındaki sürüm `1.0.0` yazılmış, güncel `1.1.0`
|
||||
- Türkçe → açık kaynak için İngilizce (veya TR+EN iki dilli) önerilir
|
||||
- Badge'ler (build status, license, release) + ekran görüntüsü (imajviewer.png var)
|
||||
- "Gitea Actions" bölümü → "GitHub Actions" olarak yeniden yazılmalı
|
||||
|
||||
## 5. "Pro" hale getirme planı (uygulama adımları, onay sonrası)
|
||||
|
||||
1. **Kök temizliği:** `imajviewer.desktop` sil; iç dokümanları (Implementation/PRD/
|
||||
update_plan/docs) taşı ya da sil — karar gerekiyor (aşağıda).
|
||||
2. **Binary'leri git'ten çıkar:** `git rm --cached deb/ dist/*.deb dist/*.exe`,
|
||||
`.gitignore`'u düzelt (deb/ tamamen ignore; dist/'te sadece rebuild-deb.sh kalsın).
|
||||
Not: `git rm --cached` sadece ileriye dönük temizler; geçmişteki 391 MB durur —
|
||||
tam temizlik için ya filter-repo ya da temiz başlangıç gerekir.
|
||||
3. **Lisans:** Köke `LICENSE` (MIT) ekle.
|
||||
4. **README'yi yeniden yaz:** İngilizce, GitHub linkleri, badge, screenshot.
|
||||
5. **Topluluk dosyaları:** CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md,
|
||||
CHANGELOG.md, `.github/` (issue/PR template + workflows/build-windows.yml).
|
||||
6. **CI'ı GitHub'a uyarla:** `.gitea/workflows/build-windows.yml` → `.github/workflows/`:
|
||||
`GITEA_TOKEN` → `GITHUB_TOKEN` (otomatik), release adımı
|
||||
`softprops/action-gh-release` ile GitHub Release + .deb/.exe asset.
|
||||
7. **pubspec.yaml:** `logo_path`'i göreli yap (CI'da msix kırılmasın).
|
||||
8. **GitHub'a aktarım:** Yeni boş GitHub repo → `git remote add github <url>` →
|
||||
temiz tek commit (squash/orphan) → `git push github main`. Gitea ayrı kalır.
|
||||
|
||||
## 6. Açık kararlar (senin onayın gerekiyor)
|
||||
|
||||
1. README dili: İngilizce mi, TR mi, iki dilli mi? (açık kaynak görünürlüğü için İngilizce önerilir)
|
||||
2. `docs/` ve kök dokümanlar: iç raporlar/session notları ne olacak? (yerel yedek alınır mı?)
|
||||
3. Geçmiş: temiz tek commit mi, yoksa tüm geçmiş GitHub'a taşınsın mı? (öneri: temiz tek commit)
|
||||
4. GitHub hesabı/org: repo hangi hesaba? Repo adı: `imajviewer` mi `imajViewer` mi?
|
||||
5. Lisans: MIT kesin mi? (README'de MIT yazıyor, dosya yok)
|
||||
@@ -1,10 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=imajViewer
|
||||
Comment=Ultra hafif görüntü izleyici
|
||||
Exec=imajviewer %F
|
||||
Icon=imajviewer
|
||||
Terminal=false
|
||||
Categories=Graphics;Viewer;RasterGraphics;
|
||||
MimeType=image/png;image/jpeg;image/webp;image/bmp;image/gif;image/jpg;image/vnd.wap.wbmp;
|
||||
StartupNotify=false
|
||||
@@ -7,7 +7,7 @@ msix_config:
|
||||
display_name: ImajViewer
|
||||
publisher_display_name: imajviewer
|
||||
identity_name: imajviewer.imajviewer
|
||||
logo_path: C:/projects/imajviewer/windows/runner/resources/app_icon.ico
|
||||
logo_path: windows/runner/resources/app_icon.ico
|
||||
install_certificate: false
|
||||
sign_msix: false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user