- egui, Rust ile yazılmış anlık mod (Immediate Mode) GUI kütüphanesi olup web ve native ortamlarda çalışır
- Web tarafında WebAssembly’ye derlenir ve WebGL üzerinden render edilir; native tarafta ise Mac, Linux, Windows gibi çeşitli platformları destekler
- DOM, HTML, JS, CSS olmadan, yalnızca saf Rust ile uygulanmıştır
- Kullanımı kolay, yüksek taşınabilirlik sunan ve hızlı performans sağlayacak şekilde tasarlanmıştır
Başlıca özellikler
1. Anlık mod (Immediate Mode)
2. Platform uyumluluğu
- Web: WebAssembly ve WebGL üzerinden çalışır
- Native: Mac, Linux, Windows, Android ve diğerlerini destekler
- Oyun motorlarıyla entegre edilebilir (ör. Bevy ile entegrasyon)
3. Rust ekosistemiyle entegrasyon
- Resmî framework olan eframe sunulur
- Aynı kodla hem web hem de native uygulamalar yazılabilir
- Hafif bağımlılıklar:
- egui, Rust’un ab_glyph, ahash gibi yalnızca asgari bağımlılıklarını kullanır
- Ağır bağımlılıklar ayrı crate’lere bölünmüştür (egui_extras vb.)
Temel işlevler
- Widget’lar: butonlar, slider’lar, checkbox’lar, radio button’lar, metin düzenleme, renk seçici vb.
- Yerleşim: yatay, dikey, sütun tabanlı düzen ve otomatik satır kaydırma desteği
- Metin düzenleme: çok satırlı düzenleme, kopyala/yapıştır, emoji desteği
- Pencereler: taşıma, yeniden boyutlandırma, küçültme/kapatma
- Render: anti-aliasing uygulanmış metin ve şekil render etme
- Erişilebilirlik: AccessKit entegrasyonu ile ekran okuyucu desteği
Artılar ve eksiler
- Artılar
- Basitlik: callback olmadan sade kodla GUI yazılabilir
- Taşınabilirlik: aynı kodla web ve native ortamlarda çalıştırılabilir
- Kullanılabilirlik: uygulama durumu ile GUI durumu arasında senkronizasyon sorunu yoktur
- Eksiler
- Yerleşim karmaşıklığı: anlık modun doğası gereği karmaşık yerleşimler için ek çalışma gerekebilir
- CPU kullanımı: her karede tüm yerleşimin hesaplanması gerektiğinden büyük ölçekli UI’larda performans düşebilir
Hedef kullanıcılar
- Basit bir GUI’yi hızlıca yazmak isteyen geliştiriciler
- Rust tabanlı oyun motorlarına veya projelere GUI eklemek isteyen kullanıcılar
- Hem web hem de native ortamları destekleyen uygulamalar geliştirenler
Anlık mod hakkında ek açıklama
- Anlık mod, callback tabanlı retained mode’un aksine durumu her karede anında işler
- Örnek: if ui.button("Save").clicked() { save(); }
- Avantajı: kod akışı daha basit hale gelir ve durum senkronizasyonu sorunu olmaz
- Dezavantajı: yerleşim hesaplaması daha karmaşıktır ve büyük ölçekli UI’larda performansı etkileyebilir
1 yorum
Hacker News görüşleri
Rust framework'ünü kullanarak matematik problemlerini anlamaya çalıştım, ancak edit-compile-run döngüsü çok uzun olduğu için zorlandım. Projeyi modüllere ayırmanın bunu iyileştirip iyileştirmeyeceğini merak ediyorum
Tarayıcı subpixel rendering'i desteklemiyorsa, canvas tabanlı UI rendering kütüphaneleri yüksek çözünürlüklü cihazlar dışında DOM tabanlı olana kıyasla dezavantajlıdır. egui kütüphanesi de bu sorunun farkında
Tarayıcı ortamında derlenmiş demo sayfası teknik olarak etkileyici, ancak egui ile yapılmış uygulamaların olasılıklarını hayal etmek zor. egui kullanılarak yapılmış ilginç örnekler olup olmadığını merak ediyorum
Noel'de yaramazlık yapıp
Option'ı pattern matching yerine zorla unwrap ederek hataya neden oldum. Brave'in mobil sürümünde olduUluslararasılaştırma desteği sınırlı. Örneğin Arapça "hello" yapıştırıldığında kare kutular olarak görünüyor
"Immediate mode"un ne olduğunu merak ediyorum. Widget'ları UI'ye ekleme şekli
.add()kullanıyor. Bu widget'lar için akıcı bir builder API'si olmasının bunu "immediate mode" yaptığı anlamına gelip gelmediğini merak ediyorumWeb tarayıcısında bu tür arayüzlerin nasıl debug edileceğini merak ediyorum. JavaScript veya C++ WebAssembly gibi debug edilebiliyor mu?
Pencere yeniden boyutlandırmada bir sorun var. "Highlighting" örneğinde sağ alt köşedeki tutma alanına tıklayınca çapraz ok dikey oka dönüşüyor ve yalnızca dikey olarak yeniden boyutlandırma yapılabiliyor. Diğer temel örneklerde de hem dikey hem yatay aynı anda yeniden boyutlandırma mümkünmüş gibi görünüyor, ancak dikey olarak ayarlanamıyor
Girdi tepkisi çok yavaş. Hızlı yazınca giriş yetişemiyor. Metin seçme ve kopyalama mümkün değil; bu da özel GUI uygulaması için büyük bir sorun. Herkese mutlu yıl sonları dilerim