vgtkRust 實(shí)現(xiàn)的桌面 UI 框架
vgtk 是 Rust 編寫的聲明式桌面 UI 框架,內(nèi)置了 GTK 和 Gtk-rs。
示例
use vgtk::{ext::*, gtk, run, Component, UpdateAction, VNode};
use vgtk::lib::{gtk::*, gio::ApplicationFlags};
#[derive(Clone, Default, Debug)]
struct Model {
counter: usize,
}
#[derive(Clone, Debug)]
enum Message {
Inc,
Exit,
}
impl Component for Model {
type Message = Message;
type Properties = ();
fn update(&mut self, message: Message) -> UpdateAction<Self> {
match message {
Message::Inc => {
self.counter += 1;
UpdateAction::Render
}
Message::Exit => {
vgtk::quit();
UpdateAction::None
}
}
}
fn view(&self) -> VNode<Model> {
gtk! {
<Application::new_unwrap(None, ApplicationFlags::empty())>
<Window border_width=20 on destroy=|_| Message::Exit>
<HeaderBar title="inc!" show_close_button=true />
<Box spacing=10 halign=Align::Center>
<Label label=self.counter.to_string() />
<Button label="inc!" image="add" always_show_image=true
on clicked=|_| Message::Inc />
</Box>
</Window>
</Application>
}
}
}
fn main() {
std::process::exit(run::<Model>());
}
特性
- 受 Elm 架構(gòu)、Redux 和 Yew 啟發(fā),采用了簡潔、實(shí)用的組件模型
- 采用了一種聲明式 DSL,用于組合受 React 和 JSX 啟發(fā)的 GTK 小部件,使用虛擬“DOM”差異進(jìn)行有效更新
- 完全跨平臺(tái),具有適用于 Linux、Windows 和 macOS 的原生外觀
- 無需依賴嵌入式瀏覽器引擎
- 基于 Rust 的
Future構(gòu)建,使用 GLib 的事件循環(huán),提供了與 GTK 事件模型干凈集成的 async/await
評(píng)論
圖片
表情
