Skip to main content

rusteal_core/
widget.rs

1use rusteal_ffi::{UClassHandle, UObjectHandle};
2
3use crate::error::{RustealError, RustealResult, check_ffi};
4use crate::ffi_dispatch;
5
6#[track_caller]
7pub fn create_widget_raw(
8    owning_object: UObjectHandle,
9    widget_class: UClassHandle,
10) -> RustealResult<UObjectHandle> {
11    let result = unsafe { ffi_dispatch::widget_create_widget(owning_object, widget_class) };
12
13    if result.is_null() {
14        Err(RustealError::invalid_operation(
15            "create_widget returned null",
16        ))
17    } else {
18        Ok(result)
19    }
20}
21
22#[track_caller]
23pub fn set_root_widget_raw(
24    user_widget: UObjectHandle,
25    root_widget: UObjectHandle,
26) -> RustealResult<()> {
27    check_ffi(unsafe { ffi_dispatch::widget_set_root_widget(user_widget, root_widget) })
28}
29
30#[track_caller]
31pub fn get_widget_tree_raw(user_widget: UObjectHandle) -> RustealResult<UObjectHandle> {
32    let result = unsafe { ffi_dispatch::widget_get_widget_tree(user_widget) };
33
34    if result.is_null() {
35        Err(RustealError::invalid_operation(
36            "get_widget_tree returned null",
37        ))
38    } else {
39        Ok(result)
40    }
41}