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