khora_data/ui/
layout_view.rs1use crate::ecs::World;
18use crate::ecs::{Children, Parent};
19use crate::ui::components::{UiNode, UiTransform};
20use khora_core::ecs::entity::EntityId;
21use khora_core::ui::layout::UiLayoutView;
22use khora_core::ui::types::{UiNode as CoreUiNode, UiTransform as CoreUiTransform};
23
24impl UiLayoutView for World {
25 fn get_all_ui_entities(&self) -> Vec<EntityId> {
26 self.iter_entities()
27 .filter(|&e| self.get::<crate::ui::components::UiNode>(e).is_some())
28 .collect()
29 }
30
31 fn get_node(&self, entity: EntityId) -> Option<CoreUiNode> {
32 self.get::<UiNode>(entity)
33 .map(|n| CoreUiNode::from(n.clone()))
34 }
35
36 fn get_children(&self, entity: EntityId) -> Vec<EntityId> {
37 self.get::<Children>(entity)
38 .map(|c| c.0.clone())
39 .unwrap_or_default()
40 }
41
42 fn has_parent(&self, entity: EntityId) -> bool {
43 self.get::<Parent>(entity).is_some()
44 }
45
46 fn set_transform(&mut self, entity: EntityId, transform: CoreUiTransform) {
47 if let Some(existing) = self.get_mut::<UiTransform>(entity) {
48 *existing = UiTransform::from(transform);
49 } else {
50 let _ = self.add_component(entity, UiTransform::from(transform));
51 }
52 }
53}