1#![allow(non_upper_case_globals)]
80#![allow(non_camel_case_types)]
81#![allow(non_snake_case)]
82#![allow(dead_code)]
83#![allow(unnecessary_transmutes)]
84#![allow(clippy::all)]
85#![allow(unpredictable_function_pointer_comparisons)]
88
89mod ffi;
92pub use ffi::*;
93
94pub mod backend_shim;
101
102const _: [(); 4] = [(); std::mem::size_of::<ImWchar>()];
104
105pub const HAS_PLATFORM_IO_OUT_PARAM_HOOKS: bool = cfg!(dear_imgui_rs_platform_io_hooks);
114
115unsafe extern "C" {
116 fn dear_imgui_stack_begin_horizontal_str(
117 str_id: *const std::os::raw::c_char,
118 size: ImVec2,
119 align: f32,
120 );
121 fn dear_imgui_stack_begin_horizontal_ptr(
122 ptr_id: *const std::ffi::c_void,
123 size: ImVec2,
124 align: f32,
125 );
126 fn dear_imgui_stack_begin_horizontal_int(id: std::os::raw::c_int, size: ImVec2, align: f32);
127 fn dear_imgui_stack_begin_horizontal_id(id: ImGuiID, size: ImVec2, align: f32);
128 fn dear_imgui_stack_end_horizontal();
129 fn dear_imgui_stack_begin_vertical_str(
130 str_id: *const std::os::raw::c_char,
131 size: ImVec2,
132 align: f32,
133 );
134 fn dear_imgui_stack_begin_vertical_ptr(
135 ptr_id: *const std::ffi::c_void,
136 size: ImVec2,
137 align: f32,
138 );
139 fn dear_imgui_stack_begin_vertical_int(id: std::os::raw::c_int, size: ImVec2, align: f32);
140 fn dear_imgui_stack_begin_vertical_id(id: ImGuiID, size: ImVec2, align: f32);
141 fn dear_imgui_stack_end_vertical();
142 fn dear_imgui_stack_spring(weight: f32, spacing: f32);
143 fn dear_imgui_stack_suspend_layout();
144 fn dear_imgui_stack_resume_layout();
145}
146
147#[inline]
157pub unsafe fn ImGuiStack_BeginHorizontal_Str(
158 str_id: *const std::os::raw::c_char,
159 size: ImVec2,
160 align: f32,
161) {
162 unsafe { dear_imgui_stack_begin_horizontal_str(str_id, size, align) }
163}
164
165#[inline]
172pub unsafe fn ImGuiStack_BeginHorizontal_Ptr(
173 ptr_id: *const std::ffi::c_void,
174 size: ImVec2,
175 align: f32,
176) {
177 unsafe { dear_imgui_stack_begin_horizontal_ptr(ptr_id, size, align) }
178}
179
180#[inline]
186pub unsafe fn ImGuiStack_BeginHorizontal_Int(id: std::os::raw::c_int, size: ImVec2, align: f32) {
187 unsafe { dear_imgui_stack_begin_horizontal_int(id, size, align) }
188}
189
190#[inline]
196pub unsafe fn ImGuiStack_BeginHorizontal_Id(id: ImGuiID, size: ImVec2, align: f32) {
197 unsafe { dear_imgui_stack_begin_horizontal_id(id, size, align) }
198}
199
200#[inline]
206pub unsafe fn ImGuiStack_EndHorizontal() {
207 unsafe { dear_imgui_stack_end_horizontal() }
208}
209
210#[inline]
217pub unsafe fn ImGuiStack_BeginVertical_Str(
218 str_id: *const std::os::raw::c_char,
219 size: ImVec2,
220 align: f32,
221) {
222 unsafe { dear_imgui_stack_begin_vertical_str(str_id, size, align) }
223}
224
225#[inline]
232pub unsafe fn ImGuiStack_BeginVertical_Ptr(
233 ptr_id: *const std::ffi::c_void,
234 size: ImVec2,
235 align: f32,
236) {
237 unsafe { dear_imgui_stack_begin_vertical_ptr(ptr_id, size, align) }
238}
239
240#[inline]
246pub unsafe fn ImGuiStack_BeginVertical_Int(id: std::os::raw::c_int, size: ImVec2, align: f32) {
247 unsafe { dear_imgui_stack_begin_vertical_int(id, size, align) }
248}
249
250#[inline]
256pub unsafe fn ImGuiStack_BeginVertical_Id(id: ImGuiID, size: ImVec2, align: f32) {
257 unsafe { dear_imgui_stack_begin_vertical_id(id, size, align) }
258}
259
260#[inline]
266pub unsafe fn ImGuiStack_EndVertical() {
267 unsafe { dear_imgui_stack_end_vertical() }
268}
269
270#[inline]
276pub unsafe fn ImGuiStack_Spring(weight: f32, spacing: f32) {
277 unsafe { dear_imgui_stack_spring(weight, spacing) }
278}
279
280#[inline]
286pub unsafe fn ImGuiStack_SuspendLayout() {
287 unsafe { dear_imgui_stack_suspend_layout() }
288}
289
290#[inline]
296pub unsafe fn ImGuiStack_ResumeLayout() {
297 unsafe { dear_imgui_stack_resume_layout() }
298}
299
300#[cfg(dear_imgui_rs_platform_io_hooks)]
301unsafe extern "C" {
302 fn dear_imgui_rs_platform_io_set_platform_get_window_pos(
303 platform_io: *mut ImGuiPlatformIO,
304 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2)>,
305 );
306
307 fn dear_imgui_rs_platform_io_set_platform_get_window_size(
308 platform_io: *mut ImGuiPlatformIO,
309 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2)>,
310 );
311
312 fn dear_imgui_rs_platform_io_set_platform_get_window_framebuffer_scale(
313 platform_io: *mut ImGuiPlatformIO,
314 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2)>,
315 );
316
317 fn dear_imgui_rs_platform_io_set_platform_get_window_work_area_insets(
318 platform_io: *mut ImGuiPlatformIO,
319 user_callback: Option<
320 unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4),
321 >,
322 );
323}
324
325#[inline]
336pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowPos_OutParam(
337 platform_io: *mut ImGuiPlatformIO,
338 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_pos: *mut ImVec2)>,
339) {
340 #[cfg(dear_imgui_rs_platform_io_hooks)]
341 unsafe {
342 dear_imgui_rs_platform_io_set_platform_get_window_pos(platform_io, user_callback)
343 }
344
345 #[cfg(not(dear_imgui_rs_platform_io_hooks))]
346 {
347 let _ = platform_io;
348 if user_callback.is_some() {
349 panic!(
350 "dear-imgui-sys was built without PlatformIO out-parameter hooks; \
351 rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowPos callbacks"
352 );
353 }
354 }
355}
356
357#[inline]
366pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowSize_OutParam(
367 platform_io: *mut ImGuiPlatformIO,
368 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_size: *mut ImVec2)>,
369) {
370 #[cfg(dear_imgui_rs_platform_io_hooks)]
371 unsafe {
372 dear_imgui_rs_platform_io_set_platform_get_window_size(platform_io, user_callback)
373 }
374
375 #[cfg(not(dear_imgui_rs_platform_io_hooks))]
376 {
377 let _ = platform_io;
378 if user_callback.is_some() {
379 panic!(
380 "dear-imgui-sys was built without PlatformIO out-parameter hooks; \
381 rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowSize callbacks"
382 );
383 }
384 }
385}
386
387#[inline]
397pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowFramebufferScale_OutParam(
398 platform_io: *mut ImGuiPlatformIO,
399 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_scale: *mut ImVec2)>,
400) {
401 #[cfg(dear_imgui_rs_platform_io_hooks)]
402 unsafe {
403 dear_imgui_rs_platform_io_set_platform_get_window_framebuffer_scale(
404 platform_io,
405 user_callback,
406 )
407 }
408
409 #[cfg(not(dear_imgui_rs_platform_io_hooks))]
410 {
411 let _ = platform_io;
412 if user_callback.is_some() {
413 panic!(
414 "dear-imgui-sys was built without PlatformIO out-parameter hooks; \
415 rebuild without IMGUI_SYS_SKIP_CC to install \
416 Platform_GetWindowFramebufferScale callbacks"
417 );
418 }
419 }
420}
421
422#[inline]
432pub unsafe fn ImGuiPlatformIO_Set_Platform_GetWindowWorkAreaInsets_OutParam(
433 platform_io: *mut ImGuiPlatformIO,
434 user_callback: Option<unsafe extern "C" fn(vp: *mut ImGuiViewport, out_insets: *mut ImVec4)>,
435) {
436 #[cfg(dear_imgui_rs_platform_io_hooks)]
437 unsafe {
438 dear_imgui_rs_platform_io_set_platform_get_window_work_area_insets(
439 platform_io,
440 user_callback,
441 )
442 }
443
444 #[cfg(not(dear_imgui_rs_platform_io_hooks))]
445 {
446 let _ = platform_io;
447 if user_callback.is_some() {
448 panic!(
449 "dear-imgui-sys was built without PlatformIO out-parameter hooks; \
450 rebuild without IMGUI_SYS_SKIP_CC to install Platform_GetWindowWorkAreaInsets \
451 callbacks"
452 );
453 }
454 }
455}
456
457pub use ImColor as Color;
459pub use ImVec2 as Vector2;
460pub use ImVec4 as Vector4;
461
462pub const IMGUI_VERSION: &str = env!("CARGO_PKG_VERSION");
464
465pub const HAS_DOCKING: bool = true;
467
468#[cfg(feature = "freetype")]
470pub const HAS_FREETYPE: bool = true;
471
472#[cfg(not(feature = "freetype"))]
473pub const HAS_FREETYPE: bool = false;
474
475#[cfg(feature = "wasm")]
477pub const HAS_WASM: bool = true;
478
479#[cfg(not(feature = "wasm"))]
480pub const HAS_WASM: bool = false;
481
482impl ImVec2 {
485 #[inline]
486 pub const fn new(x: f32, y: f32) -> ImVec2 {
487 ImVec2 { x, y }
488 }
489
490 #[inline]
491 pub const fn zero() -> ImVec2 {
492 ImVec2 { x: 0.0, y: 0.0 }
493 }
494}
495
496impl From<[f32; 2]> for ImVec2 {
497 #[inline]
498 fn from(array: [f32; 2]) -> ImVec2 {
499 ImVec2::new(array[0], array[1])
500 }
501}
502
503impl From<(f32, f32)> for ImVec2 {
504 #[inline]
505 fn from((x, y): (f32, f32)) -> ImVec2 {
506 ImVec2::new(x, y)
507 }
508}
509
510impl From<ImVec2> for [f32; 2] {
511 #[inline]
512 fn from(v: ImVec2) -> [f32; 2] {
513 [v.x, v.y]
514 }
515}
516
517impl From<ImVec2> for (f32, f32) {
518 #[inline]
519 fn from(v: ImVec2) -> (f32, f32) {
520 (v.x, v.y)
521 }
522}
523
524impl From<mint::Vector2<f32>> for ImVec2 {
525 #[inline]
526 fn from(v: mint::Vector2<f32>) -> ImVec2 {
527 ImVec2::new(v.x, v.y)
528 }
529}
530
531#[cfg(feature = "glam")]
532impl From<glam::Vec2> for ImVec2 {
533 #[inline]
534 fn from(v: glam::Vec2) -> ImVec2 {
535 ImVec2::new(v.x, v.y)
536 }
537}
538
539impl ImVec4 {
540 #[inline]
541 pub const fn new(x: f32, y: f32, z: f32, w: f32) -> ImVec4 {
542 ImVec4 { x, y, z, w }
543 }
544
545 #[inline]
546 pub const fn zero() -> ImVec4 {
547 ImVec4 {
548 x: 0.0,
549 y: 0.0,
550 z: 0.0,
551 w: 0.0,
552 }
553 }
554}
555
556impl From<[f32; 4]> for ImVec4 {
557 #[inline]
558 fn from(array: [f32; 4]) -> ImVec4 {
559 ImVec4::new(array[0], array[1], array[2], array[3])
560 }
561}
562
563impl From<(f32, f32, f32, f32)> for ImVec4 {
564 #[inline]
565 fn from((x, y, z, w): (f32, f32, f32, f32)) -> ImVec4 {
566 ImVec4::new(x, y, z, w)
567 }
568}
569
570impl From<ImVec4> for [f32; 4] {
571 #[inline]
572 fn from(v: ImVec4) -> [f32; 4] {
573 [v.x, v.y, v.z, v.w]
574 }
575}
576
577impl From<ImVec4> for (f32, f32, f32, f32) {
578 #[inline]
579 fn from(v: ImVec4) -> (f32, f32, f32, f32) {
580 (v.x, v.y, v.z, v.w)
581 }
582}
583
584impl From<mint::Vector4<f32>> for ImVec4 {
585 #[inline]
586 fn from(v: mint::Vector4<f32>) -> ImVec4 {
587 ImVec4::new(v.x, v.y, v.z, v.w)
588 }
589}
590
591#[cfg(feature = "glam")]
592impl From<glam::Vec4> for ImVec4 {
593 #[inline]
594 fn from(v: glam::Vec4) -> ImVec4 {
595 ImVec4::new(v.x, v.y, v.z, v.w)
596 }
597}