cranpose-core 0.0.60

Core runtime for a Jetpack Compose inspired UI framework in Rust
Documentation
use super::super::{
    detach::{dispose_detached_node_now, dispose_detached_subtree_now},
    DetachedSubtree, SlotWriteSession,
};
use crate::{Applier, NodeError};

impl SlotWriteSession<'_> {
    pub(crate) fn finalize_pass(
        &mut self,
        applier: &mut dyn Applier,
    ) -> Result<Vec<DetachedSubtree>, NodeError> {
        while !self.state.group_stack.is_empty() {
            let result = self.finish_group_body();
            for subtree in result.detached_children {
                self.table.invalidate_detached_subtree_anchors(&subtree);
                dispose_detached_subtree_now(applier, &subtree)?;
                self.lifecycle.queue_subtree_disposal(subtree);
            }
            for node_id in result.direct_nodes {
                dispose_detached_node_now(applier, node_id)?;
            }
            self.end_group();
        }
        self.flush_payload_location_refreshes();
        #[cfg(any(test, debug_assertions))]
        self.state
            .debug_assert_no_pending_payload_location_refreshes("finalize_pass");

        let root_detached = self.table.root_finish_result(self.state);
        self.state.note_detached_subtrees(&root_detached);
        #[cfg(any(test, debug_assertions))]
        self.state
            .debug_assert_valid_after(self.table, "finalize_pass");
        Ok(root_detached)
    }
}