gioser

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1061HTML 997Markdown 12TOML 83120 Definiciones

⎇ c9a5913385a106460808a684f27b7efed7e5ae2f src/node.rs Rust · 65 líneas · 1.7 KB Historia Quién tocó qué crudo

Rebase & format c9a591338 · Emil Sjölander ·

1#[cfg(not(feature = "std"))]
2use alloc::{vec, vec::Vec};
3
4use std::cell::RefCell;
5use std::rc::Rc;
6use std::rc::Weak;
7
8use crate::algo;
9use crate::geometry::Size;
10use crate::number::Number;
11use crate::result::{Cache, Layout, Result};
12use crate::style::*;
13
14type MeasureFunc = Box<Fn(Size<Number>) -> Result<Size<f32>>>;
15
16pub(crate) struct InternalNode {
17    pub(crate) style: Style,
18    pub(crate) parents: Vec<Weak<RefCell<InternalNode>>>,
19    pub(crate) children: Vec<Rc<RefCell<InternalNode>>>,
20    pub(crate) measure: Option<MeasureFunc>,
21    pub(crate) layout_cache: RefCell<Option<Cache>>,
22}
23
24pub struct Node(Rc<RefCell<InternalNode>>);
25
26impl Node {
27    pub fn new(style: Style, children: Vec<&Node>) -> Node {
28        let mut parent = Node(Rc::new(RefCell::new(InternalNode {
29            style,
30            parents: vec![],
31            children: vec![],
32            measure: None,
33            layout_cache: RefCell::new(None),
34        })));
35
36        for child in children {
37            parent.add_child(child);
38        }
39
40        parent
41    }
42
43    pub fn add_child(&mut self, child: &Node) {
44        child.0.borrow_mut().parents.push(Rc::downgrade(&self.0));
45        self.0.borrow_mut().children.push(Rc::clone(&child.0));
46    }
47
48    // pub fn children(&self) -> Vec<Node> {}
49
50    // pub fn mark_dirty(&mut self) {}
51
52    // pub fn set_style(&mut self, Style) {}
53
54    // pub fn set_children(&mut self, Vec<Node>) {}
55
56    // pub fn add_child(&mut self, Node) {}
57
58    // pub fn remove_child(&mut self, Node) -> Node {}
59
60    // pub fn replace_child(&mut self, Node, u32) -> Node {}
61
62    pub fn compute_layout(&self, size: Size<Number>) -> Result<Layout> {
63        algo::compute(&self.0.borrow(), size)
64    }
65}