Trunçgil Draw, vektör ve raster grafik düzenleme yeteneklerini prosedürel içerik oluşturma ile birleştiren, açık kaynaklı ve güçlü bir grafik motorudur. Bu proje, sanatçılar ve geliştiriciler için esnek, düğüm tabanlı (node-based) bir iş akışı sunar.
Trunçgil Draw, Rust performansını WebAssembly (WASM) teknolojisiyle tarayıcıya taşır ve Svelte ile geliştirilmiş modern bir kullanıcı arayüzü sunar.
Projeyi geliştirmek ve çalıştırmak için aşağıdaki araçların sisteminizde kurulu olması gerekmektedir:
- Rust: Sistemin programlama dili (Backend ve Core Logic).
- Kurulum: https://rustup.rs/
- Node.js: Frontend bağımlılıkları ve geliştirme sunucusu için (LTS sürümü önerilir).
- Kurulum: https://nodejs.org/
- wasm-pack: Rust kodunu WebAssembly'e derlemek için gereklidir.
- Kurulum:
cargo install wasm-pack
- Kurulum:
- Geliştirme Araçları (Linux için):
build-essential,libssl-dev,pkg-configgibi temel paketler.
Aşağıdaki adımları takiperek geliştirme ortamınızı kurabilirsiniz.
Gerekli sistem paketlerini ve araçları yüklediğinizden emin olun.
# Ubuntu/Debian için örnek hazırlık
sudo apt update
sudo apt install build-essential libssl-dev pkg-configFrontend klasörüne giderek Node.js bağımlılıklarını yükleyin.
cd frontend
npm installGeliştirme sunucusunu başlatın. Bu komut hem Rust kodunu WASM'a derleyecek hem de yerel bir web sunucusu başlatacaktır.
# Gerekli Rust araçlarını yükleyin (eğer yüklü değilse)
cargo install cargo-watch
# frontend klasörü içerisindeyken
npm startSunucu başladığında tarayıcınızda http://localhost:5173 (varsayılan Vite portu) üzerinden uygulamaya erişebilirsiniz.
Proje, genişletilebilir ve modüler bir mimari ile tasarlanmıştır. Aşağıda projenin dosya yapısı görselleştirilmiştir:
truncgil-draw/
├── editor/ # 🧠 Çekirdek Uygulama (Rust - İş Mantığı)
│ ├── src/ # Ana uygulama mantığı
│ ├── messages/ # Mesaj tabanlı mimari (Event Bus)
│ └── dispatcher/ # Mesaj dağıtıcıları
├── frontend/ # 🎨 Kullanıcı Arayüzü (Svelte + TypeScript)
│ ├── src/ # UI bileşenleri
│ ├── wasm/ # WebAssembly köprüsü (Rust <-> JS)
│ └── assets/ # Görseller ve ikonlar
├── node-graph/ # 🕸️ Grafik Motoru
│ ├── nodes/ # Efekt ve işlem düğümleri
│ └── graph-craft/ # Grafik derleme mantığı
├── libraries/ # 📚 Yardımcı Rust Kütüphaneleri
└── desktop/ # 🖥️ Masaüstü Uygulaması (Platform Wrapper)
Proje, modern bir "monorepo" yapısına sahiptir ve Rust (Cargo) workspace çalışma alanı olarak düzenlenmiştir. Aşağıda temel dizinler ve işlevleri detaylandırılmıştır:
Uygulamanın beyni burasıdır. Tüm iş mantığı, durum yönetimi ve araçlar burada Rust ile geliştirilmiştir.
src/lib.rs: Editör kütüphanesinin giriş noktası.src/messages/: Uygulamanın mesaj tabanlı mimarisini (Message Bus) barındırır. UI olayları ve dahili işlemler burada mesajlar aracılığıyla yönetilir.src/dispatcher/: Mesajları ilgili işleyicilere (handler) dağıtan mekanizma.src/application.rs: Uygulama durumunu tutan ana yapı.
Tarayıcıda çalışan Web arayüzüdür. Svelte framework'ü ve TypeScript kullanılır.
src/: Svelte bileşenleri ve TypeScript kodları.src/components/: Paneller, butonlar, katman listesi gibi UI bileşenleri.wasm/: Rust kodunun (editor/) WebAssembly olarak paketlendiği ve JS ile köprü kurduğu katman.assets/: İkonlar ve statik dosyalar.vite.config.ts: Frontend derleme ve sunucu ayarları (Vite).
Trunçgil Draw'un en güçlü yanı olan düğüm tabanlı (node-based) görüntü işleme motorudur.
graph-craft/: Grafiğin derlenmesi ve yapılandırılması ile ilgili mantık.graphene-cli/: Grafik motorunu komut satırından test etmek için kullanılan araç.nodes/: Her biri belirli bir işlemi (bulanıklaştırma, karıştırma, dönüştürme vb.) yapan düğüm uygulamaları.interpreted-executor/: Grafiği çalışma zamanında yorumlayıp çalıştıran yürütücü.
Proje genelinde tekrar kullanılan özelleştirilmiş Rust kütüphaneleri.
dyn-any/: Dinamik tipleme ve veri taşıma yardımcıları.rawkit/: RAW fotoğraf işleme yetenekleri.math-parser/: Matematiksel ifadeleri ayrıştırmak için kullanılan modül.
Web uygulamasını yerel bir masaüstü uygulamasına (Windows, macOS, Linux) dönüştüren sarmalayıcı (wrapper) katmanıdır.
- Tauri/Wry benzeri bir yapı kullanarak web içeriğini yerel pencerede gösterir.
Projenin tanıtım ve dokümantasyon web sitesidir. Genellikle Hugo gibi statik site oluşturucularla çalışır.
- Kod Standartları: Rust için
cargo fmtveclippy, Frontend içineslintveprettierkullanın. - Mesaj Mimarisi: Yeni bir özellik eklerken,
editor/src/messagesaltındaki mesaj hiyerarşisine uygun hareket edin. - Node Sistemi: Yeni bir görüntü efekti ekleyecekseniz, bunu
node-graph/nodesaltında yeni bir node olarak tanımlayın.
Trunçgil Teknoloji tarafından geliştirilmektedir.