Crates.io | yoga |
lib.rs | yoga |
version | 0.4.0 |
source | src |
created_at | 2017-10-12 20:26:27.624946 |
updated_at | 2022-12-20 07:08:00.674546 |
description | Rust bindings for Facebook's Yoga, a Flexbox layout engine |
homepage | |
repository | https://github.com/bschwind/yoga-rs |
max_upload_size | |
id | 35450 |
size | 16,223,321 |
A Rust wrapper for Facebook's Yoga layout library.
You may also want to check out taffy (a revived fork of the abandoned stretch) as it is a pure Rust implementation.
$ 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());
}
The unit tests are automatically generated based on upstream fixtures and should not be edited manually.
$ cargo test
To generate the test cases:
Download the ChromeDriver binary and put it somewhere in your $PATH
. Linux/MacOS example:
$ cp chromedriver /usr/local/bin
Then run the following
$ cd gentest
$ bundle install # Install the required ruby gems
$ ruby gentest/gentest.rb # Generate the tests
$ cargo +nightly fmt # Format the tests for consistency