- egui adalah library GUI mode immediate (Immediate Mode) yang ditulis dengan Rust dan berjalan di lingkungan web maupun native
- Di web, egui dikompilasi ke WebAssembly dan dirender melalui WebGL, sementara di lingkungan native mendukung berbagai platform seperti Mac, Linux, dan Windows
- Diimplementasikan sepenuhnya dengan Rust murni tanpa DOM, HTML, JS, atau CSS
- Dirancang agar mudah digunakan, sangat portabel, dan memberikan performa cepat
Fitur utama
1. Mode immediate (Immediate Mode)
2. Kompatibilitas platform
- Web: berjalan melalui WebAssembly dan WebGL
- Native: mendukung Mac, Linux, Windows, Android, dan lainnya
- Dapat diintegrasikan dengan game engine (misalnya integrasi dengan Bevy)
3. Integrasi dengan ekosistem Rust
- Menyediakan framework resmi
eframe:
- Memungkinkan penulisan aplikasi web dan native dengan kode yang sama
- Dependensi ringan:
- egui hanya menggunakan dependensi minimal Rust seperti ab_glyph dan ahash
- Dependensi yang berat dipisahkan ke crate terpisah (seperti egui_extras)
Kemampuan utama
- Widget: tombol, slider, checkbox, radio button, pengeditan teks, color picker, dan lainnya
- Tata letak: mendukung horizontal, vertikal, berbasis kolom, dan pembungkusan baris otomatis
- Pengeditan teks: multiline, salin/tempel, dan dukungan emoji
- Jendela: dapat dipindah, diubah ukurannya, diminimalkan/ditutup
- Rendering: rendering teks dan bentuk dengan anti-aliasing
- Aksesibilitas: dukungan screen reader melalui integrasi AccessKit
Kelebihan dan kekurangan
- Kelebihan
- Kesederhanaan: GUI dapat dibuat dengan kode ringkas tanpa callback
- Portabilitas: dapat dijalankan di lingkungan web dan native dengan kode yang sama
- Kemudahan penggunaan: tidak ada masalah sinkronisasi antara status aplikasi dan status GUI
- Kekurangan
- Kompleksitas tata letak: karena sifat mode immediate, tata letak kompleks memerlukan pekerjaan tambahan
- Penggunaan CPU: karena seluruh tata letak harus dihitung di setiap frame, UI berskala besar dapat mengalami penurunan performa
Pengguna yang dituju
- Developer yang ingin cepat membuat GUI sederhana
- Pengguna yang ingin menambahkan GUI ke game engine atau proyek berbasis Rust
- Pembuat aplikasi yang mendukung lingkungan web dan native sekaligus
Penjelasan tambahan tentang mode immediate
- Berbeda dari retained mode berbasis callback, mode immediate memproses status secara langsung pada setiap frame
- Contoh:
if ui.button("Save").clicked() { save(); }
- Kelebihan: alur kode menjadi sederhana dan tidak ada masalah sinkronisasi status
- Kekurangan: perhitungan tata letak lebih kompleks dan dapat memengaruhi performa pada UI berskala besar
1 komentar
Komentar Hacker News
Mencoba memahami soal matematika menggunakan framework Rust, tetapi mengalami kesulitan karena siklus edit-compile-run terlalu panjang. Penasaran apakah ini bisa membaik jika proyek dipecah menjadi beberapa modul
Jika browser tidak mendukung subpixel rendering, pustaka rendering UI berbasis canvas akan kalah dibandingkan yang berbasis DOM kecuali pada perangkat beresolusi tinggi. Pustaka egui juga menyadari masalah ini
Halaman demo yang dikompilasi di lingkungan browser memang mengesankan secara teknis, tetapi sulit membayangkan kemungkinan aplikasi yang dibuat dengan egui. Penasaran apakah ada contoh menarik yang memanfaatkan egui
Saat Natal, melakukan hal naughty dengan memaksa unwrap
Optionalih-alih pattern matching sehingga memunculkan error. Terjadi di Brave versi mobileDukungan internasionalisasi terbatas. Misalnya, saat menempelkan "hello" dalam bahasa Arab, yang muncul adalah kotak-kotak
Penasaran apa yang dimaksud dengan "immediate mode". Cara menambahkan widget ke UI menggunakan
.add(). Penasaran apakah builder API yang lancar untuk widget seperti ini yang membuatnya menjadi "immediate mode"Penasaran bagaimana cara men-debug antarmuka seperti ini di browser web. Apakah bisa di-debug seperti JavaScript atau C++ WebAssembly
Ada masalah pada pengubahan ukuran jendela. Pada contoh "Highlighting", saat mengklik area pegangan di sudut kanan bawah, panah diagonal berubah menjadi panah vertikal sehingga ukuran hanya bisa diubah secara vertikal. Di contoh bawaan lain juga terlihat seolah ukuran bisa diubah sekaligus secara vertikal dan horizontal, tetapi ternyata tidak bisa diubah secara vertikal
Respons input sangat lambat. Saat mengetik cepat, input tidak bisa mengimbangi. Pemilihan dan penyalinan teks juga tidak bisa dilakukan, sehingga ini menjadi masalah besar untuk implementasi GUI kustom. Semoga semua orang menikmati akhir tahun yang bahagia