/* LICENSE BEGIN This file is part of the SixtyFPS Project -- https://sixtyfps.io Copyright (c) 2020 Olivier Goffart Copyright (c) 2020 Simon Hausmann SPDX-License-Identifier: GPL-3.0-only This file is also available under commercial licensing terms. Please contact info@sixtyfps.io for more information. LICENSE END */ #![warn(missing_docs)] //! This module contains the basic datastructures that are exposed to the C API use crate::eventloop::ComponentWindow; use crate::input::{InputEventResult, MouseEvent}; use crate::item_tree::{ItemVisitorVTable, TraversalOrder, VisitChildrenResult}; use crate::layout::LayoutInfo; use vtable::*; /// A Component is representing an unit that is allocated together #[vtable] #[repr(C)] pub struct ComponentVTable { /// Visit the children of the item at index `index`. /// Note that the root item is at index 0, so passing 0 would visit the item under root (the children of root). /// If you want to visit the root item, you need to pass -1 as an index. pub visit_children_item: extern "C" fn( core::pin::Pin>, index: isize, order: TraversalOrder, visitor: VRefMut, ) -> VisitChildrenResult, /// Returns the layout info for this component pub layout_info: extern "C" fn(core::pin::Pin>) -> LayoutInfo, /// Will compute the layout of pub compute_layout: extern "C" fn(core::pin::Pin>), /// input event pub input_event: extern "C" fn( core::pin::Pin>, MouseEvent, &ComponentWindow, ) -> InputEventResult, } /// Alias for `vtable::VRef` which represent a pointer to a `dyn Component` with /// the associated vtable pub type ComponentRef<'a> = vtable::VRef<'a, ComponentVTable>; /// Type alias to the commonly use `Pin>>` pub type ComponentRefPin<'a> = core::pin::Pin>;