tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 731HTML 683Markdown 12TOML 62421 Sutichaykuna

⎇ 599b1b7d7410d97e13bafc4c01fbe6d7a9cf060a benches/src/taffy_helpers.rs Rust · 61 siq'ikuna · 2.0 KB Ñawpa willay Pi imata llamkarqan ch'uya

Prepare for v0.9.0 release (#856) 599b1b7d7 · Nico Burns ·

1use rand::distr::uniform::SampleRange;
2use rand::Rng;
3use rand_chacha::ChaCha8Rng;
4use taffy::style::Style as TaffyStyle;
5use taffy::tree::NodeId as TaffyNodeId;
6use taffy::TaffyTree;
7
8use super::{BuildTree, BuildTreeExt, GenStyle};
9
10pub struct TaffyTreeBuilder<R: Rng, G: GenStyle<TaffyStyle>> {
11    rng: R,
12    style_generator: G,
13    tree: TaffyTree,
14    root: TaffyNodeId,
15}
16
17// Implement the BuildTree trait
18impl<R: Rng, G: GenStyle<TaffyStyle>> BuildTree<R, G> for TaffyTreeBuilder<R, G> {
19    const NAME: &'static str = "Taffy 0.9";
20    type Tree = TaffyTree;
21    type Node = TaffyNodeId;
22
23    fn with_rng(mut rng: R, mut style_generator: G) -> Self {
24        let mut tree = TaffyTree::new();
25        let root = tree.new_leaf(style_generator.create_root_style(&mut rng)).unwrap();
26        TaffyTreeBuilder { rng, style_generator, tree, root }
27    }
28
29    fn compute_layout_inner(&mut self, available_width: Option<f32>, available_height: Option<f32>) {
30        let available_space = taffy::geometry::Size { width: available_width.into(), height: available_height.into() };
31        self.tree.compute_layout(self.root, available_space).unwrap();
32    }
33
34    fn random_usize(&mut self, range: impl SampleRange<usize>) -> usize {
35        self.rng.random_range(range)
36    }
37
38    fn create_leaf_node(&mut self) -> Self::Node {
39        let style = self.style_generator.create_leaf_style(&mut self.rng);
40        self.tree.new_leaf(style).unwrap()
41    }
42
43    fn create_container_node(&mut self, children: &[Self::Node]) -> Self::Node {
44        let style = self.style_generator.create_container_style(&mut self.rng);
45        self.tree.new_with_children(style, children).unwrap()
46    }
47
48    fn total_node_count(&mut self) -> usize {
49        self.tree.total_node_count()
50    }
51
52    fn set_root_children(&mut self, children: &[Self::Node]) {
53        self.tree.set_children(self.root, children).unwrap();
54    }
55
56    fn into_tree_and_root(self) -> (Self::Tree, Self::Node) {
57        (self.tree, self.root)
58    }
59}
60
61impl<G: GenStyle<TaffyStyle>> BuildTreeExt<G> for TaffyTreeBuilder<ChaCha8Rng, G> {}