ferroui_base/rendering/composition/
element_composition_preview.rs1use super::CompositionVisual;
2use crate::Visual;
3use std::rc::Rc;
4
5pub struct ElementComposition;
7
8impl ElementComposition {
9 pub fn get_element_visual(visual: &Visual) -> Option<Rc<CompositionVisual>> {
12 visual.composition_visual().map(|v| (*v).clone())
13 }
14
15 pub fn set_element_child_visual(visual: &Visual, composition_visual: Option<Rc<CompositionVisual>>) {
18 if let (Some(child), Some(own)) = (&composition_visual, visual.composition_visual()) {
19 if !Rc::ptr_eq(child.compositor(), own.compositor()) {
20 panic!("Composition visuals belong to different compositor instances");
21 }
22 }
23
24 if let Some(old_child) = visual.child_composition_visual() {
30 if !composition_visual.as_ref().is_some_and(|child| Rc::ptr_eq(child, &old_child)) {
31 if let Some(own) = visual.composition_visual() {
32 own.children().remove(&old_child);
33 }
34 }
35 }
36
37 visual.set_child_composition_visual(composition_visual);
38 if let Some(source) = visual.presentation_source() {
39 source.renderer().recalculate_children(visual);
40 }
41 }
42
43 pub fn get_element_child_visual(visual: &Visual) -> Option<Rc<CompositionVisual>> {
46 visual.child_composition_visual()
47 }
48}