1use zng_app::widget::node::Z_INDEX;
2
3use crate::prelude::*;
4
5#[property(CONTEXT, default(ZIndex::DEFAULT))]
14pub fn z_index(child: impl IntoUiNode, index: impl IntoVar<ZIndex>) -> UiNode {
15 let index = index.into_var();
16 let mut valid = false;
17
18 match_node(child, move |_, op| match op {
19 UiNodeOp::Init => {
20 valid = Z_INDEX.set(index.get());
21
22 if valid {
23 WIDGET.sub_var(&index);
24 } else {
25 tracing::error!(
26 "property `z_index` set for `{}` but it is not the direct child of a Z-sorting panel",
27 WIDGET.trace_id()
28 );
29 }
30 }
31 UiNodeOp::Update { .. } => {
32 if valid && let Some(i) = index.get_new() {
33 assert!(Z_INDEX.set(i));
34 }
35 }
36 _ => {}
37 })
38}