#blueprint #gtk #applications #compile #path #root #found

gtk-blueprint

在Rust GTK应用程序中使用Blueprint

3个不稳定版本

0.2.0 2022年10月2日
0.1.1 2022年9月27日
0.1.0 2022年9月23日

过程宏 中排名 1457

GPL-3.0 许可证

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