Rustミリしらです
SlintというRust(やその他いろいろ)で動くGUIライブラリがあります
https://slint.dev/
そのSlintをちょっと触っての備忘録です
https://slint.dev/releases/1.3.2/docs/tutorial/rust
Slintのチュートリアルを試したのですが、このチュートリアルではSlintを一貫してRustのソースファイル(.rs)にRustのマクロとして記述していきます
例えばHelloWorldではこのように
fn main() {
MainWindow::new().unwrap().run().unwrap();
}
slint::slint! {
export component MainWindow inherits Window {
preferred-width: 400px;
preferred-height: 200px;
Text {
text: "hello world";
color: white;
font-size: 24px;
}
}
}
}
なります
ちなみに背景が黒いのはWindowsをダークモードにしてると勝手にこうなるようです
勝手にこうしない方法もたしかあるので大丈夫です
Rustのほうに全部書いていくのがなんとなく嫌だったのですが、Slintだけ別ファイルに記述していけるらしいのでそれを試します
やってみる
まずビルドスクリプト?を作ります。ここではCargo.tomlと同じ階層にbuild.rsという名前で作成することにしました。
次にCargo.tomlを編集します
[package]
...
build = "build.rs"
...
[build-dependencies]
slint-build = "1.3.2"
packageの項目でbuild.rsを使うよう指定してあげて、ビルドスクリプトの依存関係としてslint-buildというものを追加します。これが.slintファイルを使ってコンパイルするときに役立つらしい
次に.slintファイルを作成していきます
ここでは適当にCargo.tomlと同じ階層にui.slintという名前で作成
export component MainWindow inherits Window {
preferred-width: 400px;
preferred-height: 200px;
Text {
text: "hello world";
color: white;
font-size: 24px;
}
}
build.rsに戻って
fn main() {
slint_build::compile("ui.slint").unwrap();
}
と書きます
最後にmain.rsを修正します
slint::include_modules!();
fn main() {
MainWindow::new().unwrap().run().unwrap();
}
マクロで記述していたSlintはさっき別ファイルに移したので全部消して、1行目のslint::include_modules!();も書き忘れないようにします
文字通りのことをしてくれるのでしょう。英語読めませんが...
完成
ここまでいくとコンパイルが通るようになります
SlintどころかRustも全くわかっていないので、Slintそのものはいつかちゃんと頑張って別の記事を書きたいですね