use super::*;
#[unsafe(no_mangle)]
pub extern "C" fn kui_reveal(ptr: *mut KuiCtx, key: u64) {
guard((), || {
if let Some(c) = unsafe { ctx(ptr) } {
c.core().reveal(Key(key));
}
});
}
#[unsafe(no_mangle)]
pub extern "C" fn kui_set_scroll(ptr: *mut KuiCtx, key: u64, x: f32, y: f32) {
guard((), || {
if let Some(c) = unsafe { ctx(ptr) } {
c.core().set_scroll(Key(key), kui_core::Vec2::new(x, y));
}
});
}
#[unsafe(no_mangle)]
pub extern "C" fn kui_shift_scroll(ptr: *mut KuiCtx, key: u64, drawn: f32, target: f32) {
guard((), || {
if let Some(c) = unsafe { ctx(ptr) } {
c.core().shift_scroll(
Key(key),
kui_core::Vec2::new(0.0, drawn),
kui_core::Vec2::new(0.0, target),
);
}
});
}
#[unsafe(no_mangle)]
pub extern "C" fn kui_scroll_offset(ptr: *mut KuiCtx, key: u64, x: *mut f32, y: *mut f32) {
guard((), || {
let off =
unsafe { ctx(ptr) }.map_or(kui_core::Vec2::ZERO, |c| c.core().scroll_offset(Key(key)));
unsafe {
if let Some(x) = x.as_mut() {
*x = off.x;
}
if let Some(y) = y.as_mut() {
*y = off.y;
}
}
});
}
#[unsafe(no_mangle)]
pub extern "C" fn kui_layout_of(ptr: *mut KuiCtx, key: u64, out: *mut KuiLayoutRect) -> bool {
guard(false, || {
let Some(c) = (unsafe { ctx(ptr) }) else {
return false;
};
let Some(r) = c.core().layout_of(Key(key)) else {
return false;
};
write_out(
out,
KuiLayoutRect {
x: r.x,
y: r.y,
w: r.w,
h: r.h,
..Default::default()
},
)
})
}
#[unsafe(no_mangle)]
pub extern "C" fn kui_scroll_geometry(
ptr: *mut KuiCtx,
key: u64,
out: *mut KuiScrollGeometry,
) -> bool {
guard(false, || {
let Some(c) = (unsafe { ctx(ptr) }) else {
return false;
};
let Some(g) = c.core().scroll_geometry(Key(key)) else {
return false;
};
write_out(
out,
KuiScrollGeometry {
x: g.rect.x,
y: g.rect.y,
w: g.rect.w,
h: g.rect.h,
content_w: g.content.w,
content_h: g.content.h,
offset_x: g.offset.x,
offset_y: g.offset.y,
max_offset_x: g.max_offset.x,
max_offset_y: g.max_offset.y,
..Default::default()
},
)
})
}