6 个版本 (3 个重大变更)
0.4.0 | 2022年12月20日 |
---|---|
0.3.1 | 2019年1月16日 |
0.3.0 | 2018年10月16日 |
0.2.0 | 2018年6月18日 |
0.1.1 | 2017年10月12日 |
#971 in GUI
每月下载量 285 次
7MB
135K SLoC
包含 (JAR 文件, 1.5MB) android-support-v4.jar, (Zip 文件, 1MB) appcompat-v7-24.2.1.aar, (JAR 文件, 315KB) src/yoga/lib/junit/junit-4.12.jar, (JAR 文件, 125KB) src/yoga/lib/hamcrest/hamcrest-2.1.jar, (JAR 文件, 55KB) gradle-wrapper.jar, (Zip 文件, 59KB) src/yoga/lib/soloader/soloader-0.5.1.aar 和更多.
Yoga-rs
Facebook 的 Yoga 布局库的 Rust 包装器。
您还可以查看 taffy(已废弃的 stretch 的复活分支),因为它是一个纯 Rust 实现。
依赖项
- cargo
- rustc
构建
$ cargo build --release
运行示例
$ cargo run --release --example layout
格式化代码
$ cargo +nightly fmt
示例代码
#[macro_use]
extern crate yoga;
use yoga::prelude::*;
use yoga::Node;
use yoga::StyleUnit::{Auto, UndefinedValue};
fn main() {
let mut node = Node::new();
let mut child = Node::new();
let mut other_child = Node::new();
node.insert_child(&mut child, 0);
node.insert_child(&mut other_child, 1);
style!(node,
Margin(10 pt),
MarginLeft(Auto),
PaddingHorizontal(4 pt),
Left(16 %),
Bottom(UndefinedValue)
);
let child_styles = make_styles!(
Width(32 pt),
Height(32 pt),
FlexGrow(1.0),
Margin(Auto)
);
child.apply_styles(&child_styles);
other_child.apply_styles(&child_styles);
node.calculate_layout(512.0, 512.0, yoga::Direction::LTR);
println!("Layout is {:#?}", child.get_layout());
}
测试
单元测试是基于上游 fixture 自动生成的,不应手动编辑。
$ cargo test
要生成测试用例:下载 ChromeDriver 可执行文件并将其放在您的 $PATH
中的某个位置。Linux/MacOS 示例
$ cp chromedriver /usr/local/bin
然后运行以下命令
$ cd gentest
$ bundle install # Install the required ruby gems
$ ruby gentest/gentest.rb # Generate the tests
$ cargo +nightly fmt # Format the tests for consistency