freya_devtools_app/tabs/
layout.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use freya::prelude::*;
use freya_devtools::NodeStateAttributes;
use freya_native_core::NodeId;

use crate::{
    components::attribute::attribute_element,
    hooks::use_node_info,
};

#[component]
pub fn NodeInspectorLayout(node_id: NodeId, window_id: u64) -> Element {
    let Some(node) = use_node_info(node_id, window_id) else {
        return Ok(VNode::placeholder());
    };

    rsx!(
        ScrollView {
            show_scrollbar: true,
            height : "fill",
            width: "fill",
            {node.state.layout_attributes().into_iter().enumerate().filter_map(|(i, (name, attribute))| {
                let background = if i % 2 == 0 {
                    "rgb(255, 255, 255, 0.1)"
                } else {
                    "transparent"
                };

                let element = attribute_element(i, name, attribute)?;

                Some(rsx!(
                    rect {
                        background,
                        padding: "5 16",
                        {element}
                    }
                ))
            })}
        }
    )
}