azul_core/
ui_description.rs1use std::{
2 collections::BTreeMap,
3};
4use azul_css::{Css, CssDeclaration, CssProperty, CssPropertyType};
5use crate::{
6 FastHashMap,
7 id_tree::{NodeId, NodeDataContainer},
8 dom::{DomId, DomString},
9 ui_state::{UiState, HoverGroup},
10 callbacks::HitTestItem,
11 style::HtmlCascadeInfo,
12};
13
14#[derive(Debug)]
15pub struct UiDescription {
16 pub dom_id: DomId,
18 pub html_tree: NodeDataContainer<HtmlCascadeInfo>,
20 pub ui_descr_root: NodeId,
22 pub styled_nodes: NodeDataContainer<StyledNode>,
24 pub dynamic_css_overrides: BTreeMap<NodeId, FastHashMap<DomString, CssProperty>>,
26 pub selected_hover_nodes: BTreeMap<NodeId, HoverGroup>,
30}
31
32impl UiDescription {
33 pub fn new(
37 ui_state: &mut UiState,
38 style: &Css,
39 focused_node: &Option<(DomId, NodeId)>,
40 hovered_nodes: &BTreeMap<NodeId, HitTestItem>,
41 is_mouse_down: bool,
42 ) -> Self {
43
44 let ui_description = crate::style::match_dom_selectors(
45 ui_state,
46 &style,
47 focused_node,
48 hovered_nodes,
49 is_mouse_down,
50 );
51
52 ui_state.create_tags_for_hover_nodes(&ui_description.selected_hover_nodes);
54
55 ui_description
56 }
57}
58
59#[derive(Debug, Default, Clone, PartialEq, Hash, PartialOrd, Eq, Ord)]
60pub struct StyledNode {
61 pub css_constraints: BTreeMap<CssPropertyType, CssDeclaration>,
63}