#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(dead_code)]
#![allow(unnecessary_transmutes)]
#![allow(clippy::all)]
#![allow(unpredictable_function_pointer_comparisons)]
#[cfg(all(feature = "stack-layout", dear_imgui_rs_wasm_import_target))]
compile_error!("feature `stack-layout` is native-only and cannot be combined with WASM");
#[cfg(all(feature = "test-engine", dear_imgui_rs_wasm_import_target))]
compile_error!("feature `test-engine` is native source-only and cannot be combined with WASM");
#[cfg(all(feature = "prebuilt", dear_imgui_rs_wasm_import_target))]
compile_error!("feature `prebuilt` is native-only and cannot be combined with WASM");
mod ffi;
pub use ffi::*;
#[cfg_attr(
dear_imgui_rs_wasm_import_target,
link(wasm_import_module = "imgui-sys-v1")
)]
unsafe extern "C" {
pub fn dear_imgui_rs_show_demo_window_without_font_atlas(p_open: *mut bool);
pub fn dear_imgui_rs_show_metrics_window_without_font_atlas(p_open: *mut bool);
pub fn dear_imgui_rs_show_style_editor_without_font_atlas(ref_: *mut ImGuiStyle);
pub fn dear_imgui_rs_show_font_atlas_debug_panel();
pub fn dear_imgui_rs_dock_builder_keep_root_alive(root_id: ImGuiID) -> ::std::os::raw::c_int;
pub fn dear_imgui_rs_dock_builder_root_has_active_content_window(
root_id: ImGuiID,
) -> ::std::os::raw::c_int;
pub fn dear_imgui_rs_dock_builder_copy_node(
source_root_id: ImGuiID,
destination_root_id: ImGuiID,
remap_data: *mut ImGuiID,
remap_capacity: ::std::os::raw::c_int,
) -> ::std::os::raw::c_int;
}
pub mod backend_shim;
const _: [(); 4] = [(); std::mem::size_of::<ImWchar>()];
pub const HAS_PLATFORM_IO_AGGREGATE_HOOKS: bool = cfg!(dear_imgui_rs_platform_io_hooks);
#[cfg(feature = "stack-layout")]
mod stack_layout {
use super::*;
unsafe extern "C" {
fn dear_imgui_stack_begin_horizontal_str(
str_id: *const std::os::raw::c_char,
size: ImVec2,
align: f32,
);
fn dear_imgui_stack_begin_horizontal_ptr(
ptr_id: *const std::ffi::c_void,
size: ImVec2,
align: f32,
);
fn dear_imgui_stack_begin_horizontal_int(id: std::os::raw::c_int, size: ImVec2, align: f32);
fn dear_imgui_stack_begin_horizontal_id(id: ImGuiID, size: ImVec2, align: f32);
fn dear_imgui_stack_end_horizontal();
fn dear_imgui_stack_begin_vertical_str(
str_id: *const std::os::raw::c_char,
size: ImVec2,
align: f32,
);
fn dear_imgui_stack_begin_vertical_ptr(
ptr_id: *const std::ffi::c_void,
size: ImVec2,
align: f32,
);
fn dear_imgui_stack_begin_vertical_int(id: std::os::raw::c_int, size: ImVec2, align: f32);
fn dear_imgui_stack_begin_vertical_id(id: ImGuiID, size: ImVec2, align: f32);
fn dear_imgui_stack_end_vertical();
fn dear_imgui_stack_spring(weight: f32, spacing: f32);
fn dear_imgui_stack_suspend_layout();
fn dear_imgui_stack_resume_layout();
fn dear_imgui_stack_destroy_context_state(context: *mut ImGuiContext);
fn dear_imgui_stack_state_count() -> usize;
}
#[inline]
pub unsafe fn ImGuiStack_BeginHorizontal_Str(
str_id: *const std::os::raw::c_char,
size: ImVec2,
align: f32,
) {
unsafe { dear_imgui_stack_begin_horizontal_str(str_id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginHorizontal_Ptr(
ptr_id: *const std::ffi::c_void,
size: ImVec2,
align: f32,
) {
unsafe { dear_imgui_stack_begin_horizontal_ptr(ptr_id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginHorizontal_Int(
id: std::os::raw::c_int,
size: ImVec2,
align: f32,
) {
unsafe { dear_imgui_stack_begin_horizontal_int(id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginHorizontal_Id(id: ImGuiID, size: ImVec2, align: f32) {
unsafe { dear_imgui_stack_begin_horizontal_id(id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_EndHorizontal() {
unsafe { dear_imgui_stack_end_horizontal() }
}
#[inline]
pub unsafe fn ImGuiStack_BeginVertical_Str(
str_id: *const std::os::raw::c_char,
size: ImVec2,
align: f32,
) {
unsafe { dear_imgui_stack_begin_vertical_str(str_id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginVertical_Ptr(
ptr_id: *const std::ffi::c_void,
size: ImVec2,
align: f32,
) {
unsafe { dear_imgui_stack_begin_vertical_ptr(ptr_id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginVertical_Int(id: std::os::raw::c_int, size: ImVec2, align: f32) {
unsafe { dear_imgui_stack_begin_vertical_int(id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_BeginVertical_Id(id: ImGuiID, size: ImVec2, align: f32) {
unsafe { dear_imgui_stack_begin_vertical_id(id, size, align) }
}
#[inline]
pub unsafe fn ImGuiStack_EndVertical() {
unsafe { dear_imgui_stack_end_vertical() }
}
#[inline]
pub unsafe fn ImGuiStack_Spring(weight: f32, spacing: f32) {
unsafe { dear_imgui_stack_spring(weight, spacing) }
}
#[inline]
pub unsafe fn ImGuiStack_SuspendLayout() {
unsafe { dear_imgui_stack_suspend_layout() }
}
#[inline]
pub unsafe fn ImGuiStack_ResumeLayout() {
unsafe { dear_imgui_stack_resume_layout() }
}
#[inline]
pub unsafe fn ImGuiStack_DestroyContextState(context: *mut ImGuiContext) {
unsafe { dear_imgui_stack_destroy_context_state(context) }
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiStack_StateCount() -> usize {
unsafe { dear_imgui_stack_state_count() }
}
}
#[cfg(feature = "stack-layout")]
pub use stack_layout::*;
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe extern "C" {
fn dear_imgui_rs_platform_io_set_platform_set_window_pos(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, pos: *const ImVec2)>,
);
fn dear_imgui_rs_platform_io_set_platform_get_window_pos(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2)>,
);
fn dear_imgui_rs_platform_io_set_platform_set_window_size(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2)>,
);
fn dear_imgui_rs_platform_io_set_platform_get_window_size(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2)>,
);
fn dear_imgui_rs_platform_io_set_platform_get_window_framebuffer_scale(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2)>,
);
fn dear_imgui_rs_platform_io_set_platform_get_window_work_area_insets(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<
unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4),
>,
);
fn dear_imgui_rs_platform_io_clear_platform_set_window_pos_if_pointer_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, pos: *const ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_platform_set_window_size_if_pointer_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_platform_get_window_pos_if_out_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_platform_get_window_size_if_out_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_platform_get_window_framebuffer_scale_if_out_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_platform_get_window_work_area_insets_if_out_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_set_renderer_set_window_size(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2)>,
);
fn dear_imgui_rs_platform_io_renderer_set_window_size_matches_pointer_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_get_renderer_set_window_size_pointer_param(
platform_io: *mut ImGuiPlatformIO,
out_callback: *mut Option<
unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
>,
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_clear_renderer_set_window_size_if_pointer_param(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_probe_aggregate_callbacks(
platform_io: *mut ImGuiPlatformIO,
out_result: *mut DearImguiRsPlatformIoAggregateProbeResult,
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_invoke_platform_set_window_pos(
callbacks: *const ImGuiPlatformIO,
viewport: *mut ImGuiViewport,
pos: *const ImVec2,
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_invoke_renderer_set_window_size(
callbacks: *const ImGuiPlatformIO,
viewport: *mut ImGuiViewport,
size: *const ImVec2,
) -> std::os::raw::c_int;
fn dear_imgui_rs_platform_io_aggregate_callback_storage_count() -> std::os::raw::c_int;
fn dear_imgui_rs_find_live_viewport_by_address(
context: *mut ImGuiContext,
address: usize,
) -> *mut ImGuiViewport;
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiContext_FindLiveViewportByAddress(
context: *mut ImGuiContext,
address: usize,
) -> *mut ImGuiViewport {
#[cfg(dear_imgui_rs_platform_io_hooks)]
{
unsafe { dear_imgui_rs_find_live_viewport_by_address(context, address) }
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = (context, address);
std::ptr::null_mut()
}
}
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq)]
pub struct DearImguiRsPlatformIoAggregateProbeResult {
pub PlatformGetWindowPos: ImVec2,
pub PlatformGetWindowSize: ImVec2,
pub PlatformGetWindowFramebufferScale: ImVec2,
pub PlatformGetWindowWorkAreaInsets: ImVec4,
}
#[cfg(feature = "abi-probe")]
#[doc(hidden)]
#[repr(C)]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct DearImguiRsPublicAggregateLayoutProbe {
pub ImDrawDataSize: usize,
pub ImDrawDataAlign: usize,
pub ImDrawDataFrameCountOffset: usize,
pub ImDrawDataCmdListsOffset: usize,
pub ImDrawDataTexturesOffset: usize,
pub ImTextureDataSize: usize,
pub ImTextureDataAlign: usize,
pub ImTextureDataUniqueIDOffset: usize,
pub ImTextureDataQueueUserDataOffset: usize,
pub ImTextureDataTexIDOffset: usize,
pub ImTextureDataUpdatesOffset: usize,
pub ImTextureDataWantDestroyNextFrameOffset: usize,
pub ImGuiPlatformIOSize: usize,
pub ImGuiPlatformIOAlign: usize,
pub ImGuiPlatformIOSessionDateOffset: usize,
pub ImGuiPlatformIORenderStateOffset: usize,
pub ImGuiPlatformIOPlatformCreateWindowOffset: usize,
pub ImGuiPlatformIORendererCreateWindowOffset: usize,
pub ImGuiPlatformIOMonitorsOffset: usize,
pub ImGuiPlatformIOTexturesOffset: usize,
pub ImGuiPlatformIOViewportsOffset: usize,
}
#[cfg(feature = "abi-probe")]
unsafe extern "C" {
fn dear_imgui_rs_probe_public_aggregate_layouts(
out_probe: *mut DearImguiRsPublicAggregateLayoutProbe,
) -> std::os::raw::c_int;
}
#[cfg(feature = "abi-probe")]
#[doc(hidden)]
#[inline]
pub fn ImGui_ProbePublicAggregateLayouts(
out_probe: &mut DearImguiRsPublicAggregateLayoutProbe,
) -> bool {
unsafe { dear_imgui_rs_probe_public_aggregate_layouts(out_probe) != 0 }
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_SetWindowPos_PointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, pos: *const ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_set_window_pos(platform_io, user_callback)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Platform_SetWindowPos callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_SetWindowPos = None;
}
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowPos_OutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_get_window_pos(platform_io, user_callback)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowPos callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_GetWindowPos = None;
}
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_SetWindowSize_PointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_set_window_size(platform_io, user_callback)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Platform_SetWindowSize callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_SetWindowSize = None;
}
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowSize_OutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_get_window_size(platform_io, user_callback)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowSize callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_GetWindowSize = None;
}
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowFramebufferScale_OutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_get_window_framebuffer_scale(
platform_io,
user_callback,
)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install \
Platform_GetWindowFramebufferScale callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_GetWindowFramebufferScale = None;
}
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowWorkAreaInsets_OutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_platform_get_window_work_area_insets(
platform_io,
user_callback,
)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowWorkAreaInsets \
callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Platform_GetWindowWorkAreaInsets = None;
}
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformSetWindowPosIfPointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, pos: *const ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_set_window_pos_if_pointer_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformSetWindowSizeIfPointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_set_window_size_if_pointer_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformGetWindowPosIfOutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_get_window_pos_if_out_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformGetWindowSizeIfOutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_get_window_size_if_out_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformGetWindowFramebufferScaleIfOutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_get_window_framebuffer_scale_if_out_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearPlatformGetWindowWorkAreaInsetsIfOutParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_platform_get_window_work_area_insets_if_out_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_Set_Renderer_SetWindowSize_PointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2)>,
) {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
dear_imgui_rs_platform_io_set_renderer_set_window_size(platform_io, user_callback)
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
if user_callback.is_some() {
panic!(
"dear-imgui-sys was built without PlatformIO aggregate ABI hooks; \
rebuild without IMGUI_SYS_SKIP_CC to install Renderer_SetWindowSize callbacks"
);
} else if let Some(platform_io) = unsafe { platform_io.as_mut() } {
platform_io.Renderer_SetWindowSize = None;
}
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_RendererSetWindowSizeMatchesPointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_renderer_set_window_size_matches_pointer_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_RendererSetWindowSizePointerParam(
platform_io: *mut ImGuiPlatformIO,
) -> Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2)> {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
let mut callback = None;
if dear_imgui_rs_platform_io_get_renderer_set_window_size_pointer_param(
platform_io,
&mut callback,
) != 0
{
return callback;
}
None
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
None
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_ClearRendererSetWindowSizeIfPointerParam(
platform_io: *mut ImGuiPlatformIO,
user_callback: unsafe extern "C" fn(vp: *mut ImGuiViewport, size: *const ImVec2),
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_clear_renderer_set_window_size_if_pointer_param(
platform_io,
user_callback,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = user_callback;
false
}
}
#[inline]
pub unsafe fn ImGuiPlatformIO_ProbeAggregateCallbacks(
platform_io: *mut ImGuiPlatformIO,
out_result: *mut DearImguiRsPlatformIoAggregateProbeResult,
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_probe_aggregate_callbacks(platform_io, out_result) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = platform_io;
let _ = out_result;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_InvokePlatformSetWindowPos(
callbacks: *const ImGuiPlatformIO,
viewport: *mut ImGuiViewport,
pos: *const ImVec2,
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_invoke_platform_set_window_pos(callbacks, viewport, pos)
!= 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = callbacks;
let _ = viewport;
let _ = pos;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_InvokeRendererSetWindowSize(
callbacks: *const ImGuiPlatformIO,
viewport: *mut ImGuiViewport,
size: *const ImVec2,
) -> bool {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_invoke_renderer_set_window_size(
callbacks, viewport, size,
) != 0;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
let _ = callbacks;
let _ = viewport;
let _ = size;
false
}
}
#[doc(hidden)]
#[inline]
pub unsafe fn ImGuiPlatformIO_AggregateCallbackStorageCount() -> usize {
#[cfg(dear_imgui_rs_platform_io_hooks)]
unsafe {
return dear_imgui_rs_platform_io_aggregate_callback_storage_count() as usize;
}
#[cfg(not(dear_imgui_rs_platform_io_hooks))]
{
0
}
}
pub use ImColor as Color;
pub use ImVec2 as Vector2;
pub use ImVec4 as Vector4;
pub const BINDING_VERSION: &str = env!("CARGO_PKG_VERSION");
pub const HAS_DOCKING: bool = true;
#[cfg(feature = "freetype")]
pub const HAS_FREETYPE: bool = true;
#[cfg(not(feature = "freetype"))]
pub const HAS_FREETYPE: bool = false;
#[cfg(all(dear_imgui_rs_wasm_import_target, feature = "wasm"))]
pub const HAS_WASM: bool = true;
#[cfg(not(all(dear_imgui_rs_wasm_import_target, feature = "wasm")))]
pub const HAS_WASM: bool = false;
#[cfg(test)]
mod target_contract_tests {
#[test]
fn wasm_availability_requires_the_build_selected_import_target() {
assert_eq!(
super::HAS_WASM,
cfg!(all(dear_imgui_rs_wasm_import_target, feature = "wasm"))
);
}
}
#[cfg(all(test, not(dear_imgui_rs_platform_io_hooks)))]
mod aggregate_setter_fallback_tests {
use std::panic::{AssertUnwindSafe, catch_unwind};
use std::ptr;
use super::*;
unsafe extern "C" fn set_vec2_pointer(_viewport: *mut ImGuiViewport, _value: *const ImVec2) {}
unsafe extern "C" fn get_vec2_out(_viewport: *mut ImGuiViewport, _value: *mut ImVec2) {}
unsafe extern "C" fn get_vec4_out(_viewport: *mut ImGuiViewport, _value: *mut ImVec4) {}
unsafe extern "C" fn raw_set_vec2(_viewport: *mut ImGuiViewport, _value: ImVec2) {}
unsafe extern "C" fn raw_get_vec2(_viewport: *mut ImGuiViewport) -> ImVec2 {
ImVec2::zero()
}
unsafe extern "C" fn raw_get_vec4(_viewport: *mut ImGuiViewport) -> ImVec4 {
ImVec4::zero()
}
fn assert_panics(action: impl FnOnce()) {
assert!(catch_unwind(AssertUnwindSafe(action)).is_err());
}
#[test]
fn aggregate_setters_without_cpp_hooks_reject_some_callbacks() {
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_SetWindowPos_PointerParam(
ptr::null_mut(),
Some(set_vec2_pointer),
);
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowPos_OutParam(ptr::null_mut(), Some(get_vec2_out));
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_SetWindowSize_PointerParam(
ptr::null_mut(),
Some(set_vec2_pointer),
);
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowSize_OutParam(
ptr::null_mut(),
Some(get_vec2_out),
);
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowFramebufferScale_OutParam(
ptr::null_mut(),
Some(get_vec2_out),
);
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowWorkAreaInsets_OutParam(
ptr::null_mut(),
Some(get_vec4_out),
);
});
assert_panics(|| unsafe {
ImGuiPlatformIO_Set_Renderer_SetWindowSize_PointerParam(
ptr::null_mut(),
Some(set_vec2_pointer),
);
});
}
#[test]
fn aggregate_setters_without_cpp_hooks_clear_matching_raw_slots() {
let mut platform_io = ImGuiPlatformIO {
Platform_SetWindowPos: Some(raw_set_vec2),
Platform_GetWindowPos: Some(raw_get_vec2),
Platform_SetWindowSize: Some(raw_set_vec2),
Platform_GetWindowSize: Some(raw_get_vec2),
Platform_GetWindowFramebufferScale: Some(raw_get_vec2),
Platform_GetWindowWorkAreaInsets: Some(raw_get_vec4),
Renderer_SetWindowSize: Some(raw_set_vec2),
..ImGuiPlatformIO::default()
};
unsafe {
ImGuiPlatformIO_Set_Platform_SetWindowPos_PointerParam(&mut platform_io, None);
}
assert!(platform_io.Platform_SetWindowPos.is_none());
assert!(platform_io.Platform_GetWindowPos.is_some());
unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowPos_OutParam(&mut platform_io, None);
}
assert!(platform_io.Platform_GetWindowPos.is_none());
assert!(platform_io.Platform_SetWindowSize.is_some());
unsafe {
ImGuiPlatformIO_Set_Platform_SetWindowSize_PointerParam(&mut platform_io, None);
}
assert!(platform_io.Platform_SetWindowSize.is_none());
assert!(platform_io.Platform_GetWindowSize.is_some());
unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowSize_OutParam(&mut platform_io, None);
}
assert!(platform_io.Platform_GetWindowSize.is_none());
assert!(platform_io.Platform_GetWindowFramebufferScale.is_some());
unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowFramebufferScale_OutParam(&mut platform_io, None);
}
assert!(platform_io.Platform_GetWindowFramebufferScale.is_none());
assert!(platform_io.Platform_GetWindowWorkAreaInsets.is_some());
unsafe {
ImGuiPlatformIO_Set_Platform_GetWindowWorkAreaInsets_OutParam(&mut platform_io, None);
}
assert!(platform_io.Platform_GetWindowWorkAreaInsets.is_none());
assert!(platform_io.Renderer_SetWindowSize.is_some());
unsafe {
ImGuiPlatformIO_Set_Renderer_SetWindowSize_PointerParam(&mut platform_io, None);
}
assert!(platform_io.Renderer_SetWindowSize.is_none());
}
}
impl ImVec2 {
#[inline]
pub const fn new(x: f32, y: f32) -> ImVec2 {
ImVec2 { x, y }
}
#[inline]
pub const fn zero() -> ImVec2 {
ImVec2 { x: 0.0, y: 0.0 }
}
}
impl From<[f32; 2]> for ImVec2 {
#[inline]
fn from(array: [f32; 2]) -> ImVec2 {
ImVec2::new(array[0], array[1])
}
}
impl From<(f32, f32)> for ImVec2 {
#[inline]
fn from((x, y): (f32, f32)) -> ImVec2 {
ImVec2::new(x, y)
}
}
impl From<ImVec2> for [f32; 2] {
#[inline]
fn from(v: ImVec2) -> [f32; 2] {
[v.x, v.y]
}
}
impl From<ImVec2> for (f32, f32) {
#[inline]
fn from(v: ImVec2) -> (f32, f32) {
(v.x, v.y)
}
}
impl From<mint::Vector2<f32>> for ImVec2 {
#[inline]
fn from(v: mint::Vector2<f32>) -> ImVec2 {
ImVec2::new(v.x, v.y)
}
}
#[cfg(feature = "glam")]
impl From<glam::Vec2> for ImVec2 {
#[inline]
fn from(v: glam::Vec2) -> ImVec2 {
ImVec2::new(v.x, v.y)
}
}
impl ImVec4 {
#[inline]
pub const fn new(x: f32, y: f32, z: f32, w: f32) -> ImVec4 {
ImVec4 { x, y, z, w }
}
#[inline]
pub const fn zero() -> ImVec4 {
ImVec4 {
x: 0.0,
y: 0.0,
z: 0.0,
w: 0.0,
}
}
}
impl From<[f32; 4]> for ImVec4 {
#[inline]
fn from(array: [f32; 4]) -> ImVec4 {
ImVec4::new(array[0], array[1], array[2], array[3])
}
}
impl From<(f32, f32, f32, f32)> for ImVec4 {
#[inline]
fn from((x, y, z, w): (f32, f32, f32, f32)) -> ImVec4 {
ImVec4::new(x, y, z, w)
}
}
impl From<ImVec4> for [f32; 4] {
#[inline]
fn from(v: ImVec4) -> [f32; 4] {
[v.x, v.y, v.z, v.w]
}
}
impl From<ImVec4> for (f32, f32, f32, f32) {
#[inline]
fn from(v: ImVec4) -> (f32, f32, f32, f32) {
(v.x, v.y, v.z, v.w)
}
}
impl From<mint::Vector4<f32>> for ImVec4 {
#[inline]
fn from(v: mint::Vector4<f32>) -> ImVec4 {
ImVec4::new(v.x, v.y, v.z, v.w)
}
}
#[cfg(feature = "glam")]
impl From<glam::Vec4> for ImVec4 {
#[inline]
fn from(v: glam::Vec4) -> ImVec4 {
ImVec4::new(v.x, v.y, v.z, v.w)
}
}