mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 06:11:16 +00:00
Add ability to get the parent item from the vtable
(still untested)
This commit is contained in:
parent
1fda2e1c99
commit
c2982d9ab3
10 changed files with 356 additions and 209 deletions
|
@ -65,6 +65,7 @@ using cbindgen_private::ItemVTable;
|
|||
using ComponentRef = vtable::VRef<private_api::ComponentVTable>;
|
||||
using ItemRef = vtable::VRef<private_api::ItemVTable>;
|
||||
using ItemVisitorRefMut = vtable::VRefMut<cbindgen_private::ItemVisitorVTable>;
|
||||
using cbindgen_private::ItemWeak;
|
||||
}
|
||||
using cbindgen_private::ComponentRc;
|
||||
using cbindgen_private::EasingCurve;
|
||||
|
@ -165,16 +166,17 @@ using cbindgen_private::NativeStyleMetrics;
|
|||
namespace private_api {
|
||||
constexpr inline ItemTreeNode make_item_node(std::uintptr_t offset,
|
||||
const cbindgen_private::ItemVTable *vtable,
|
||||
uint32_t child_count, uint32_t child_index)
|
||||
uint32_t child_count, uint32_t child_index,
|
||||
uint parent_index)
|
||||
{
|
||||
return ItemTreeNode { ItemTreeNode::Item_Body {
|
||||
ItemTreeNode::Tag::Item, { vtable, offset }, child_count, child_index } };
|
||||
ItemTreeNode::Tag::Item, { vtable, offset }, child_count, child_index, parent_index } };
|
||||
}
|
||||
|
||||
constexpr inline ItemTreeNode make_dyn_node(std::uintptr_t offset)
|
||||
constexpr inline ItemTreeNode make_dyn_node(std::uintptr_t offset, std::uint32_t parent_index)
|
||||
{
|
||||
return ItemTreeNode { ItemTreeNode::DynamicTree_Body { ItemTreeNode::Tag::DynamicTree,
|
||||
offset } };
|
||||
return ItemTreeNode { ItemTreeNode::DynamicTree_Body {
|
||||
ItemTreeNode::Tag::DynamicTree, offset, parent_index } };
|
||||
}
|
||||
|
||||
inline ItemRef get_item_ref(ComponentRef component, Slice<ItemTreeNode> item_tree, int index)
|
||||
|
@ -183,6 +185,17 @@ inline ItemRef get_item_ref(ComponentRef component, Slice<ItemTreeNode> item_tre
|
|||
return ItemRef { item.vtable, reinterpret_cast<char *>(component.instance) + item.offset };
|
||||
}
|
||||
|
||||
inline ItemWeak parent_item(cbindgen_private::ComponentWeak component,
|
||||
Slice<ItemTreeNode> item_tree, int index)
|
||||
{
|
||||
const auto &node = item_tree.ptr[index];
|
||||
if (node.tag == ItemTreeNode::Tag::Item) {
|
||||
return { component, node.item.parent_index };
|
||||
} else {
|
||||
return { component, node.dynamic_tree.parent_index };
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
using cbindgen_private::FocusEvent;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue