3个不稳定版本
0.2.0 | 2022年10月2日 |
---|---|
0.1.1 | 2022年9月27日 |
0.1.0 | 2022年9月23日 |
在 过程宏 中排名 1457
18KB
120 行
Rust的GTK Blueprint
这个软件包允许您使用Blueprint语法为使用Rust构建的GTK应用程序的UI。
为此,必须将Blueprint编译器的目录在环境变量 $PATH 中找到并命名为 "blueprint-compiler",或者它可以包含在项目根目录下的 blueprint-compiler/blueprint-compiler.py
。
如果找不到Blueprint编译器,则您的项目将无法编译。如果由于任何原因(文件未找到、语法错误等)Blueprint编译器无法将文件编译为UI XML,则您的程序也将无法编译。
包含Blueprint
使用 include_blp!()
宏将Blueprint编译为GtkBuilder可以读取的格式(UI XML)。该宏接受相对于 项目根 的文件路径。类似于 include_str!()
宏的工作方式,编译后的UI XML被嵌入到Rust源文件中作为一个 &'static str
。
示例
let builder = gtk::Builder::from_string(include_blp!("./src/window.blp"));
// OR without ./ prefixed to the path
let builder = gtk::Builder::from_string(include_blp!("src/window.blp"));
Blueprint映射
此宏生成一个静态的 Map,其中包含项目中的所有blueprint(以.blp
结尾的文件)。它编译这些文件并将它们作为映射的 值,而 键 是相对于 项目根 的该blueprint的路径。然后使用 get_blp 使用编译后的blueprint的 &str
。
此宏的输入是它应该开始查找blueprint文件的路径(相对于 项目根)。
这种方法的优点是,当您的代码中多次使用蓝图时,它只会在二进制文件中嵌入一次,而include_blp会根据使用次数多次嵌入。
示例
use gtk_blueprint::get_blp;
gtk_blueprint::gen_blp_map!("");
fn main() {
let builder = gtk::Builder::from_string(get_blp!("./src/window.blp"));
// OR without ./ prefixed to the path
let builder = gtk::Builder::from_string(get_blp!("src/window.blp"));
}
错误
如果您更改了任何蓝图文件,但未更改Rust代码,Cargo会认为不需要重新编译项目,因为代码没有更改,它将使用旧的蓝图版本运行。作为解决方案,在项目根目录下创建一个名为build.rs
的文件,并在其中放入以下内容
fn main() {
println!("cargo:rerun-if-changed=**/*.blp");
}
依赖关系
~2MB
~42K SLoC