imgui-bindings 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/lib/imgui.rb CHANGED
@@ -13,6 +13,7 @@ FFI.typedef :pointer, :ImDrawListSharedData
13
13
  FFI.typedef :int, :ImFontAtlasFlags
14
14
  FFI.typedef :int, :ImGuiBackendFlags
15
15
  FFI.typedef :int, :ImGuiButtonFlags
16
+ FFI.typedef :int, :ImGuiChildFlags
16
17
  FFI.typedef :int, :ImGuiCol
17
18
  FFI.typedef :int, :ImGuiColorEditFlags
18
19
  FFI.typedef :int, :ImGuiComboFlags
@@ -110,6 +111,26 @@ ImGuiButtonFlags_MouseButtonMiddle = 4 # 1 << 2 # React on center mouse button
110
111
  ImGuiButtonFlags_MouseButtonMask_ = 7 # ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle
111
112
  ImGuiButtonFlags_MouseButtonDefault_ = 1 # ImGuiButtonFlags_MouseButtonLeft
112
113
 
114
+ # ImGuiChildFlags_
115
+ # Flags for ImGui::BeginChild()
116
+ # (Legacy: bot 0 must always correspond to ImGuiChildFlags_Border to be backward compatible with old API using 'bool border = false'.
117
+ # About using AutoResizeX/AutoResizeY flags:
118
+ # - May be combined with SetNextWindowSizeConstraints() to set a min/max size for each axis (see "Demo->Child->Auto-resize with Constraints").
119
+ # - Size measurement for a given axis is only performed when the child window is within visible boundaries, or is just appearing.
120
+ # - This allows BeginChild() to return false when not within boundaries (e.g. when scrolling), which is more optimal. BUT it won't update its auto-size while clipped.
121
+ # While not perfect, it is a better default behavior as the always-on performance gain is more valuable than the occasional "resizing after becoming visible again" glitch.
122
+ # - You may also use ImGuiChildFlags_AlwaysAutoResize to force an update even when child window is not in view.
123
+ # HOWEVER PLEASE UNDERSTAND THAT DOING SO WILL PREVENT BeginChild() FROM EVER RETURNING FALSE, disabling benefits of coarse clipping.
124
+ ImGuiChildFlags_None = 0 # 0
125
+ ImGuiChildFlags_Border = 1 # 1 << 0 # Show an outer border and enable WindowPadding. (Important: this is always == 1 == true for legacy reason)
126
+ ImGuiChildFlags_AlwaysUseWindowPadding = 2 # 1 << 1 # Pad with style.WindowPadding even if no border are drawn (no padding by default for non-bordered child windows because it makes more sense)
127
+ ImGuiChildFlags_ResizeX = 4 # 1 << 2 # Allow resize from right border (layout direction). Enable .ini saving (unless ImGuiWindowFlags_NoSavedSettings passed to window flags)
128
+ ImGuiChildFlags_ResizeY = 8 # 1 << 3 # Allow resize from bottom border (layout direction). "
129
+ ImGuiChildFlags_AutoResizeX = 16 # 1 << 4 # Enable auto-resizing width. Read "IMPORTANT: Size measurement" details above.
130
+ ImGuiChildFlags_AutoResizeY = 32 # 1 << 5 # Enable auto-resizing height. Read "IMPORTANT: Size measurement" details above.
131
+ ImGuiChildFlags_AlwaysAutoResize = 64 # 1 << 6 # Combined with AutoResizeX/AutoResizeY. Always measure size even when child is hidden, always return true, always disable clipping optimization! NOT RECOMMENDED.
132
+ ImGuiChildFlags_FrameStyle = 128 # 1 << 7 # Style the child window like a framed item: use FrameBg, FrameRounding, FrameBorderSize, FramePadding instead of ChildBg, ChildRounding, ChildBorderSize, WindowPadding.
133
+
113
134
  # ImGuiCol_
114
135
  # Enumeration for PushStyleColor() / PopStyleColor()
115
136
  ImGuiCol_Text = 0 # 0
@@ -201,15 +222,16 @@ ImGuiColorEditFlags_InputMask_ = 402653184 # ImGuiColorEditFlags_InputRGB |
201
222
 
202
223
  # ImGuiComboFlags_
203
224
  # Flags for ImGui::BeginCombo()
204
- ImGuiComboFlags_None = 0 # 0
205
- ImGuiComboFlags_PopupAlignLeft = 1 # 1 << 0 # Align the popup toward the left by default
206
- ImGuiComboFlags_HeightSmall = 2 # 1 << 1 # Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
207
- ImGuiComboFlags_HeightRegular = 4 # 1 << 2 # Max ~8 items visible (default)
208
- ImGuiComboFlags_HeightLarge = 8 # 1 << 3 # Max ~20 items visible
209
- ImGuiComboFlags_HeightLargest = 16 # 1 << 4 # As many fitting items as possible
210
- ImGuiComboFlags_NoArrowButton = 32 # 1 << 5 # Display on the preview box without the square arrow button
211
- ImGuiComboFlags_NoPreview = 64 # 1 << 6 # Display only a square arrow button
212
- ImGuiComboFlags_HeightMask_ = 30 # ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
225
+ ImGuiComboFlags_None = 0 # 0
226
+ ImGuiComboFlags_PopupAlignLeft = 1 # 1 << 0 # Align the popup toward the left by default
227
+ ImGuiComboFlags_HeightSmall = 2 # 1 << 1 # Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
228
+ ImGuiComboFlags_HeightRegular = 4 # 1 << 2 # Max ~8 items visible (default)
229
+ ImGuiComboFlags_HeightLarge = 8 # 1 << 3 # Max ~20 items visible
230
+ ImGuiComboFlags_HeightLargest = 16 # 1 << 4 # As many fitting items as possible
231
+ ImGuiComboFlags_NoArrowButton = 32 # 1 << 5 # Display on the preview box without the square arrow button
232
+ ImGuiComboFlags_NoPreview = 64 # 1 << 6 # Display only a square arrow button
233
+ ImGuiComboFlags_WidthFitPreview = 128 # 1 << 7 # Width dynamically calculated from preview contents
234
+ ImGuiComboFlags_HeightMask_ = 30 # ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
213
235
 
214
236
  # ImGuiCond_
215
237
  # Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
@@ -409,75 +431,89 @@ ImGuiKey_F9 = 580 # 580
409
431
  ImGuiKey_F10 = 581 # 581
410
432
  ImGuiKey_F11 = 582 # 582
411
433
  ImGuiKey_F12 = 583 # 583
412
- ImGuiKey_Apostrophe = 584 # 584 # '
413
- ImGuiKey_Comma = 585 # 585 # ,
414
- ImGuiKey_Minus = 586 # 586 # -
415
- ImGuiKey_Period = 587 # 587 # .
416
- ImGuiKey_Slash = 588 # 588 # /
417
- ImGuiKey_Semicolon = 589 # 589 # ;
418
- ImGuiKey_Equal = 590 # 590 # =
419
- ImGuiKey_LeftBracket = 591 # 591 # [
420
- ImGuiKey_Backslash = 592 # 592 # \ (this text inhibit multiline comment caused by backslash)
421
- ImGuiKey_RightBracket = 593 # 593 # ]
422
- ImGuiKey_GraveAccent = 594 # 594 # `
423
- ImGuiKey_CapsLock = 595 # 595
424
- ImGuiKey_ScrollLock = 596 # 596
425
- ImGuiKey_NumLock = 597 # 597
426
- ImGuiKey_PrintScreen = 598 # 598
427
- ImGuiKey_Pause = 599 # 599
428
- ImGuiKey_Keypad0 = 600 # 600
429
- ImGuiKey_Keypad1 = 601 # 601
430
- ImGuiKey_Keypad2 = 602 # 602
431
- ImGuiKey_Keypad3 = 603 # 603
432
- ImGuiKey_Keypad4 = 604 # 604
433
- ImGuiKey_Keypad5 = 605 # 605
434
- ImGuiKey_Keypad6 = 606 # 606
435
- ImGuiKey_Keypad7 = 607 # 607
436
- ImGuiKey_Keypad8 = 608 # 608
437
- ImGuiKey_Keypad9 = 609 # 609
438
- ImGuiKey_KeypadDecimal = 610 # 610
439
- ImGuiKey_KeypadDivide = 611 # 611
440
- ImGuiKey_KeypadMultiply = 612 # 612
441
- ImGuiKey_KeypadSubtract = 613 # 613
442
- ImGuiKey_KeypadAdd = 614 # 614
443
- ImGuiKey_KeypadEnter = 615 # 615
444
- ImGuiKey_KeypadEqual = 616 # 616
445
- ImGuiKey_GamepadStart = 617 # 617 # Menu (Xbox) + (Switch) Start/Options (PS)
446
- ImGuiKey_GamepadBack = 618 # 618 # View (Xbox) - (Switch) Share (PS)
447
- ImGuiKey_GamepadFaceLeft = 619 # 619 # X (Xbox) Y (Switch) Square (PS) // Tap: Toggle Menu. Hold: Windowing mode (Focus/Move/Resize windows)
448
- ImGuiKey_GamepadFaceRight = 620 # 620 # B (Xbox) A (Switch) Circle (PS) // Cancel / Close / Exit
449
- ImGuiKey_GamepadFaceUp = 621 # 621 # Y (Xbox) X (Switch) Triangle (PS) // Text Input / On-screen Keyboard
450
- ImGuiKey_GamepadFaceDown = 622 # 622 # A (Xbox) B (Switch) Cross (PS) // Activate / Open / Toggle / Tweak
451
- ImGuiKey_GamepadDpadLeft = 623 # 623 # D-pad Left // Move / Tweak / Resize Window (in Windowing mode)
452
- ImGuiKey_GamepadDpadRight = 624 # 624 # D-pad Right // Move / Tweak / Resize Window (in Windowing mode)
453
- ImGuiKey_GamepadDpadUp = 625 # 625 # D-pad Up // Move / Tweak / Resize Window (in Windowing mode)
454
- ImGuiKey_GamepadDpadDown = 626 # 626 # D-pad Down // Move / Tweak / Resize Window (in Windowing mode)
455
- ImGuiKey_GamepadL1 = 627 # 627 # L Bumper (Xbox) L (Switch) L1 (PS) // Tweak Slower / Focus Previous (in Windowing mode)
456
- ImGuiKey_GamepadR1 = 628 # 628 # R Bumper (Xbox) R (Switch) R1 (PS) // Tweak Faster / Focus Next (in Windowing mode)
457
- ImGuiKey_GamepadL2 = 629 # 629 # L Trig. (Xbox) ZL (Switch) L2 (PS) [Analog]
458
- ImGuiKey_GamepadR2 = 630 # 630 # R Trig. (Xbox) ZR (Switch) R2 (PS) [Analog]
459
- ImGuiKey_GamepadL3 = 631 # 631 # L Stick (Xbox) L3 (Switch) L3 (PS)
460
- ImGuiKey_GamepadR3 = 632 # 632 # R Stick (Xbox) R3 (Switch) R3 (PS)
461
- ImGuiKey_GamepadLStickLeft = 633 # 633 # [Analog] // Move Window (in Windowing mode)
462
- ImGuiKey_GamepadLStickRight = 634 # 634 # [Analog] // Move Window (in Windowing mode)
463
- ImGuiKey_GamepadLStickUp = 635 # 635 # [Analog] // Move Window (in Windowing mode)
464
- ImGuiKey_GamepadLStickDown = 636 # 636 # [Analog] // Move Window (in Windowing mode)
465
- ImGuiKey_GamepadRStickLeft = 637 # 637 # [Analog]
466
- ImGuiKey_GamepadRStickRight = 638 # 638 # [Analog]
467
- ImGuiKey_GamepadRStickUp = 639 # 639 # [Analog]
468
- ImGuiKey_GamepadRStickDown = 640 # 640 # [Analog]
469
- ImGuiKey_MouseLeft = 641 # 641
470
- ImGuiKey_MouseRight = 642 # 642
471
- ImGuiKey_MouseMiddle = 643 # 643
472
- ImGuiKey_MouseX1 = 644 # 644
473
- ImGuiKey_MouseX2 = 645 # 645
474
- ImGuiKey_MouseWheelX = 646 # 646
475
- ImGuiKey_MouseWheelY = 647 # 647
476
- ImGuiKey_ReservedForModCtrl = 648 # 648
477
- ImGuiKey_ReservedForModShift = 649 # 649
478
- ImGuiKey_ReservedForModAlt = 650 # 650
479
- ImGuiKey_ReservedForModSuper = 651 # 651
480
- ImGuiKey_COUNT = 652 # 652
434
+ ImGuiKey_F13 = 584 # 584
435
+ ImGuiKey_F14 = 585 # 585
436
+ ImGuiKey_F15 = 586 # 586
437
+ ImGuiKey_F16 = 587 # 587
438
+ ImGuiKey_F17 = 588 # 588
439
+ ImGuiKey_F18 = 589 # 589
440
+ ImGuiKey_F19 = 590 # 590
441
+ ImGuiKey_F20 = 591 # 591
442
+ ImGuiKey_F21 = 592 # 592
443
+ ImGuiKey_F22 = 593 # 593
444
+ ImGuiKey_F23 = 594 # 594
445
+ ImGuiKey_F24 = 595 # 595
446
+ ImGuiKey_Apostrophe = 596 # 596 # '
447
+ ImGuiKey_Comma = 597 # 597 # ,
448
+ ImGuiKey_Minus = 598 # 598 # -
449
+ ImGuiKey_Period = 599 # 599 # .
450
+ ImGuiKey_Slash = 600 # 600 # /
451
+ ImGuiKey_Semicolon = 601 # 601 # ;
452
+ ImGuiKey_Equal = 602 # 602 # =
453
+ ImGuiKey_LeftBracket = 603 # 603 # [
454
+ ImGuiKey_Backslash = 604 # 604 # \ (this text inhibit multiline comment caused by backslash)
455
+ ImGuiKey_RightBracket = 605 # 605 # ]
456
+ ImGuiKey_GraveAccent = 606 # 606 # `
457
+ ImGuiKey_CapsLock = 607 # 607
458
+ ImGuiKey_ScrollLock = 608 # 608
459
+ ImGuiKey_NumLock = 609 # 609
460
+ ImGuiKey_PrintScreen = 610 # 610
461
+ ImGuiKey_Pause = 611 # 611
462
+ ImGuiKey_Keypad0 = 612 # 612
463
+ ImGuiKey_Keypad1 = 613 # 613
464
+ ImGuiKey_Keypad2 = 614 # 614
465
+ ImGuiKey_Keypad3 = 615 # 615
466
+ ImGuiKey_Keypad4 = 616 # 616
467
+ ImGuiKey_Keypad5 = 617 # 617
468
+ ImGuiKey_Keypad6 = 618 # 618
469
+ ImGuiKey_Keypad7 = 619 # 619
470
+ ImGuiKey_Keypad8 = 620 # 620
471
+ ImGuiKey_Keypad9 = 621 # 621
472
+ ImGuiKey_KeypadDecimal = 622 # 622
473
+ ImGuiKey_KeypadDivide = 623 # 623
474
+ ImGuiKey_KeypadMultiply = 624 # 624
475
+ ImGuiKey_KeypadSubtract = 625 # 625
476
+ ImGuiKey_KeypadAdd = 626 # 626
477
+ ImGuiKey_KeypadEnter = 627 # 627
478
+ ImGuiKey_KeypadEqual = 628 # 628
479
+ ImGuiKey_AppBack = 629 # 629 # Available on some keyboard/mouses. Often referred as "Browser Back"
480
+ ImGuiKey_AppForward = 630 # 630
481
+ ImGuiKey_GamepadStart = 631 # 631 # Menu (Xbox) + (Switch) Start/Options (PS)
482
+ ImGuiKey_GamepadBack = 632 # 632 # View (Xbox) - (Switch) Share (PS)
483
+ ImGuiKey_GamepadFaceLeft = 633 # 633 # X (Xbox) Y (Switch) Square (PS) // Tap: Toggle Menu. Hold: Windowing mode (Focus/Move/Resize windows)
484
+ ImGuiKey_GamepadFaceRight = 634 # 634 # B (Xbox) A (Switch) Circle (PS) // Cancel / Close / Exit
485
+ ImGuiKey_GamepadFaceUp = 635 # 635 # Y (Xbox) X (Switch) Triangle (PS) // Text Input / On-screen Keyboard
486
+ ImGuiKey_GamepadFaceDown = 636 # 636 # A (Xbox) B (Switch) Cross (PS) // Activate / Open / Toggle / Tweak
487
+ ImGuiKey_GamepadDpadLeft = 637 # 637 # D-pad Left // Move / Tweak / Resize Window (in Windowing mode)
488
+ ImGuiKey_GamepadDpadRight = 638 # 638 # D-pad Right // Move / Tweak / Resize Window (in Windowing mode)
489
+ ImGuiKey_GamepadDpadUp = 639 # 639 # D-pad Up // Move / Tweak / Resize Window (in Windowing mode)
490
+ ImGuiKey_GamepadDpadDown = 640 # 640 # D-pad Down // Move / Tweak / Resize Window (in Windowing mode)
491
+ ImGuiKey_GamepadL1 = 641 # 641 # L Bumper (Xbox) L (Switch) L1 (PS) // Tweak Slower / Focus Previous (in Windowing mode)
492
+ ImGuiKey_GamepadR1 = 642 # 642 # R Bumper (Xbox) R (Switch) R1 (PS) // Tweak Faster / Focus Next (in Windowing mode)
493
+ ImGuiKey_GamepadL2 = 643 # 643 # L Trig. (Xbox) ZL (Switch) L2 (PS) [Analog]
494
+ ImGuiKey_GamepadR2 = 644 # 644 # R Trig. (Xbox) ZR (Switch) R2 (PS) [Analog]
495
+ ImGuiKey_GamepadL3 = 645 # 645 # L Stick (Xbox) L3 (Switch) L3 (PS)
496
+ ImGuiKey_GamepadR3 = 646 # 646 # R Stick (Xbox) R3 (Switch) R3 (PS)
497
+ ImGuiKey_GamepadLStickLeft = 647 # 647 # [Analog] // Move Window (in Windowing mode)
498
+ ImGuiKey_GamepadLStickRight = 648 # 648 # [Analog] // Move Window (in Windowing mode)
499
+ ImGuiKey_GamepadLStickUp = 649 # 649 # [Analog] // Move Window (in Windowing mode)
500
+ ImGuiKey_GamepadLStickDown = 650 # 650 # [Analog] // Move Window (in Windowing mode)
501
+ ImGuiKey_GamepadRStickLeft = 651 # 651 # [Analog]
502
+ ImGuiKey_GamepadRStickRight = 652 # 652 # [Analog]
503
+ ImGuiKey_GamepadRStickUp = 653 # 653 # [Analog]
504
+ ImGuiKey_GamepadRStickDown = 654 # 654 # [Analog]
505
+ ImGuiKey_MouseLeft = 655 # 655
506
+ ImGuiKey_MouseRight = 656 # 656
507
+ ImGuiKey_MouseMiddle = 657 # 657
508
+ ImGuiKey_MouseX1 = 658 # 658
509
+ ImGuiKey_MouseX2 = 659 # 659
510
+ ImGuiKey_MouseWheelX = 660 # 660
511
+ ImGuiKey_MouseWheelY = 661 # 661
512
+ ImGuiKey_ReservedForModCtrl = 662 # 662
513
+ ImGuiKey_ReservedForModShift = 663 # 663
514
+ ImGuiKey_ReservedForModAlt = 664 # 664
515
+ ImGuiKey_ReservedForModSuper = 665 # 665
516
+ ImGuiKey_COUNT = 666 # 666
481
517
  ImGuiMod_None = 0 # 0
482
518
  ImGuiMod_Ctrl = 4096 # 1 << 12 # Ctrl
483
519
  ImGuiMod_Shift = 8192 # 1 << 13 # Shift
@@ -486,10 +522,10 @@ ImGuiMod_Super = 32768 # 1 << 15 # Cmd/Super/Windows
486
522
  ImGuiMod_Shortcut = 2048 # 1 << 11 # Alias for Ctrl (non-macOS) _or_ Super (macOS).
487
523
  ImGuiMod_Mask_ = 63488 # 0xF800 # 5-bits
488
524
  ImGuiKey_NamedKey_BEGIN = 512 # 512
489
- ImGuiKey_NamedKey_END = 652 # ImGuiKey_COUNT
490
- ImGuiKey_NamedKey_COUNT = 140 # ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN
491
- ImGuiKey_KeysData_SIZE = 652 # ImGuiKey_COUNT # Size of KeysData[]: hold legacy 0..512 keycodes + named keys
492
- ImGuiKey_KeysData_OFFSET = 0 # 0 # Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET) index.
525
+ ImGuiKey_NamedKey_END = 666 # ImGuiKey_COUNT
526
+ ImGuiKey_NamedKey_COUNT = 154 # ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN
527
+ ImGuiKey_KeysData_SIZE = 154 # ImGuiKey_NamedKey_COUNT # Size of KeysData[]: hold legacy 0..512 keycodes + named keys
528
+ ImGuiKey_KeysData_OFFSET = 512 # ImGuiKey_NamedKey_BEGIN # Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET) index.
493
529
 
494
530
  # ImGuiMouseButton_
495
531
  # Identify a mouse button.
@@ -524,28 +560,6 @@ ImGuiMouseSource_TouchScreen = 1 # 1 # Input is coming from a touch screen (no h
524
560
  ImGuiMouseSource_Pen = 2 # 2 # Input is coming from a pressure/magnetic pen (often used in conjunction with high-sampling rates).
525
561
  ImGuiMouseSource_COUNT = 3 # 3
526
562
 
527
- # ImGuiNavInput
528
- # OBSOLETED in 1.88 (from July 2022): ImGuiNavInput and io.NavInputs[].
529
- # Official backends between 1.60 and 1.86: will keep working and feed gamepad inputs as long as IMGUI_DISABLE_OBSOLETE_KEYIO is not set.
530
- # Custom backends: feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
531
- ImGuiNavInput_Activate = 0 # 0
532
- ImGuiNavInput_Cancel = 1 # 1
533
- ImGuiNavInput_Input = 2 # 2
534
- ImGuiNavInput_Menu = 3 # 3
535
- ImGuiNavInput_DpadLeft = 4 # 4
536
- ImGuiNavInput_DpadRight = 5 # 5
537
- ImGuiNavInput_DpadUp = 6 # 6
538
- ImGuiNavInput_DpadDown = 7 # 7
539
- ImGuiNavInput_LStickLeft = 8 # 8
540
- ImGuiNavInput_LStickRight = 9 # 9
541
- ImGuiNavInput_LStickUp = 10 # 10
542
- ImGuiNavInput_LStickDown = 11 # 11
543
- ImGuiNavInput_FocusPrev = 12 # 12
544
- ImGuiNavInput_FocusNext = 13 # 13
545
- ImGuiNavInput_TweakSlow = 14 # 14
546
- ImGuiNavInput_TweakFast = 15 # 15
547
- ImGuiNavInput_COUNT = 16 # 16
548
-
549
563
  # ImGuiPopupFlags_
550
564
  # Flags for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() functions.
551
565
  # - To be backward compatible with older API which took an 'int mouse_button = 1' argument, we need to treat
@@ -571,7 +585,7 @@ ImGuiPopupFlags_AnyPopup = 384 # ImGuiPopupFlags_AnyPopupId | ImGu
571
585
  # Flags for ImGui::Selectable()
572
586
  ImGuiSelectableFlags_None = 0 # 0
573
587
  ImGuiSelectableFlags_DontClosePopups = 1 # 1 << 0 # Clicking this doesn't close parent popup window
574
- ImGuiSelectableFlags_SpanAllColumns = 2 # 1 << 1 # Selectable frame can span all columns (text will still fit in current column)
588
+ ImGuiSelectableFlags_SpanAllColumns = 2 # 1 << 1 # Frame will span all columns of its container table (text will still fit in current column)
575
589
  ImGuiSelectableFlags_AllowDoubleClick = 4 # 1 << 2 # Generate press events on double clicks too
576
590
  ImGuiSelectableFlags_Disabled = 8 # 1 << 3 # Cannot be selected, display grayed out text
577
591
  ImGuiSelectableFlags_AllowOverlap = 16 # 1 << 4 # (WIP) Hit testing to allow subsequent widgets to overlap this one
@@ -624,12 +638,13 @@ ImGuiStyleVar_ScrollbarRounding = 19 # 19 # float ScrollbarRounding
624
638
  ImGuiStyleVar_GrabMinSize = 20 # 20 # float GrabMinSize
625
639
  ImGuiStyleVar_GrabRounding = 21 # 21 # float GrabRounding
626
640
  ImGuiStyleVar_TabRounding = 22 # 22 # float TabRounding
627
- ImGuiStyleVar_ButtonTextAlign = 23 # 23 # ImVec2 ButtonTextAlign
628
- ImGuiStyleVar_SelectableTextAlign = 24 # 24 # ImVec2 SelectableTextAlign
629
- ImGuiStyleVar_SeparatorTextBorderSize = 25 # 25 # float SeparatorTextBorderSize
630
- ImGuiStyleVar_SeparatorTextAlign = 26 # 26 # ImVec2 SeparatorTextAlign
631
- ImGuiStyleVar_SeparatorTextPadding = 27 # 27 # ImVec2 SeparatorTextPadding
632
- ImGuiStyleVar_COUNT = 28 # 28
641
+ ImGuiStyleVar_TabBarBorderSize = 23 # 23 # float TabBarBorderSize
642
+ ImGuiStyleVar_ButtonTextAlign = 24 # 24 # ImVec2 ButtonTextAlign
643
+ ImGuiStyleVar_SelectableTextAlign = 25 # 25 # ImVec2 SelectableTextAlign
644
+ ImGuiStyleVar_SeparatorTextBorderSize = 26 # 26 # float SeparatorTextBorderSize
645
+ ImGuiStyleVar_SeparatorTextAlign = 27 # 27 # ImVec2 SeparatorTextAlign
646
+ ImGuiStyleVar_SeparatorTextPadding = 28 # 28 # ImVec2 SeparatorTextPadding
647
+ ImGuiStyleVar_COUNT = 29 # 29
633
648
 
634
649
  # ImGuiTabBarFlags_
635
650
  # Flags for ImGui::BeginTabBar()
@@ -687,12 +702,13 @@ ImGuiTableColumnFlags_NoClip = 256 # 1 << 8 # Disable clipping f
687
702
  ImGuiTableColumnFlags_NoSort = 512 # 1 << 9 # Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
688
703
  ImGuiTableColumnFlags_NoSortAscending = 1024 # 1 << 10 # Disable ability to sort in the ascending direction.
689
704
  ImGuiTableColumnFlags_NoSortDescending = 2048 # 1 << 11 # Disable ability to sort in the descending direction.
690
- ImGuiTableColumnFlags_NoHeaderLabel = 4096 # 1 << 12 # TableHeadersRow() will not submit label for this column. Convenient for some small columns. Name will still appear in context menu.
705
+ ImGuiTableColumnFlags_NoHeaderLabel = 4096 # 1 << 12 # TableHeadersRow() will not submit horizontal label for this column. Convenient for some small columns. Name will still appear in context menu or in angled headers.
691
706
  ImGuiTableColumnFlags_NoHeaderWidth = 8192 # 1 << 13 # Disable header text width contribution to automatic column width.
692
707
  ImGuiTableColumnFlags_PreferSortAscending = 16384 # 1 << 14 # Make the initial sort direction Ascending when first sorting on this column (default).
693
708
  ImGuiTableColumnFlags_PreferSortDescending = 32768 # 1 << 15 # Make the initial sort direction Descending when first sorting on this column.
694
709
  ImGuiTableColumnFlags_IndentEnable = 65536 # 1 << 16 # Use current Indent value when entering cell (default for column 0).
695
710
  ImGuiTableColumnFlags_IndentDisable = 131072 # 1 << 17 # Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored.
711
+ ImGuiTableColumnFlags_AngledHeader = 262144 # 1 << 18 # TableHeadersRow() will submit an angled header row for this column. Note this will add an extra row.
696
712
  ImGuiTableColumnFlags_IsEnabled = 16777216 # 1 << 24 # Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags.
697
713
  ImGuiTableColumnFlags_IsVisible = 33554432 # 1 << 25 # Status: is visible == is enabled AND not clipped by scrolling.
698
714
  ImGuiTableColumnFlags_IsSorted = 67108864 # 1 << 26 # Status: is currently part of the sort specs
@@ -725,42 +741,43 @@ ImGuiTableColumnFlags_NoDirectResize_ = 1073741824 # 1 << 30 # [Internal] Disabl
725
741
  # - Using Stretch columns OFTEN DOES NOT MAKE SENSE if ScrollX is on, UNLESS you have specified a value for 'inner_width' in BeginTable().
726
742
  # If you specify a value for 'inner_width' then effectively the scrolling space is known and Stretch or mixed Fixed/Stretch columns become meaningful again.
727
743
  # - Read on documentation at the top of imgui_tables.cpp for details.
728
- ImGuiTableFlags_None = 0 # 0
729
- ImGuiTableFlags_Resizable = 1 # 1 << 0 # Enable resizing columns.
730
- ImGuiTableFlags_Reorderable = 2 # 1 << 1 # Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers)
731
- ImGuiTableFlags_Hideable = 4 # 1 << 2 # Enable hiding/disabling columns in context menu.
732
- ImGuiTableFlags_Sortable = 8 # 1 << 3 # Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see ImGuiTableFlags_SortMulti and ImGuiTableFlags_SortTristate.
733
- ImGuiTableFlags_NoSavedSettings = 16 # 1 << 4 # Disable persisting columns order, width and sort settings in the .ini file.
734
- ImGuiTableFlags_ContextMenuInBody = 32 # 1 << 5 # Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow().
735
- ImGuiTableFlags_RowBg = 64 # 1 << 6 # Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually)
736
- ImGuiTableFlags_BordersInnerH = 128 # 1 << 7 # Draw horizontal borders between rows.
737
- ImGuiTableFlags_BordersOuterH = 256 # 1 << 8 # Draw horizontal borders at the top and bottom.
738
- ImGuiTableFlags_BordersInnerV = 512 # 1 << 9 # Draw vertical borders between columns.
739
- ImGuiTableFlags_BordersOuterV = 1024 # 1 << 10 # Draw vertical borders on the left and right sides.
740
- ImGuiTableFlags_BordersH = 384 # ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH # Draw horizontal borders.
741
- ImGuiTableFlags_BordersV = 1536 # ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV # Draw vertical borders.
742
- ImGuiTableFlags_BordersInner = 640 # ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH # Draw inner borders.
743
- ImGuiTableFlags_BordersOuter = 1280 # ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH # Draw outer borders.
744
- ImGuiTableFlags_Borders = 1920 # ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter # Draw all borders.
745
- ImGuiTableFlags_NoBordersInBody = 2048 # 1 << 11 # [ALPHA] Disable vertical borders in columns Body (borders will always appear in Headers). -> May move to style
746
- ImGuiTableFlags_NoBordersInBodyUntilResize = 4096 # 1 << 12 # [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appear in Headers). -> May move to style
747
- ImGuiTableFlags_SizingFixedFit = 8192 # 1 << 13 # Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width.
748
- ImGuiTableFlags_SizingFixedSame = 16384 # 2 << 13 # Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible.
749
- ImGuiTableFlags_SizingStretchProp = 24576 # 3 << 13 # Columns default to _WidthStretch with default weights proportional to each columns contents widths.
750
- ImGuiTableFlags_SizingStretchSame = 32768 # 4 << 13 # Columns default to _WidthStretch with default weights all equal, unless overridden by TableSetupColumn().
751
- ImGuiTableFlags_NoHostExtendX = 65536 # 1 << 16 # Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
752
- ImGuiTableFlags_NoHostExtendY = 131072 # 1 << 17 # Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.
753
- ImGuiTableFlags_NoKeepColumnsVisible = 262144 # 1 << 18 # Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable.
754
- ImGuiTableFlags_PreciseWidths = 524288 # 1 << 19 # Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.
755
- ImGuiTableFlags_NoClip = 1048576 # 1 << 20 # Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze().
756
- ImGuiTableFlags_PadOuterX = 2097152 # 1 << 21 # Default if BordersOuterV is on. Enable outermost padding. Generally desirable if you have headers.
757
- ImGuiTableFlags_NoPadOuterX = 4194304 # 1 << 22 # Default if BordersOuterV is off. Disable outermost padding.
758
- ImGuiTableFlags_NoPadInnerX = 8388608 # 1 << 23 # Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off).
759
- ImGuiTableFlags_ScrollX = 16777216 # 1 << 24 # Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this creates a child window, ScrollY is currently generally recommended when using ScrollX.
760
- ImGuiTableFlags_ScrollY = 33554432 # 1 << 25 # Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
761
- ImGuiTableFlags_SortMulti = 67108864 # 1 << 26 # Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
762
- ImGuiTableFlags_SortTristate = 134217728 # 1 << 27 # Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
763
- ImGuiTableFlags_SizingMask_ = 57344 # ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame
744
+ ImGuiTableFlags_None = 0 # 0
745
+ ImGuiTableFlags_Resizable = 1 # 1 << 0 # Enable resizing columns.
746
+ ImGuiTableFlags_Reorderable = 2 # 1 << 1 # Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers)
747
+ ImGuiTableFlags_Hideable = 4 # 1 << 2 # Enable hiding/disabling columns in context menu.
748
+ ImGuiTableFlags_Sortable = 8 # 1 << 3 # Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see ImGuiTableFlags_SortMulti and ImGuiTableFlags_SortTristate.
749
+ ImGuiTableFlags_NoSavedSettings = 16 # 1 << 4 # Disable persisting columns order, width and sort settings in the .ini file.
750
+ ImGuiTableFlags_ContextMenuInBody = 32 # 1 << 5 # Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow().
751
+ ImGuiTableFlags_RowBg = 64 # 1 << 6 # Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually)
752
+ ImGuiTableFlags_BordersInnerH = 128 # 1 << 7 # Draw horizontal borders between rows.
753
+ ImGuiTableFlags_BordersOuterH = 256 # 1 << 8 # Draw horizontal borders at the top and bottom.
754
+ ImGuiTableFlags_BordersInnerV = 512 # 1 << 9 # Draw vertical borders between columns.
755
+ ImGuiTableFlags_BordersOuterV = 1024 # 1 << 10 # Draw vertical borders on the left and right sides.
756
+ ImGuiTableFlags_BordersH = 384 # ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH # Draw horizontal borders.
757
+ ImGuiTableFlags_BordersV = 1536 # ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV # Draw vertical borders.
758
+ ImGuiTableFlags_BordersInner = 640 # ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH # Draw inner borders.
759
+ ImGuiTableFlags_BordersOuter = 1280 # ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH # Draw outer borders.
760
+ ImGuiTableFlags_Borders = 1920 # ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter # Draw all borders.
761
+ ImGuiTableFlags_NoBordersInBody = 2048 # 1 << 11 # [ALPHA] Disable vertical borders in columns Body (borders will always appear in Headers). -> May move to style
762
+ ImGuiTableFlags_NoBordersInBodyUntilResize = 4096 # 1 << 12 # [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appear in Headers). -> May move to style
763
+ ImGuiTableFlags_SizingFixedFit = 8192 # 1 << 13 # Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width.
764
+ ImGuiTableFlags_SizingFixedSame = 16384 # 2 << 13 # Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible.
765
+ ImGuiTableFlags_SizingStretchProp = 24576 # 3 << 13 # Columns default to _WidthStretch with default weights proportional to each columns contents widths.
766
+ ImGuiTableFlags_SizingStretchSame = 32768 # 4 << 13 # Columns default to _WidthStretch with default weights all equal, unless overridden by TableSetupColumn().
767
+ ImGuiTableFlags_NoHostExtendX = 65536 # 1 << 16 # Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
768
+ ImGuiTableFlags_NoHostExtendY = 131072 # 1 << 17 # Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.
769
+ ImGuiTableFlags_NoKeepColumnsVisible = 262144 # 1 << 18 # Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable.
770
+ ImGuiTableFlags_PreciseWidths = 524288 # 1 << 19 # Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.
771
+ ImGuiTableFlags_NoClip = 1048576 # 1 << 20 # Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze().
772
+ ImGuiTableFlags_PadOuterX = 2097152 # 1 << 21 # Default if BordersOuterV is on. Enable outermost padding. Generally desirable if you have headers.
773
+ ImGuiTableFlags_NoPadOuterX = 4194304 # 1 << 22 # Default if BordersOuterV is off. Disable outermost padding.
774
+ ImGuiTableFlags_NoPadInnerX = 8388608 # 1 << 23 # Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off).
775
+ ImGuiTableFlags_ScrollX = 16777216 # 1 << 24 # Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this creates a child window, ScrollY is currently generally recommended when using ScrollX.
776
+ ImGuiTableFlags_ScrollY = 33554432 # 1 << 25 # Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
777
+ ImGuiTableFlags_SortMulti = 67108864 # 1 << 26 # Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
778
+ ImGuiTableFlags_SortTristate = 134217728 # 1 << 27 # Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
779
+ ImGuiTableFlags_HighlightHoveredColumn = 268435456 # 1 << 28 # Highlight column headers when hovered (may evolve into a fuller highlight)
780
+ ImGuiTableFlags_SizingMask_ = 57344 # ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame
764
781
 
765
782
  # ImGuiTableRowFlags_
766
783
  # Flags for ImGui::TableNextRow()
@@ -769,22 +786,23 @@ ImGuiTableRowFlags_Headers = 1 # 1 << 0 # Identify header row (set default backg
769
786
 
770
787
  # ImGuiTreeNodeFlags_
771
788
  # Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
772
- ImGuiTreeNodeFlags_None = 0 # 0
773
- ImGuiTreeNodeFlags_Selected = 1 # 1 << 0 # Draw as selected
774
- ImGuiTreeNodeFlags_Framed = 2 # 1 << 1 # Draw frame with background (e.g. for CollapsingHeader)
775
- ImGuiTreeNodeFlags_AllowOverlap = 4 # 1 << 2 # Hit testing to allow subsequent widgets to overlap this one
776
- ImGuiTreeNodeFlags_NoTreePushOnOpen = 8 # 1 << 3 # Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
777
- ImGuiTreeNodeFlags_NoAutoOpenOnLog = 16 # 1 << 4 # Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
778
- ImGuiTreeNodeFlags_DefaultOpen = 32 # 1 << 5 # Default node to be open
779
- ImGuiTreeNodeFlags_OpenOnDoubleClick = 64 # 1 << 6 # Need double-click to open node
780
- ImGuiTreeNodeFlags_OpenOnArrow = 128 # 1 << 7 # Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
781
- ImGuiTreeNodeFlags_Leaf = 256 # 1 << 8 # No collapsing, no arrow (use as a convenience for leaf nodes).
782
- ImGuiTreeNodeFlags_Bullet = 512 # 1 << 9 # Display a bullet instead of arrow. IMPORTANT: node can still be marked open/close if you don't set the _Leaf flag!
783
- ImGuiTreeNodeFlags_FramePadding = 1024 # 1 << 10 # Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
784
- ImGuiTreeNodeFlags_SpanAvailWidth = 2048 # 1 << 11 # Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
785
- ImGuiTreeNodeFlags_SpanFullWidth = 4096 # 1 << 12 # Extend hit box to the left-most and right-most edges (bypass the indented area).
786
- ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 8192 # 1 << 13 # (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
787
- ImGuiTreeNodeFlags_CollapsingHeader = 26 # ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
789
+ ImGuiTreeNodeFlags_None = 0 # 0
790
+ ImGuiTreeNodeFlags_Selected = 1 # 1 << 0 # Draw as selected
791
+ ImGuiTreeNodeFlags_Framed = 2 # 1 << 1 # Draw frame with background (e.g. for CollapsingHeader)
792
+ ImGuiTreeNodeFlags_AllowOverlap = 4 # 1 << 2 # Hit testing to allow subsequent widgets to overlap this one
793
+ ImGuiTreeNodeFlags_NoTreePushOnOpen = 8 # 1 << 3 # Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
794
+ ImGuiTreeNodeFlags_NoAutoOpenOnLog = 16 # 1 << 4 # Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
795
+ ImGuiTreeNodeFlags_DefaultOpen = 32 # 1 << 5 # Default node to be open
796
+ ImGuiTreeNodeFlags_OpenOnDoubleClick = 64 # 1 << 6 # Need double-click to open node
797
+ ImGuiTreeNodeFlags_OpenOnArrow = 128 # 1 << 7 # Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
798
+ ImGuiTreeNodeFlags_Leaf = 256 # 1 << 8 # No collapsing, no arrow (use as a convenience for leaf nodes).
799
+ ImGuiTreeNodeFlags_Bullet = 512 # 1 << 9 # Display a bullet instead of arrow. IMPORTANT: node can still be marked open/close if you don't set the _Leaf flag!
800
+ ImGuiTreeNodeFlags_FramePadding = 1024 # 1 << 10 # Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
801
+ ImGuiTreeNodeFlags_SpanAvailWidth = 2048 # 1 << 11 # Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
802
+ ImGuiTreeNodeFlags_SpanFullWidth = 4096 # 1 << 12 # Extend hit box to the left-most and right-most edges (bypass the indented area).
803
+ ImGuiTreeNodeFlags_SpanAllColumns = 8192 # 1 << 13 # Frame will span all columns of its container table (text will still fit in current column)
804
+ ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 16384 # 1 << 14 # (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
805
+ ImGuiTreeNodeFlags_CollapsingHeader = 26 # ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
788
806
 
789
807
  # ImGuiViewportFlags_
790
808
  # Flags stored in ImGuiViewport::Flags, giving indications to the platform backends.
@@ -813,13 +831,12 @@ ImGuiWindowFlags_NoFocusOnAppearing = 4096 # 1 << 12 # Disable taking fo
813
831
  ImGuiWindowFlags_NoBringToFrontOnFocus = 8192 # 1 << 13 # Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
814
832
  ImGuiWindowFlags_AlwaysVerticalScrollbar = 16384 # 1 << 14 # Always show vertical scrollbar (even if ContentSize.y < Size.y)
815
833
  ImGuiWindowFlags_AlwaysHorizontalScrollbar = 32768 # 1<< 15 # Always show horizontal scrollbar (even if ContentSize.x < Size.x)
816
- ImGuiWindowFlags_AlwaysUseWindowPadding = 65536 # 1 << 16 # Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
817
- ImGuiWindowFlags_NoNavInputs = 262144 # 1 << 18 # No gamepad/keyboard navigation within the window
818
- ImGuiWindowFlags_NoNavFocus = 524288 # 1 << 19 # No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
819
- ImGuiWindowFlags_UnsavedDocument = 1048576 # 1 << 20 # Display a dot next to the title. When used in a tab/docking context, tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
820
- ImGuiWindowFlags_NoNav = 786432 # ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus
834
+ ImGuiWindowFlags_NoNavInputs = 65536 # 1 << 16 # No gamepad/keyboard navigation within the window
835
+ ImGuiWindowFlags_NoNavFocus = 131072 # 1 << 17 # No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
836
+ ImGuiWindowFlags_UnsavedDocument = 262144 # 1 << 18 # Display a dot next to the title. When used in a tab/docking context, tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
837
+ ImGuiWindowFlags_NoNav = 196608 # ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus
821
838
  ImGuiWindowFlags_NoDecoration = 43 # ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse
822
- ImGuiWindowFlags_NoInputs = 786944 # ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus
839
+ ImGuiWindowFlags_NoInputs = 197120 # ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus
823
840
  ImGuiWindowFlags_NavFlattened = 8388608 # 1 << 23 # [BETA] On child window: allow gamepad/keyboard navigation to cross over parent border to this child or between sibling child windows.
824
841
  ImGuiWindowFlags_ChildWindow = 16777216 # 1 << 24 # Don't use! For internal use by BeginChild()
825
842
  ImGuiWindowFlags_Tooltip = 33554432 # 1 << 25 # Don't use! For internal use by BeginTooltip()
@@ -865,9 +882,9 @@ end
865
882
  # This is used by the Columns/Tables API, so items of each column can be batched together in a same draw call.
866
883
  class ImDrawListSplitter < FFI::Struct
867
884
  layout(
868
- :_Current, :int, # Current channel number (0)
869
- :_Count, :int, # Number of active channels (1+)
870
- :_Channels, ImVector.by_value # Draw channels (not resized down so _Count might be < Channels.Size)
885
+ :_Current, :int,
886
+ :_Count, :int,
887
+ :_Channels, ImVector.by_value
871
888
  )
872
889
 
873
890
  def Clear()
@@ -907,13 +924,13 @@ end
907
924
  # - The ClipRect/TextureId/VtxOffset fields must be contiguous as we memcmp() them together (this is asserted for).
908
925
  class ImDrawCmd < FFI::Struct
909
926
  layout(
910
- :ClipRect, ImVec4.by_value, # 4*4 // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
911
- :TextureId, :pointer, # 4-8 // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
912
- :VtxOffset, :uint, # 4 // Start offset in vertex buffer. ImGuiBackendFlags_RendererHasVtxOffset: always 0, otherwise may be >0 to support meshes larger than 64K vertices with 16-bit indices.
913
- :IdxOffset, :uint, # 4 // Start offset in index buffer.
914
- :ElemCount, :uint, # 4 // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
915
- :UserCallback, :pointer, # 4-8 // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
916
- :UserCallbackData, :pointer # 4-8 // The draw callback code can access this.
927
+ :ClipRect, ImVec4.by_value,
928
+ :TextureId, :pointer,
929
+ :VtxOffset, :uint,
930
+ :IdxOffset, :uint,
931
+ :ElemCount, :uint,
932
+ :UserCallback, :pointer,
933
+ :UserCallbackData, :pointer
917
934
  )
918
935
 
919
936
  def GetTexID()
@@ -950,21 +967,21 @@ end
950
967
  # Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
951
968
  class ImDrawList < FFI::Struct
952
969
  layout(
953
- :CmdBuffer, ImVector.by_value, # Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
954
- :IdxBuffer, ImVector.by_value, # Index buffer. Each command consume ImDrawCmd::ElemCount of those
955
- :VtxBuffer, ImVector.by_value, # Vertex buffer.
956
- :Flags, :int, # Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
957
- :_VtxCurrentIdx, :uint, # [Internal] generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
958
- :_Data, :pointer, # Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
959
- :_OwnerName, :pointer, # Pointer to owner window's name for debugging
960
- :_VtxWritePtr, ImDrawVert.ptr, # [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
961
- :_IdxWritePtr, :pointer, # [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
962
- :_ClipRectStack, ImVector.by_value, # [Internal]
963
- :_TextureIdStack, ImVector.by_value, # [Internal]
964
- :_Path, ImVector.by_value, # [Internal] current path building
965
- :_CmdHeader, ImDrawCmdHeader.by_value, # [Internal] template of active commands. Fields should match those of CmdBuffer.back().
966
- :_Splitter, ImDrawListSplitter.by_value, # [Internal] for channels api (note: prefer using your own persistent instance of ImDrawListSplitter!)
967
- :_FringeScale, :float # [Internal] anti-alias fringe is scaled by this value, this helps to keep things sharp while zooming at vertex buffer content
970
+ :CmdBuffer, ImVector.by_value,
971
+ :IdxBuffer, ImVector.by_value,
972
+ :VtxBuffer, ImVector.by_value,
973
+ :Flags, :int,
974
+ :_VtxCurrentIdx, :uint,
975
+ :_Data, :pointer,
976
+ :_OwnerName, :pointer,
977
+ :_VtxWritePtr, ImDrawVert.ptr,
978
+ :_IdxWritePtr, :pointer,
979
+ :_ClipRectStack, ImVector.by_value,
980
+ :_TextureIdStack, ImVector.by_value,
981
+ :_Path, ImVector.by_value,
982
+ :_CmdHeader, ImDrawCmdHeader.by_value,
983
+ :_Splitter, ImDrawListSplitter.by_value,
984
+ :_FringeScale, :float
968
985
  )
969
986
 
970
987
  def AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments = 0)
@@ -995,6 +1012,14 @@ class ImDrawList < FFI::Struct
995
1012
  ImGui::ImDrawList_AddDrawCmd(self)
996
1013
  end
997
1014
 
1015
+ def AddEllipse(center, radius_x, radius_y, col, rot = 0.0, num_segments = 0, thickness = 1.0)
1016
+ ImGui::ImDrawList_AddEllipse(self, center, radius_x, radius_y, col, rot, num_segments, thickness)
1017
+ end
1018
+
1019
+ def AddEllipseFilled(center, radius_x, radius_y, col, rot = 0.0, num_segments = 0)
1020
+ ImGui::ImDrawList_AddEllipseFilled(self, center, radius_x, radius_y, col, rot, num_segments)
1021
+ end
1022
+
998
1023
  def AddImage(user_texture_id, p_min, p_max, uv_min = ImVec2.create(0,0), uv_max = ImVec2.create(1,1), col = ImColor.col32(255,255,255,255))
999
1024
  ImGui::ImDrawList_AddImage(self, user_texture_id, p_min, p_max, uv_min, uv_max, col)
1000
1025
  end
@@ -1111,6 +1136,10 @@ class ImDrawList < FFI::Struct
1111
1136
  ImGui::ImDrawList_PathClear(self)
1112
1137
  end
1113
1138
 
1139
+ def PathEllipticalArcTo(center, radius_x, radius_y, rot, a_min, a_max, num_segments = 0)
1140
+ ImGui::ImDrawList_PathEllipticalArcTo(self, center, radius_x, radius_y, rot, a_min, a_max, num_segments)
1141
+ end
1142
+
1114
1143
  def PathFillConvex(col)
1115
1144
  ImGui::ImDrawList_PathFillConvex(self, col)
1116
1145
  end
@@ -1248,28 +1277,28 @@ end
1248
1277
  # - This is an old API and it is currently awkward for those and various other reasons! We will address them in the future!
1249
1278
  class ImFontAtlas < FFI::Struct
1250
1279
  layout(
1251
- :Flags, :int, # Build flags (see ImFontAtlasFlags_)
1252
- :TexID, :pointer, # User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
1253
- :TexDesiredWidth, :int, # Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
1254
- :TexGlyphPadding, :int, # Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0 (will also need to set AntiAliasedLinesUseTex = false).
1255
- :Locked, :bool, # Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
1256
- :UserData, :pointer, # Store your own atlas related user-data (if e.g. you have multiple font atlas).
1257
- :TexReady, :bool, # Set when texture was built matching current font input
1258
- :TexPixelsUseColors, :bool, # Tell whether our texture data is known to use colors (rather than just alpha channel), in order to help backend select a format.
1259
- :TexPixelsAlpha8, :pointer, # 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
1260
- :TexPixelsRGBA32, :pointer, # 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
1261
- :TexWidth, :int, # Texture width calculated during Build().
1262
- :TexHeight, :int, # Texture height calculated during Build().
1263
- :TexUvScale, ImVec2.by_value, # = (1.0f/TexWidth, 1.0f/TexHeight)
1264
- :TexUvWhitePixel, ImVec2.by_value, # Texture coordinates to a white pixel
1265
- :Fonts, ImVector.by_value, # Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
1266
- :CustomRects, ImVector.by_value, # Rectangles for packing custom texture data into the atlas.
1267
- :ConfigData, ImVector.by_value, # Configuration data
1268
- :TexUvLines, [ImVec4.by_value, 64], # UVs for baked anti-aliased lines
1269
- :FontBuilderIO, :pointer, # Opaque interface to a font builder (default to stb_truetype, can be changed to use FreeType by defining IMGUI_ENABLE_FREETYPE).
1270
- :FontBuilderFlags, :uint, # Shared flags (for all fonts) for custom font builder. THIS IS BUILD IMPLEMENTATION DEPENDENT. Per-font override is also available in ImFontConfig.
1271
- :PackIdMouseCursors, :int, # Custom texture rectangle ID for white pixel and mouse cursors
1272
- :PackIdLines, :int # Custom texture rectangle ID for baked anti-aliased lines
1280
+ :Flags, :int,
1281
+ :TexID, :pointer,
1282
+ :TexDesiredWidth, :int,
1283
+ :TexGlyphPadding, :int,
1284
+ :Locked, :bool,
1285
+ :UserData, :pointer,
1286
+ :TexReady, :bool,
1287
+ :TexPixelsUseColors, :bool,
1288
+ :TexPixelsAlpha8, :pointer,
1289
+ :TexPixelsRGBA32, :pointer,
1290
+ :TexWidth, :int,
1291
+ :TexHeight, :int,
1292
+ :TexUvScale, ImVec2.by_value,
1293
+ :TexUvWhitePixel, ImVec2.by_value,
1294
+ :Fonts, ImVector.by_value,
1295
+ :CustomRects, ImVector.by_value,
1296
+ :ConfigData, ImVector.by_value,
1297
+ :TexUvLines, [ImVec4.by_value, 64],
1298
+ :FontBuilderIO, :pointer,
1299
+ :FontBuilderFlags, :uint,
1300
+ :PackIdMouseCursors, :int,
1301
+ :PackIdLines, :int
1273
1302
  )
1274
1303
 
1275
1304
  def AddCustomRectFontGlyph(font, id, width, height, advance_x, offset = ImVec2.create(0,0))
@@ -1296,12 +1325,12 @@ class ImFontAtlas < FFI::Struct
1296
1325
  ImGui::ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(self, compressed_font_data_base85, size_pixels, font_cfg, glyph_ranges)
1297
1326
  end
1298
1327
 
1299
- def AddFontFromMemoryCompressedTTF(compressed_font_data, compressed_font_size, size_pixels, font_cfg = nil, glyph_ranges = nil)
1300
- ImGui::ImFontAtlas_AddFontFromMemoryCompressedTTF(self, compressed_font_data, compressed_font_size, size_pixels, font_cfg, glyph_ranges)
1328
+ def AddFontFromMemoryCompressedTTF(compressed_font_data, compressed_font_data_size, size_pixels, font_cfg = nil, glyph_ranges = nil)
1329
+ ImGui::ImFontAtlas_AddFontFromMemoryCompressedTTF(self, compressed_font_data, compressed_font_data_size, size_pixels, font_cfg, glyph_ranges)
1301
1330
  end
1302
1331
 
1303
- def AddFontFromMemoryTTF(font_data, font_size, size_pixels, font_cfg = nil, glyph_ranges = nil)
1304
- ImGui::ImFontAtlas_AddFontFromMemoryTTF(self, font_data, font_size, size_pixels, font_cfg, glyph_ranges)
1332
+ def AddFontFromMemoryTTF(font_data, font_data_size, size_pixels, font_cfg = nil, glyph_ranges = nil)
1333
+ ImGui::ImFontAtlas_AddFontFromMemoryTTF(self, font_data, font_data_size, size_pixels, font_cfg, glyph_ranges)
1305
1334
  end
1306
1335
 
1307
1336
  def Build()
@@ -1402,10 +1431,10 @@ end
1402
1431
  # If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and *NOT* io.KeysData[key]->DownDuration.
1403
1432
  class ImGuiKeyData < FFI::Struct
1404
1433
  layout(
1405
- :Down, :bool, # True for if key is down
1406
- :DownDuration, :float, # Duration the key has been down (<0.0f: not pressed, 0.0f: just pressed, >0.0f: time held)
1407
- :DownDurationPrev, :float, # Last frame duration the key has been down
1408
- :AnalogValue, :float # 0.0f..1.0f for gamepad values
1434
+ :Down, :bool,
1435
+ :DownDuration, :float,
1436
+ :DownDurationPrev, :float,
1437
+ :AnalogValue, :float
1409
1438
  )
1410
1439
  end
1411
1440
 
@@ -1418,12 +1447,12 @@ end
1418
1447
  # - Windows are generally trying to stay within the Work Area of their host viewport.
1419
1448
  class ImGuiViewport < FFI::Struct
1420
1449
  layout(
1421
- :Flags, :int, # See ImGuiViewportFlags_
1422
- :Pos, ImVec2.by_value, # Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates)
1423
- :Size, ImVec2.by_value, # Main Area: Size of the viewport.
1424
- :WorkPos, ImVec2.by_value, # Work Area: Position of the viewport minus task bars, menus bars, status bars (>= Pos)
1425
- :WorkSize, ImVec2.by_value, # Work Area: Size of the viewport minus task bars, menu bars, status bars (<= Size)
1426
- :PlatformHandleRaw, :pointer # void* to hold lower-level, platform-native window handle (under Win32 this is expected to be a HWND, unused for other platforms)
1450
+ :Flags, :int,
1451
+ :Pos, ImVec2.by_value,
1452
+ :Size, ImVec2.by_value,
1453
+ :WorkPos, ImVec2.by_value,
1454
+ :WorkSize, ImVec2.by_value,
1455
+ :PlatformHandleRaw, :pointer
1427
1456
  )
1428
1457
 
1429
1458
  def GetCenter()
@@ -1463,15 +1492,15 @@ end
1463
1492
  # as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
1464
1493
  class ImDrawData < FFI::Struct
1465
1494
  layout(
1466
- :Valid, :bool, # Only valid after Render() is called and before the next NewFrame() is called.
1467
- :CmdListsCount, :int, # Number of ImDrawList* to render (should always be == CmdLists.size)
1468
- :TotalIdxCount, :int, # For convenience, sum of all ImDrawList's IdxBuffer.Size
1469
- :TotalVtxCount, :int, # For convenience, sum of all ImDrawList's VtxBuffer.Size
1470
- :CmdLists, ImVector.by_value, # Array of ImDrawList* to render. The ImDrawLists are owned by ImGuiContext and only pointed to from here.
1471
- :DisplayPos, ImVec2.by_value, # Top-left position of the viewport to render (== top-left of the orthogonal projection matrix to use) (== GetMainViewport()->Pos for the main viewport, == (0.0) in most single-viewport applications)
1472
- :DisplaySize, ImVec2.by_value, # Size of the viewport to render (== GetMainViewport()->Size for the main viewport, == io.DisplaySize in most single-viewport applications)
1473
- :FramebufferScale, ImVec2.by_value, # Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
1474
- :OwnerViewport, ImGuiViewport.ptr # Viewport carrying the ImDrawData instance, might be of use to the renderer (generally not).
1495
+ :Valid, :bool,
1496
+ :CmdListsCount, :int,
1497
+ :TotalIdxCount, :int,
1498
+ :TotalVtxCount, :int,
1499
+ :CmdLists, ImVector.by_value,
1500
+ :DisplayPos, ImVec2.by_value,
1501
+ :DisplaySize, ImVec2.by_value,
1502
+ :FramebufferScale, ImVec2.by_value,
1503
+ :OwnerViewport, ImGuiViewport.ptr
1475
1504
  )
1476
1505
 
1477
1506
  def AddDrawList(draw_list)
@@ -1504,26 +1533,26 @@ end
1504
1533
  # ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
1505
1534
  class ImFont < FFI::Struct
1506
1535
  layout(
1507
- :IndexAdvanceX, ImVector.by_value, # 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
1508
- :FallbackAdvanceX, :float, # 4 // out // = FallbackGlyph->AdvanceX
1509
- :FontSize, :float, # 4 // in // // Height of characters/line, set during loading (don't change after loading)
1510
- :IndexLookup, ImVector.by_value, # 12-16 // out // // Sparse. Index glyphs by Unicode code-point.
1511
- :Glyphs, ImVector.by_value, # 12-16 // out // // All glyphs.
1512
- :FallbackGlyph, :pointer, # 4-8 // out // = FindGlyph(FontFallbackChar)
1513
- :ContainerAtlas, ImFontAtlas.ptr, # 4-8 // out // // What we has been loaded into
1514
- :ConfigData, :pointer, # 4-8 // in // // Pointer within ContainerAtlas->ConfigData
1515
- :ConfigDataCount, :short, # 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
1516
- :FallbackChar, :ushort, # 2 // out // = FFFD/'?' // Character used if a glyph isn't found.
1517
- :EllipsisChar, :ushort, # 2 // out // = '...'/'.'// Character used for ellipsis rendering.
1518
- :EllipsisCharCount, :short, # 1 // out // 1 or 3
1519
- :EllipsisWidth, :float, # 4 // out // Width
1520
- :EllipsisCharStep, :float, # 4 // out // Step between characters when EllipsisCount > 0
1521
- :DirtyLookupTables, :bool, # 1 // out //
1522
- :Scale, :float, # 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
1523
- :Ascent, :float, # 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
1536
+ :IndexAdvanceX, ImVector.by_value,
1537
+ :FallbackAdvanceX, :float,
1538
+ :FontSize, :float,
1539
+ :IndexLookup, ImVector.by_value,
1540
+ :Glyphs, ImVector.by_value,
1541
+ :FallbackGlyph, :pointer,
1542
+ :ContainerAtlas, ImFontAtlas.ptr,
1543
+ :ConfigData, :pointer,
1544
+ :ConfigDataCount, :short,
1545
+ :FallbackChar, :ushort,
1546
+ :EllipsisChar, :ushort,
1547
+ :EllipsisCharCount, :short,
1548
+ :EllipsisWidth, :float,
1549
+ :EllipsisCharStep, :float,
1550
+ :DirtyLookupTables, :bool,
1551
+ :Scale, :float,
1552
+ :Ascent, :float,
1524
1553
  :Descent, :float,
1525
- :MetricsTotalSurface, :int, # 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
1526
- :Used4kPagesMap, [:uchar, 2] # 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations across all used codepoints.
1554
+ :MetricsTotalSurface, :int,
1555
+ :Used4kPagesMap, [:uchar, 2]
1527
1556
  )
1528
1557
 
1529
1558
  def AddGlyph(src_cfg, c, x0, y0, x1, y1, u0, v0, u1, v1, advance_x)
@@ -1605,14 +1634,14 @@ end
1605
1634
  # See ImFontAtlas::AddCustomRectXXX functions.
1606
1635
  class ImFontAtlasCustomRect < FFI::Struct
1607
1636
  layout(
1608
- :Width, :ushort, # Input // Desired rectangle dimension
1637
+ :Width, :ushort,
1609
1638
  :Height, :ushort,
1610
- :X, :ushort, # Output // Packed position in Atlas
1639
+ :X, :ushort,
1611
1640
  :Y, :ushort,
1612
- :GlyphID, :uint, # Input // For custom font glyphs only (ID < 0x110000)
1613
- :GlyphAdvanceX, :float, # Input // For custom font glyphs only: glyph xadvance
1614
- :GlyphOffset, ImVec2.by_value, # Input // For custom font glyphs only: glyph display offset
1615
- :Font, ImFont.ptr # Input // For custom font glyphs only: target font
1641
+ :GlyphID, :uint,
1642
+ :GlyphAdvanceX, :float,
1643
+ :GlyphOffset, ImVec2.by_value,
1644
+ :Font, ImFont.ptr
1616
1645
  )
1617
1646
 
1618
1647
  def self.create()
@@ -1631,24 +1660,25 @@ end
1631
1660
 
1632
1661
  class ImFontConfig < FFI::Struct
1633
1662
  layout(
1634
- :FontData, :pointer, # // TTF/OTF data
1635
- :FontDataSize, :int, # // TTF/OTF data size
1636
- :FontDataOwnedByAtlas, :bool, # true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
1637
- :FontNo, :int, # 0 // Index of font within TTF/OTF file
1638
- :SizePixels, :float, # // Size in pixels for rasterizer (more or less maps to the resulting font height).
1639
- :OversampleH, :int, # 2 // Rasterize at higher quality for sub-pixel positioning. Note the difference between 2 and 3 is minimal. You can reduce this to 1 for large glyphs save memory. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
1640
- :OversampleV, :int, # 1 // Rasterize at higher quality for sub-pixel positioning. This is not really useful as we don't use sub-pixel positions on the Y axis.
1641
- :PixelSnapH, :bool, # false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
1642
- :GlyphExtraSpacing, ImVec2.by_value, # 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
1643
- :GlyphOffset, ImVec2.by_value, # 0, 0 // Offset all glyphs from this font input.
1644
- :GlyphRanges, :pointer, # NULL // THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list).
1645
- :GlyphMinAdvanceX, :float, # 0 // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font
1646
- :GlyphMaxAdvanceX, :float, # FLT_MAX // Maximum AdvanceX for glyphs
1647
- :MergeMode, :bool, # false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
1648
- :FontBuilderFlags, :uint, # 0 // Settings for custom font builder. THIS IS BUILDER IMPLEMENTATION DEPENDENT. Leave as zero if unsure.
1649
- :RasterizerMultiply, :float, # 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
1650
- :EllipsisChar, :ushort, # -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
1651
- :Name, [:char, 40], # Name (strictly to ease debugging)
1663
+ :FontData, :pointer,
1664
+ :FontDataSize, :int,
1665
+ :FontDataOwnedByAtlas, :bool,
1666
+ :FontNo, :int,
1667
+ :SizePixels, :float,
1668
+ :OversampleH, :int,
1669
+ :OversampleV, :int,
1670
+ :PixelSnapH, :bool,
1671
+ :GlyphExtraSpacing, ImVec2.by_value,
1672
+ :GlyphOffset, ImVec2.by_value,
1673
+ :GlyphRanges, :pointer,
1674
+ :GlyphMinAdvanceX, :float,
1675
+ :GlyphMaxAdvanceX, :float,
1676
+ :MergeMode, :bool,
1677
+ :FontBuilderFlags, :uint,
1678
+ :RasterizerMultiply, :float,
1679
+ :RasterizerDensity, :float,
1680
+ :EllipsisChar, :ushort,
1681
+ :Name, [:char, 40],
1652
1682
  :DstFont, ImFont.ptr
1653
1683
  )
1654
1684
 
@@ -1666,15 +1696,15 @@ end
1666
1696
  # (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this)
1667
1697
  class ImFontGlyph < FFI::Struct
1668
1698
  layout(
1669
- :Colored, :uint, # Flag to indicate glyph is colored and should generally ignore tinting (make it usable with no shift on little-endian as this is used in loops)
1670
- :Visible, :uint, # Flag to indicate glyph has no visible pixels (e.g. space). Allow early out when rendering.
1671
- :Codepoint, :uint, # 0x0000..0x10FFFF
1672
- :AdvanceX, :float, # Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
1673
- :X0, :float, # Glyph corners
1699
+ :Colored, :uint,
1700
+ :Visible, :uint,
1701
+ :Codepoint, :uint,
1702
+ :AdvanceX, :float,
1703
+ :X0, :float,
1674
1704
  :Y0, :float,
1675
1705
  :X1, :float,
1676
1706
  :Y1, :float,
1677
- :U0, :float, # Texture coordinates
1707
+ :U0, :float,
1678
1708
  :V0, :float,
1679
1709
  :U1, :float,
1680
1710
  :V1, :float
@@ -1685,7 +1715,7 @@ end
1685
1715
  # This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
1686
1716
  class ImFontGlyphRangesBuilder < FFI::Struct
1687
1717
  layout(
1688
- :UsedChars, ImVector.by_value # Store 1-bit per Unicode code point (0=unused, 1=used)
1718
+ :UsedChars, ImVector.by_value
1689
1719
  )
1690
1720
 
1691
1721
  def AddChar(c)
@@ -1728,99 +1758,95 @@ end
1728
1758
 
1729
1759
  class ImGuiIO < FFI::Struct
1730
1760
  layout(
1731
- :ConfigFlags, :int, # = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
1732
- :BackendFlags, :int, # = 0 // See ImGuiBackendFlags_ enum. Set by backend (imgui_impl_xxx files or custom backend) to communicate features supported by the backend.
1733
- :DisplaySize, ImVec2.by_value, # <unset> // Main display size, in pixels (generally == GetMainViewport()->Size). May change every frame.
1734
- :DeltaTime, :float, # = 1.0f/60.0f // Time elapsed since last frame, in seconds. May change every frame.
1735
- :IniSavingRate, :float, # = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
1736
- :IniFilename, :pointer, # = "imgui.ini" // Path to .ini file (important: default "imgui.ini" is relative to current working dir!). Set NULL to disable automatic .ini loading/saving or if you want to manually call LoadIniSettingsXXX() / SaveIniSettingsXXX() functions.
1737
- :LogFilename, :pointer, # = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
1738
- :UserData, :pointer, # = NULL // Store your own data.
1739
- :Fonts, ImFontAtlas.ptr, # <auto> // Font atlas: load, rasterize and pack one or more fonts into a single texture.
1740
- :FontGlobalScale, :float, # = 1.0f // Global scale all fonts
1741
- :FontAllowUserScaling, :bool, # = false // Allow user scaling text of individual window with CTRL+Wheel.
1742
- :FontDefault, ImFont.ptr, # = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
1743
- :DisplayFramebufferScale, ImVec2.by_value, # = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
1744
- :MouseDrawCursor, :bool, # = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by backend implementations.
1745
- :ConfigMacOSXBehaviors, :bool, # = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl.
1746
- :ConfigInputTrickleEventQueue, :bool, # = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates.
1747
- :ConfigInputTextCursorBlink, :bool, # = true // Enable blinking cursor (optional as some users consider it to be distracting).
1748
- :ConfigInputTextEnterKeepActive, :bool, # = false // [BETA] Pressing Enter will keep item active and select contents (single-line only).
1749
- :ConfigDragClickToInputText, :bool, # = false // [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard.
1750
- :ConfigWindowsResizeFromEdges, :bool, # = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
1751
- :ConfigWindowsMoveFromTitleBarOnly, :bool, # = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar.
1752
- :ConfigMemoryCompactTimer, :float, # = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable.
1753
- :MouseDoubleClickTime, :float, # = 0.30f // Time for a double-click, in seconds.
1754
- :MouseDoubleClickMaxDist, :float, # = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
1755
- :MouseDragThreshold, :float, # = 6.0f // Distance threshold before considering we are dragging.
1756
- :KeyRepeatDelay, :float, # = 0.275f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
1757
- :KeyRepeatRate, :float, # = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
1758
- :ConfigDebugBeginReturnValueOnce, :bool, # = false // First-time calls to Begin()/BeginChild() will return false. NEEDS TO BE SET AT APPLICATION BOOT TIME if you don't want to miss windows.
1759
- :ConfigDebugBeginReturnValueLoop, :bool, # = false // Some calls to Begin()/BeginChild() will return false. Will cycle through window depths then repeat. Suggested use: add "io.ConfigDebugBeginReturnValue = io.KeyShift" in your main loop then occasionally press SHIFT. Windows should be flickering while running.
1760
- :ConfigDebugIgnoreFocusLoss, :bool, # = false // Ignore io.AddFocusEvent(false), consequently not calling io.ClearInputKeys() in input processing.
1761
- :ConfigDebugIniSettings, :bool, # = false // Save .ini data with extra comments (particularly helpful for Docking, but makes saving slower)
1762
- :BackendPlatformName, :pointer, # = NULL
1763
- :BackendRendererName, :pointer, # = NULL
1764
- :BackendPlatformUserData, :pointer, # = NULL // User data for platform backend
1765
- :BackendRendererUserData, :pointer, # = NULL // User data for renderer backend
1766
- :BackendLanguageUserData, :pointer, # = NULL // User data for non C++ programming language backend
1761
+ :ConfigFlags, :int,
1762
+ :BackendFlags, :int,
1763
+ :DisplaySize, ImVec2.by_value,
1764
+ :DeltaTime, :float,
1765
+ :IniSavingRate, :float,
1766
+ :IniFilename, :pointer,
1767
+ :LogFilename, :pointer,
1768
+ :UserData, :pointer,
1769
+ :Fonts, ImFontAtlas.ptr,
1770
+ :FontGlobalScale, :float,
1771
+ :FontAllowUserScaling, :bool,
1772
+ :FontDefault, ImFont.ptr,
1773
+ :DisplayFramebufferScale, ImVec2.by_value,
1774
+ :MouseDrawCursor, :bool,
1775
+ :ConfigMacOSXBehaviors, :bool,
1776
+ :ConfigInputTrickleEventQueue, :bool,
1777
+ :ConfigInputTextCursorBlink, :bool,
1778
+ :ConfigInputTextEnterKeepActive, :bool,
1779
+ :ConfigDragClickToInputText, :bool,
1780
+ :ConfigWindowsResizeFromEdges, :bool,
1781
+ :ConfigWindowsMoveFromTitleBarOnly, :bool,
1782
+ :ConfigMemoryCompactTimer, :float,
1783
+ :MouseDoubleClickTime, :float,
1784
+ :MouseDoubleClickMaxDist, :float,
1785
+ :MouseDragThreshold, :float,
1786
+ :KeyRepeatDelay, :float,
1787
+ :KeyRepeatRate, :float,
1788
+ :ConfigDebugBeginReturnValueOnce, :bool,
1789
+ :ConfigDebugBeginReturnValueLoop, :bool,
1790
+ :ConfigDebugIgnoreFocusLoss, :bool,
1791
+ :ConfigDebugIniSettings, :bool,
1792
+ :BackendPlatformName, :pointer,
1793
+ :BackendRendererName, :pointer,
1794
+ :BackendPlatformUserData, :pointer,
1795
+ :BackendRendererUserData, :pointer,
1796
+ :BackendLanguageUserData, :pointer,
1767
1797
  :GetClipboardTextFn, :pointer,
1768
1798
  :SetClipboardTextFn, :pointer,
1769
1799
  :ClipboardUserData, :pointer,
1770
1800
  :SetPlatformImeDataFn, :pointer,
1801
+ :PlatformLocaleDecimalPoint, :ushort,
1802
+ :WantCaptureMouse, :bool,
1803
+ :WantCaptureKeyboard, :bool,
1804
+ :WantTextInput, :bool,
1805
+ :WantSetMousePos, :bool,
1806
+ :WantSaveIniSettings, :bool,
1807
+ :NavActive, :bool,
1808
+ :NavVisible, :bool,
1809
+ :Framerate, :float,
1810
+ :MetricsRenderVertices, :int,
1811
+ :MetricsRenderIndices, :int,
1812
+ :MetricsRenderWindows, :int,
1813
+ :MetricsActiveWindows, :int,
1814
+ :MouseDelta, ImVec2.by_value,
1771
1815
  :_UnusedPadding, :pointer,
1772
- :PlatformLocaleDecimalPoint, :ushort, # '.' // [Experimental] Configure decimal point e.g. '.' or ',' useful for some languages (e.g. German), generally pulled from *localeconv()->decimal_point
1773
- :WantCaptureMouse, :bool, # Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
1774
- :WantCaptureKeyboard, :bool, # Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
1775
- :WantTextInput, :bool, # Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
1776
- :WantSetMousePos, :bool, # MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
1777
- :WantSaveIniSettings, :bool, # When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. Important: clear io.WantSaveIniSettings yourself after saving!
1778
- :NavActive, :bool, # Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
1779
- :NavVisible, :bool, # Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
1780
- :Framerate, :float, # Estimate of application framerate (rolling average over 60 frames, based on io.DeltaTime), in frame per second. Solely for convenience. Slow applications may not want to use a moving average or may want to reset underlying buffers occasionally.
1781
- :MetricsRenderVertices, :int, # Vertices output during last call to Render()
1782
- :MetricsRenderIndices, :int, # Indices output during last call to Render() = number of triangles * 3
1783
- :MetricsRenderWindows, :int, # Number of visible windows
1784
- :MetricsActiveWindows, :int, # Number of active windows
1785
- :MetricsActiveAllocations, :int, # Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
1786
- :MouseDelta, ImVec2.by_value, # Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
1787
- :KeyMap, [:int, 652], # [LEGACY] Input: map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. The first 512 are now unused and should be kept zero. Legacy backend will write into KeyMap[] using ImGuiKey_ indices which are always >512.
1788
- :KeysDown, [:bool, 652], # [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
1789
- :NavInputs, [:float, 16], # [LEGACY] Since 1.88, NavInputs[] was removed. Backends from 1.60 to 1.86 won't build. Feed gamepad inputs via io.AddKeyEvent() and ImGuiKey_GamepadXXX enums.
1790
- :Ctx, :pointer, # Parent UI context (needs to be set explicitly by parent).
1791
- :MousePos, ImVec2.by_value, # Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.)
1792
- :MouseDown, [:bool, 5], # Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Other buttons allow us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
1793
- :MouseWheel, :float, # Mouse wheel Vertical: 1 unit scrolls about 5 lines text. >0 scrolls Up, <0 scrolls Down. Hold SHIFT to turn vertical scroll into horizontal scroll.
1794
- :MouseWheelH, :float, # Mouse wheel Horizontal. >0 scrolls Left, <0 scrolls Right. Most users don't have a mouse with a horizontal wheel, may not be filled by all backends.
1795
- :MouseSource, :int, # Mouse actual input peripheral (Mouse/TouchScreen/Pen).
1796
- :KeyCtrl, :bool, # Keyboard modifier down: Control
1797
- :KeyShift, :bool, # Keyboard modifier down: Shift
1798
- :KeyAlt, :bool, # Keyboard modifier down: Alt
1799
- :KeySuper, :bool, # Keyboard modifier down: Cmd/Super/Windows
1800
- :KeyMods, :int, # Key mods flags (any of ImGuiMod_Ctrl/ImGuiMod_Shift/ImGuiMod_Alt/ImGuiMod_Super flags, same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags. DOES NOT CONTAINS ImGuiMod_Shortcut which is pretranslated). Read-only, updated by NewFrame()
1801
- :KeysData, [ImGuiKeyData.by_value, 652], # Key state for all known keys. Use IsKeyXXX() functions to access this.
1802
- :WantCaptureMouseUnlessPopupClose, :bool, # Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup.
1803
- :MousePosPrev, ImVec2.by_value, # Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
1804
- :MouseClickedPos, [ImVec2.by_value, 5], # Position at time of clicking
1805
- :MouseClickedTime, [:double, 5], # Time of last click (used to figure out double-click)
1806
- :MouseClicked, [:bool, 5], # Mouse button went from !Down to Down (same as MouseClickedCount[x] != 0)
1807
- :MouseDoubleClicked, [:bool, 5], # Has mouse button been double-clicked? (same as MouseClickedCount[x] == 2)
1808
- :MouseClickedCount, [:ushort, 5], # == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down
1809
- :MouseClickedLastCount, [:ushort, 5], # Count successive number of clicks. Stays valid after mouse release. Reset after another click is done.
1810
- :MouseReleased, [:bool, 5], # Mouse button went from Down to !Down
1811
- :MouseDownOwned, [:bool, 5], # Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
1812
- :MouseDownOwnedUnlessPopupClose, [:bool, 5], # Track if button was clicked inside a dear imgui window.
1813
- :MouseWheelRequestAxisSwap, :bool, # On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system.
1814
- :MouseDownDuration, [:float, 5], # Duration the mouse button has been down (0.0f == just clicked)
1815
- :MouseDownDurationPrev, [:float, 5], # Previous time the mouse button has been down
1816
- :MouseDragMaxDistanceSqr, [:float, 5], # Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds)
1817
- :PenPressure, :float, # Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui.
1818
- :AppFocusLost, :bool, # Only modify via AddFocusEvent()
1819
- :AppAcceptingEvents, :bool, # Only modify via SetAppAcceptingEvents()
1820
- :BackendUsingLegacyKeyArrays, :char, # -1: unknown, 0: using AddKeyEvent(), 1: using legacy io.KeysDown[]
1821
- :BackendUsingLegacyNavInputArray, :bool, # 0: using AddKeyAnalogEvent(), 1: writing to legacy io.NavInputs[] directly
1822
- :InputQueueSurrogate, :ushort, # For AddInputCharacterUTF16()
1823
- :InputQueueCharacters, ImVector.by_value # Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper.
1816
+ :Ctx, :pointer,
1817
+ :MousePos, ImVec2.by_value,
1818
+ :MouseDown, [:bool, 5],
1819
+ :MouseWheel, :float,
1820
+ :MouseWheelH, :float,
1821
+ :MouseSource, :int,
1822
+ :KeyCtrl, :bool,
1823
+ :KeyShift, :bool,
1824
+ :KeyAlt, :bool,
1825
+ :KeySuper, :bool,
1826
+ :KeyMods, :int,
1827
+ :KeysData, [ImGuiKeyData.by_value, 154],
1828
+ :WantCaptureMouseUnlessPopupClose, :bool,
1829
+ :MousePosPrev, ImVec2.by_value,
1830
+ :MouseClickedPos, [ImVec2.by_value, 5],
1831
+ :MouseClickedTime, [:double, 5],
1832
+ :MouseClicked, [:bool, 5],
1833
+ :MouseDoubleClicked, [:bool, 5],
1834
+ :MouseClickedCount, [:ushort, 5],
1835
+ :MouseClickedLastCount, [:ushort, 5],
1836
+ :MouseReleased, [:bool, 5],
1837
+ :MouseDownOwned, [:bool, 5],
1838
+ :MouseDownOwnedUnlessPopupClose, [:bool, 5],
1839
+ :MouseWheelRequestAxisSwap, :bool,
1840
+ :MouseDownDuration, [:float, 5],
1841
+ :MouseDownDurationPrev, [:float, 5],
1842
+ :MouseDragMaxDistanceSqr, [:float, 5],
1843
+ :PenPressure, :float,
1844
+ :AppFocusLost, :bool,
1845
+ :AppAcceptingEvents, :bool,
1846
+ :BackendUsingLegacyKeyArrays, :char,
1847
+ :BackendUsingLegacyNavInputArray, :bool,
1848
+ :InputQueueSurrogate, :ushort,
1849
+ :InputQueueCharacters, ImVector.by_value
1824
1850
  )
1825
1851
 
1826
1852
  def AddFocusEvent(focused)
@@ -1900,19 +1926,19 @@ end
1900
1926
  # - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
1901
1927
  class ImGuiInputTextCallbackData < FFI::Struct
1902
1928
  layout(
1903
- :Ctx, :pointer, # Parent UI context
1904
- :EventFlag, :int, # One ImGuiInputTextFlags_Callback* // Read-only
1905
- :Flags, :int, # What user passed to InputText() // Read-only
1906
- :UserData, :pointer, # What user passed to InputText() // Read-only
1907
- :EventChar, :ushort, # Character input // Read-write // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0;
1908
- :EventKey, :int, # Key pressed (Up/Down/TAB) // Read-only // [Completion,History]
1909
- :Buf, :pointer, # Text buffer // Read-write // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer!
1910
- :BufTextLen, :int, # Text length (in bytes) // Read-write // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length()
1911
- :BufSize, :int, # Buffer size (in bytes) = capacity+1 // Read-only // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1
1912
- :BufDirty, :bool, # Set if you modify Buf/BufTextLen! // Write // [Completion,History,Always]
1913
- :CursorPos, :int, # // Read-write // [Completion,History,Always]
1914
- :SelectionStart, :int, # // Read-write // [Completion,History,Always] == to SelectionEnd when no selection)
1915
- :SelectionEnd, :int # // Read-write // [Completion,History,Always]
1929
+ :Ctx, :pointer,
1930
+ :EventFlag, :int,
1931
+ :Flags, :int,
1932
+ :UserData, :pointer,
1933
+ :EventChar, :ushort,
1934
+ :EventKey, :int,
1935
+ :Buf, :pointer,
1936
+ :BufTextLen, :int,
1937
+ :BufSize, :int,
1938
+ :BufDirty, :bool,
1939
+ :CursorPos, :int,
1940
+ :SelectionStart, :int,
1941
+ :SelectionEnd, :int
1916
1942
  )
1917
1943
 
1918
1944
  def ClearSelection()
@@ -1967,13 +1993,13 @@ end
1967
1993
  # - The clipper also handles various subtleties related to keyboard/gamepad navigation, wrapping etc.
1968
1994
  class ImGuiListClipper < FFI::Struct
1969
1995
  layout(
1970
- :Ctx, :pointer, # Parent UI context
1971
- :DisplayStart, :int, # First item to display, updated by each call to Step()
1972
- :DisplayEnd, :int, # End of items to display (exclusive)
1973
- :ItemsCount, :int, # [Internal] Number of items
1974
- :ItemsHeight, :float, # [Internal] Height of item after a first step and item submission can calculate it
1975
- :StartPosY, :float, # [Internal] Cursor position at the time of Begin() or after table frozen rows are all processed
1976
- :TempData, :pointer # [Internal] Internal data
1996
+ :Ctx, :pointer,
1997
+ :DisplayStart, :int,
1998
+ :DisplayEnd, :int,
1999
+ :ItemsCount, :int,
2000
+ :ItemsHeight, :float,
2001
+ :StartPosY, :float,
2002
+ :TempData, :pointer
1977
2003
  )
1978
2004
 
1979
2005
  def Begin(items_count, items_height = -1.0)
@@ -2009,14 +2035,14 @@ end
2009
2035
  # Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload()
2010
2036
  class ImGuiPayload < FFI::Struct
2011
2037
  layout(
2012
- :Data, :pointer, # Data (copied and owned by dear imgui)
2013
- :DataSize, :int, # Data size
2014
- :SourceId, :uint, # Source item id
2015
- :SourceParentId, :uint, # Source parent id (if available)
2016
- :DataFrameCount, :int, # Data timestamp
2017
- :DataType, [:char, 33], # Data type tag (short user-supplied string, 32 characters max)
2018
- :Preview, :bool, # Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
2019
- :Delivery, :bool # Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
2038
+ :Data, :pointer,
2039
+ :DataSize, :int,
2040
+ :SourceId, :uint,
2041
+ :SourceParentId, :uint,
2042
+ :DataFrameCount, :int,
2043
+ :DataType, [:char, 33],
2044
+ :Preview, :bool,
2045
+ :Delivery, :bool
2020
2046
  )
2021
2047
 
2022
2048
  def Clear()
@@ -2048,9 +2074,9 @@ end
2048
2074
  # (Optional) Support for IME (Input Method Editor) via the io.SetPlatformImeDataFn() function.
2049
2075
  class ImGuiPlatformImeData < FFI::Struct
2050
2076
  layout(
2051
- :WantVisible, :bool, # A widget wants the IME to be visible
2052
- :InputPos, ImVec2.by_value, # Position of the input cursor
2053
- :InputLineHeight, :float # Line height
2077
+ :WantVisible, :bool,
2078
+ :InputPos, ImVec2.by_value,
2079
+ :InputLineHeight, :float
2054
2080
  )
2055
2081
 
2056
2082
  def self.create()
@@ -2067,10 +2093,10 @@ end
2067
2093
  # NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
2068
2094
  class ImGuiSizeCallbackData < FFI::Struct
2069
2095
  layout(
2070
- :UserData, :pointer, # Read-only. What user passed to SetNextWindowSizeConstraints(). Generally store an integer or float in here (need reinterpret_cast<>).
2071
- :Pos, ImVec2.by_value, # Read-only. Window position, for reference.
2072
- :CurrentSize, ImVec2.by_value, # Read-only. Current window size.
2073
- :DesiredSize, ImVec2.by_value # Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
2096
+ :UserData, :pointer,
2097
+ :Pos, ImVec2.by_value,
2098
+ :CurrentSize, ImVec2.by_value,
2099
+ :DesiredSize, ImVec2.by_value
2074
2100
  )
2075
2101
  end
2076
2102
 
@@ -2151,55 +2177,57 @@ end
2151
2177
 
2152
2178
  class ImGuiStyle < FFI::Struct
2153
2179
  layout(
2154
- :Alpha, :float, # Global alpha applies to everything in Dear ImGui.
2155
- :DisabledAlpha, :float, # Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
2156
- :WindowPadding, ImVec2.by_value, # Padding within a window.
2157
- :WindowRounding, :float, # Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
2158
- :WindowBorderSize, :float, # Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
2159
- :WindowMinSize, ImVec2.by_value, # Minimum window size. This is a global setting. If you want to constrain individual windows, use SetNextWindowSizeConstraints().
2160
- :WindowTitleAlign, ImVec2.by_value, # Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
2161
- :WindowMenuButtonPosition, :int, # Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
2162
- :ChildRounding, :float, # Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
2163
- :ChildBorderSize, :float, # Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
2164
- :PopupRounding, :float, # Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
2165
- :PopupBorderSize, :float, # Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
2166
- :FramePadding, ImVec2.by_value, # Padding within a framed rectangle (used by most widgets).
2167
- :FrameRounding, :float, # Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
2168
- :FrameBorderSize, :float, # Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
2169
- :ItemSpacing, ImVec2.by_value, # Horizontal and vertical spacing between widgets/lines.
2170
- :ItemInnerSpacing, ImVec2.by_value, # Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
2171
- :CellPadding, ImVec2.by_value, # Padding within a table cell. CellPadding.y may be altered between different rows.
2172
- :TouchExtraPadding, ImVec2.by_value, # Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
2173
- :IndentSpacing, :float, # Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
2174
- :ColumnsMinSpacing, :float, # Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
2175
- :ScrollbarSize, :float, # Width of the vertical scrollbar, Height of the horizontal scrollbar.
2176
- :ScrollbarRounding, :float, # Radius of grab corners for scrollbar.
2177
- :GrabMinSize, :float, # Minimum width/height of a grab box for slider/scrollbar.
2178
- :GrabRounding, :float, # Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
2179
- :LogSliderDeadzone, :float, # The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero.
2180
- :TabRounding, :float, # Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
2181
- :TabBorderSize, :float, # Thickness of border around tabs.
2182
- :TabMinWidthForCloseButton, :float, # Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
2183
- :ColorButtonPosition, :int, # Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
2184
- :ButtonTextAlign, ImVec2.by_value, # Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
2185
- :SelectableTextAlign, ImVec2.by_value, # Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
2186
- :SeparatorTextBorderSize, :float, # Thickkness of border in SeparatorText()
2187
- :SeparatorTextAlign, ImVec2.by_value, # Alignment of text within the separator. Defaults to (0.0f, 0.5f) (left aligned, center).
2188
- :SeparatorTextPadding, ImVec2.by_value, # Horizontal offset of text from each edge of the separator + spacing on other axis. Generally small values. .y is recommended to be == FramePadding.y.
2189
- :DisplayWindowPadding, ImVec2.by_value, # Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
2190
- :DisplaySafeAreaPadding, ImVec2.by_value, # If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
2191
- :MouseCursorScale, :float, # Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
2192
- :AntiAliasedLines, :bool, # Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
2193
- :AntiAliasedLinesUseTex, :bool, # Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). Latched at the beginning of the frame (copied to ImDrawList).
2194
- :AntiAliasedFill, :bool, # Enable anti-aliased edges around filled shapes (rounded rectangles, circles, etc.). Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
2195
- :CurveTessellationTol, :float, # Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
2196
- :CircleTessellationMaxError, :float, # Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
2180
+ :Alpha, :float,
2181
+ :DisabledAlpha, :float,
2182
+ :WindowPadding, ImVec2.by_value,
2183
+ :WindowRounding, :float,
2184
+ :WindowBorderSize, :float,
2185
+ :WindowMinSize, ImVec2.by_value,
2186
+ :WindowTitleAlign, ImVec2.by_value,
2187
+ :WindowMenuButtonPosition, :int,
2188
+ :ChildRounding, :float,
2189
+ :ChildBorderSize, :float,
2190
+ :PopupRounding, :float,
2191
+ :PopupBorderSize, :float,
2192
+ :FramePadding, ImVec2.by_value,
2193
+ :FrameRounding, :float,
2194
+ :FrameBorderSize, :float,
2195
+ :ItemSpacing, ImVec2.by_value,
2196
+ :ItemInnerSpacing, ImVec2.by_value,
2197
+ :CellPadding, ImVec2.by_value,
2198
+ :TouchExtraPadding, ImVec2.by_value,
2199
+ :IndentSpacing, :float,
2200
+ :ColumnsMinSpacing, :float,
2201
+ :ScrollbarSize, :float,
2202
+ :ScrollbarRounding, :float,
2203
+ :GrabMinSize, :float,
2204
+ :GrabRounding, :float,
2205
+ :LogSliderDeadzone, :float,
2206
+ :TabRounding, :float,
2207
+ :TabBorderSize, :float,
2208
+ :TabMinWidthForCloseButton, :float,
2209
+ :TabBarBorderSize, :float,
2210
+ :TableAngledHeadersAngle, :float,
2211
+ :ColorButtonPosition, :int,
2212
+ :ButtonTextAlign, ImVec2.by_value,
2213
+ :SelectableTextAlign, ImVec2.by_value,
2214
+ :SeparatorTextBorderSize, :float,
2215
+ :SeparatorTextAlign, ImVec2.by_value,
2216
+ :SeparatorTextPadding, ImVec2.by_value,
2217
+ :DisplayWindowPadding, ImVec2.by_value,
2218
+ :DisplaySafeAreaPadding, ImVec2.by_value,
2219
+ :MouseCursorScale, :float,
2220
+ :AntiAliasedLines, :bool,
2221
+ :AntiAliasedLinesUseTex, :bool,
2222
+ :AntiAliasedFill, :bool,
2223
+ :CurveTessellationTol, :float,
2224
+ :CircleTessellationMaxError, :float,
2197
2225
  :Colors, [ImVec4.by_value, 53],
2198
- :HoverStationaryDelay, :float, # Delay for IsItemHovered(ImGuiHoveredFlags_Stationary). Time required to consider mouse stationary.
2199
- :HoverDelayShort, :float, # Delay for IsItemHovered(ImGuiHoveredFlags_DelayShort). Usually used along with HoverStationaryDelay.
2200
- :HoverDelayNormal, :float, # Delay for IsItemHovered(ImGuiHoveredFlags_DelayNormal). "
2201
- :HoverFlagsForTooltipMouse, :int, # Default flags when using IsItemHovered(ImGuiHoveredFlags_ForTooltip) or BeginItemTooltip()/SetItemTooltip() while using mouse.
2202
- :HoverFlagsForTooltipNav, :int # Default flags when using IsItemHovered(ImGuiHoveredFlags_ForTooltip) or BeginItemTooltip()/SetItemTooltip() while using keyboard/gamepad.
2226
+ :HoverStationaryDelay, :float,
2227
+ :HoverDelayShort, :float,
2228
+ :HoverDelayNormal, :float,
2229
+ :HoverFlagsForTooltipMouse, :int,
2230
+ :HoverFlagsForTooltipNav, :int
2203
2231
  )
2204
2232
 
2205
2233
  def self.create()
@@ -2219,10 +2247,10 @@ end
2219
2247
  # Sorting specification for one column of a table (sizeof == 12 bytes)
2220
2248
  class ImGuiTableColumnSortSpecs < FFI::Struct
2221
2249
  layout(
2222
- :ColumnUserID, :uint, # User id of the column (if specified by a TableSetupColumn() call)
2223
- :ColumnIndex, :short, # Index of the column
2224
- :SortOrder, :short, # Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
2225
- :SortDirection, :int # ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending (you can use this or SortSign, whichever is more convenient for your sort function)
2250
+ :ColumnUserID, :uint,
2251
+ :ColumnIndex, :short,
2252
+ :SortOrder, :short,
2253
+ :SortDirection, :int
2226
2254
  )
2227
2255
 
2228
2256
  def self.create()
@@ -2241,9 +2269,9 @@ end
2241
2269
  # Make sure to set 'SpecsDirty = false' after sorting, else you may wastefully sort your data every frame!
2242
2270
  class ImGuiTableSortSpecs < FFI::Struct
2243
2271
  layout(
2244
- :Specs, :pointer, # Pointer to sort spec array.
2245
- :SpecsCount, :int, # Sort spec count. Most often 1. May be > 1 when ImGuiTableFlags_SortMulti is enabled. May be == 0 when ImGuiTableFlags_SortTristate is enabled.
2246
- :SpecsDirty, :bool # Set to true when specs have changed since last time! Use this to sort again, then clear the flag.
2272
+ :Specs, :pointer,
2273
+ :SpecsCount, :int,
2274
+ :SpecsDirty, :bool
2247
2275
  )
2248
2276
 
2249
2277
  def self.create()
@@ -2381,16 +2409,16 @@ class ImGuiStoragePair < FFI::Struct
2381
2409
  :val_p, :pointer
2382
2410
  )
2383
2411
 
2384
- def self.create(_key, _val_i)
2385
- return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Int(_key, _val_i))
2412
+ def self.create(_key, _val)
2413
+ return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Int(_key, _val))
2386
2414
  end
2387
2415
 
2388
- def self.create(_key, _val_f)
2389
- return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Float(_key, _val_f))
2416
+ def self.create(_key, _val)
2417
+ return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Float(_key, _val))
2390
2418
  end
2391
2419
 
2392
- def self.create(_key, _val_p)
2393
- return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Ptr(_key, _val_p))
2420
+ def self.create(_key, _val)
2421
+ return ImGuiStoragePair.new(ImGui::ImGuiStoragePair_ImGuiStoragePair_Ptr(_key, _val))
2394
2422
  end
2395
2423
 
2396
2424
  def destroy()
@@ -2471,6 +2499,8 @@ module ImGui
2471
2499
  [:ImDrawList_AddCircleFilled, [:pointer, ImVec2.by_value, :float, :uint, :int], :void],
2472
2500
  [:ImDrawList_AddConvexPolyFilled, [:pointer, :pointer, :int, :uint], :void],
2473
2501
  [:ImDrawList_AddDrawCmd, [:pointer], :void],
2502
+ [:ImDrawList_AddEllipse, [:pointer, ImVec2.by_value, :float, :float, :uint, :float, :int, :float], :void],
2503
+ [:ImDrawList_AddEllipseFilled, [:pointer, ImVec2.by_value, :float, :float, :uint, :float, :int], :void],
2474
2504
  [:ImDrawList_AddImage, [:pointer, :pointer, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, :uint], :void],
2475
2505
  [:ImDrawList_AddImageQuad, [:pointer, :pointer, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, :uint], :void],
2476
2506
  [:ImDrawList_AddImageRounded, [:pointer, :pointer, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, :uint, :float, :int], :void],
@@ -2499,6 +2529,7 @@ module ImGui
2499
2529
  [:ImDrawList_PathBezierCubicCurveTo, [:pointer, ImVec2.by_value, ImVec2.by_value, ImVec2.by_value, :int], :void],
2500
2530
  [:ImDrawList_PathBezierQuadraticCurveTo, [:pointer, ImVec2.by_value, ImVec2.by_value, :int], :void],
2501
2531
  [:ImDrawList_PathClear, [:pointer], :void],
2532
+ [:ImDrawList_PathEllipticalArcTo, [:pointer, ImVec2.by_value, :float, :float, :float, :float, :float, :int], :void],
2502
2533
  [:ImDrawList_PathFillConvex, [:pointer, :uint], :void],
2503
2534
  [:ImDrawList_PathLineTo, [:pointer, ImVec2.by_value], :void],
2504
2535
  [:ImDrawList_PathLineToMergeDuplicate, [:pointer, ImVec2.by_value], :void],
@@ -2688,9 +2719,8 @@ module ImGui
2688
2719
  [:igAlignTextToFramePadding, [], :void],
2689
2720
  [:igArrowButton, [:pointer, :int], :bool],
2690
2721
  [:igBegin, [:pointer, :pointer, :int], :bool],
2691
- [:igBeginChild_Str, [:pointer, ImVec2.by_value, :bool, :int], :bool],
2692
- [:igBeginChild_ID, [:uint, ImVec2.by_value, :bool, :int], :bool],
2693
- [:igBeginChildFrame, [:uint, ImVec2.by_value, :int], :bool],
2722
+ [:igBeginChild_Str, [:pointer, ImVec2.by_value, :int, :int], :bool],
2723
+ [:igBeginChild_ID, [:uint, ImVec2.by_value, :int, :int], :bool],
2694
2724
  [:igBeginCombo, [:pointer, :pointer, :int], :bool],
2695
2725
  [:igBeginDisabled, [:bool], :void],
2696
2726
  [:igBeginDragDropSource, [:int], :bool],
@@ -2733,7 +2763,7 @@ module ImGui
2733
2763
  [:igColumns, [:int, :pointer, :bool], :void],
2734
2764
  [:igCombo_Str_arr, [:pointer, :pointer, :pointer, :int, :int], :bool],
2735
2765
  [:igCombo_Str, [:pointer, :pointer, :pointer, :int], :bool],
2736
- [:igCombo_FnBoolPtr, [:pointer, :pointer, :pointer, :pointer, :int, :int], :bool],
2766
+ [:igCombo_FnStrPtr, [:pointer, :pointer, :pointer, :pointer, :int, :int], :bool],
2737
2767
  [:igCreateContext, [:pointer], :pointer],
2738
2768
  [:igDebugCheckVersionAndDataLayout, [:pointer, :size_t, :size_t, :size_t, :size_t, :size_t, :size_t], :bool],
2739
2769
  [:igDebugTextEncoding, [:pointer], :void],
@@ -2753,7 +2783,6 @@ module ImGui
2753
2783
  [:igDummy, [ImVec2.by_value], :void],
2754
2784
  [:igEnd, [], :void],
2755
2785
  [:igEndChild, [], :void],
2756
- [:igEndChildFrame, [], :void],
2757
2786
  [:igEndCombo, [], :void],
2758
2787
  [:igEndDisabled, [], :void],
2759
2788
  [:igEndDragDropSource, [], :void],
@@ -2866,6 +2895,7 @@ module ImGui
2866
2895
  [:igIsItemHovered, [:int], :bool],
2867
2896
  [:igIsItemToggledOpen, [], :bool],
2868
2897
  [:igIsItemVisible, [], :bool],
2898
+ [:igIsKeyChordPressed, [:int], :bool],
2869
2899
  [:igIsKeyDown, [:int], :bool],
2870
2900
  [:igIsKeyPressed, [:int, :bool], :bool],
2871
2901
  [:igIsKeyReleased, [:int], :bool],
@@ -2885,7 +2915,7 @@ module ImGui
2885
2915
  [:igIsWindowHovered, [:int], :bool],
2886
2916
  [:igLabelText, [:pointer, :pointer, :varargs], :void],
2887
2917
  [:igListBox_Str_arr, [:pointer, :pointer, :pointer, :int, :int], :bool],
2888
- [:igListBox_FnBoolPtr, [:pointer, :pointer, :pointer, :pointer, :int, :int], :bool],
2918
+ [:igListBox_FnStrPtr, [:pointer, :pointer, :pointer, :pointer, :int, :int], :bool],
2889
2919
  [:igLoadIniSettingsFromDisk, [:pointer], :void],
2890
2920
  [:igLoadIniSettingsFromMemory, [:pointer, :size_t], :void],
2891
2921
  [:igLogButtons, [], :void],
@@ -2993,8 +3023,8 @@ module ImGui
2993
3023
  [:igShowDebugLogWindow, [:pointer], :void],
2994
3024
  [:igShowDemoWindow, [:pointer], :void],
2995
3025
  [:igShowFontSelector, [:pointer], :void],
3026
+ [:igShowIDStackToolWindow, [:pointer], :void],
2996
3027
  [:igShowMetricsWindow, [:pointer], :void],
2997
- [:igShowStackToolWindow, [:pointer], :void],
2998
3028
  [:igShowStyleEditor, [:pointer], :void],
2999
3029
  [:igShowStyleSelector, [:pointer], :bool],
3000
3030
  [:igShowUserGuide, [], :void],
@@ -3015,6 +3045,7 @@ module ImGui
3015
3045
  [:igStyleColorsDark, [:pointer], :void],
3016
3046
  [:igStyleColorsLight, [:pointer], :void],
3017
3047
  [:igTabItemButton, [:pointer, :int], :bool],
3048
+ [:igTableAngledHeadersRow, [], :void],
3018
3049
  [:igTableGetColumnCount, [], :int],
3019
3050
  [:igTableGetColumnFlags, [:int], :int],
3020
3051
  [:igTableGetColumnIndex, [], :int],
@@ -3095,30 +3126,24 @@ module ImGui
3095
3126
  # Some information such as 'flags' or 'p_open' will only be considered by the first call to Begin().
3096
3127
  # - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
3097
3128
  # anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
3098
- # [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
3099
- # BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
3100
- # returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
3129
+ # [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions
3130
+ # such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding
3131
+ # BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
3101
3132
  # - Note that the bottom of window stack always contains a window called "Debug".
3102
3133
  def self.Begin(name, p_open = nil, flags = 0)
3103
3134
  igBegin(name, p_open, flags)
3104
3135
  end
3105
3136
 
3106
- # arg: str_id(const char*), size(ImVec2), border(bool), flags(ImGuiWindowFlags)
3137
+ # arg: str_id(const char*), size(ImVec2), child_flags(ImGuiChildFlags), window_flags(ImGuiWindowFlags)
3107
3138
  # ret: bool
3108
- def self.BeginChild_Str(str_id, size = ImVec2.create(0,0), border = false, flags = 0)
3109
- igBeginChild_Str(str_id, size, border, flags)
3139
+ def self.BeginChild_Str(str_id, size = ImVec2.create(0,0), child_flags = 0, window_flags = 0)
3140
+ igBeginChild_Str(str_id, size, child_flags, window_flags)
3110
3141
  end
3111
3142
 
3112
- # arg: id(ImGuiID), size(ImVec2), border(bool), flags(ImGuiWindowFlags)
3143
+ # arg: id(ImGuiID), size(ImVec2), child_flags(ImGuiChildFlags), window_flags(ImGuiWindowFlags)
3113
3144
  # ret: bool
3114
- def self.BeginChild_ID(id, size = ImVec2.create(0,0), border = false, flags = 0)
3115
- igBeginChild_ID(id, size, border, flags)
3116
- end
3117
-
3118
- # arg: id(ImGuiID), size(ImVec2), flags(ImGuiWindowFlags)
3119
- # ret: bool
3120
- def self.BeginChildFrame(id, size, flags = 0) # helper to create a child window / scrolling region that looks like a normal widget frame
3121
- igBeginChildFrame(id, size, flags)
3145
+ def self.BeginChild_ID(id, size = ImVec2.create(0,0), child_flags = 0, window_flags = 0)
3146
+ igBeginChild_ID(id, size, child_flags, window_flags)
3122
3147
  end
3123
3148
 
3124
3149
  # arg: label(const char*), preview_value(const char*), flags(ImGuiComboFlags)
@@ -3167,9 +3192,9 @@ module ImGui
3167
3192
  # ret: bool
3168
3193
  #
3169
3194
  # Tooltips: helpers for showing a tooltip when hovering an item
3170
- # - BeginItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_Tooltip) && BeginTooltip())' idiom.
3171
- # - SetItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_Tooltip)) { SetTooltip(...); }' idiom.
3172
- # - Where 'ImGuiHoveredFlags_Tooltip' itself is a shortcut to use 'style.HoverFlagsForTooltipMouse' or 'style.HoverFlagsForTooltipNav' depending on active input type. For mouse it defaults to 'ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort'.
3195
+ # - BeginItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip) && BeginTooltip())' idiom.
3196
+ # - SetItemTooltip() is a shortcut for the 'if (IsItemHovered(ImGuiHoveredFlags_ForTooltip)) { SetTooltip(...); }' idiom.
3197
+ # - Where 'ImGuiHoveredFlags_ForTooltip' itself is a shortcut to use 'style.HoverFlagsForTooltipMouse' or 'style.HoverFlagsForTooltipNav' depending on active input type. For mouse it defaults to 'ImGuiHoveredFlags_Stationary | ImGuiHoveredFlags_DelayShort'.
3173
3198
  def self.BeginItemTooltip() # begin/append a tooltip window if preceding item was hovered.
3174
3199
  igBeginItemTooltip()
3175
3200
  end
@@ -3178,8 +3203,8 @@ module ImGui
3178
3203
  # ret: bool
3179
3204
  #
3180
3205
  # Widgets: List Boxes
3181
- # - This is essentially a thin wrapper to using BeginChild/EndChild with some stylistic changes.
3182
- # - The BeginListBox()/EndListBox() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() or any items.
3206
+ # - This is essentially a thin wrapper to using BeginChild/EndChild with the ImGuiChildFlags_FrameStyle flag for stylistic changes + displaying a label.
3207
+ # - You can submit contents and manage your selection state however you want it, by creating e.g. Selectable() or any other items.
3183
3208
  # - The simplified/old ListBox() api are helpers over BeginListBox()/EndListBox() which are kept available for convenience purpose. This is analoguous to how Combos are created.
3184
3209
  # - Choose frame width: size.x > 0.0f: custom / size.x < 0.0f or -FLT_MIN: right-align / size.x = 0.0f (default): use current ItemWidth
3185
3210
  # - Choose frame height: size.y > 0.0f: custom / size.y < 0.0f or -FLT_MIN: bottom-align / size.y = 0.0f (default): arbitrary default height which can fit ~7 items
@@ -3457,10 +3482,10 @@ module ImGui
3457
3482
  igCombo_Str(label, current_item, items_separated_by_zeros, popup_max_height_in_items)
3458
3483
  end
3459
3484
 
3460
- # arg: label(const char*), current_item(int*), items_getter(bool(*)(void* data,int idx,const char** out_text)), data(void*), items_count(int), popup_max_height_in_items(int)
3485
+ # arg: label(const char*), current_item(int*), getter(const char*(*)(void* user_data,int idx)), user_data(void*), items_count(int), popup_max_height_in_items(int)
3461
3486
  # ret: bool
3462
- def self.Combo_FnBoolPtr(label, current_item, items_getter, data, items_count, popup_max_height_in_items = -1)
3463
- igCombo_FnBoolPtr(label, current_item, items_getter, data, items_count, popup_max_height_in_items)
3487
+ def self.Combo_FnStrPtr(label, current_item, getter, user_data, items_count, popup_max_height_in_items = -1)
3488
+ igCombo_FnStrPtr(label, current_item, getter, user_data, items_count, popup_max_height_in_items)
3464
3489
  end
3465
3490
 
3466
3491
  # arg: shared_font_atlas(ImFontAtlas*)
@@ -3595,11 +3620,6 @@ module ImGui
3595
3620
  igEndChild()
3596
3621
  end
3597
3622
 
3598
- # ret: void
3599
- def self.EndChildFrame() # always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
3600
- igEndChildFrame()
3601
- end
3602
-
3603
3623
  # ret: void
3604
3624
  def self.EndCombo() # only call EndCombo() if BeginCombo() returns true!
3605
3625
  igEndCombo()
@@ -3760,38 +3780,47 @@ module ImGui
3760
3780
  end
3761
3781
 
3762
3782
  # ret: void
3763
- def self.GetCursorPos() # cursor position in window coordinates (relative to window position)
3783
+ def self.GetCursorPos() # [window-local] cursor position in window coordinates (relative to window position)
3764
3784
  pOut = ImVec2.new
3765
3785
  igGetCursorPos(pOut)
3766
3786
  return pOut
3767
3787
  end
3768
3788
 
3769
3789
  # ret: float
3770
- def self.GetCursorPosX() # (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
3790
+ def self.GetCursorPosX() # [window-local] "
3771
3791
  igGetCursorPosX()
3772
3792
  end
3773
3793
 
3774
3794
  # ret: float
3775
- def self.GetCursorPosY() # other functions such as GetCursorScreenPos or everything in ImDrawList::
3795
+ def self.GetCursorPosY() # [window-local] "
3776
3796
  igGetCursorPosY()
3777
3797
  end
3778
3798
 
3779
3799
  # ret: void
3780
- def self.GetCursorScreenPos() # cursor position in absolute coordinates (useful to work with ImDrawList API). generally top-left == GetMainViewport()->Pos == (0,0) in single viewport mode, and bottom-right == GetMainViewport()->Pos+Size == io.DisplaySize in single-viewport mode.
3800
+ #
3801
+ # Layout cursor positioning
3802
+ # - By "cursor" we mean the current output position.
3803
+ # - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
3804
+ # - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget.
3805
+ # - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
3806
+ # - Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions. -> this is the preferred way forward.
3807
+ # - Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
3808
+ # - GetCursorScreenPos() = GetCursorPos() + GetWindowPos(). GetWindowPos() is almost only ever useful to convert from window-local to absolute coordinates.
3809
+ def self.GetCursorScreenPos() # cursor position in absolute coordinates (prefer using this, also more useful to work with ImDrawList API).
3781
3810
  pOut = ImVec2.new
3782
3811
  igGetCursorScreenPos(pOut)
3783
3812
  return pOut
3784
3813
  end
3785
3814
 
3786
3815
  # ret: void
3787
- def self.GetCursorStartPos() # initial cursor position in window coordinates
3816
+ def self.GetCursorStartPos() # [window-local] initial cursor position, in window coordinates
3788
3817
  pOut = ImVec2.new
3789
3818
  igGetCursorStartPos(pOut)
3790
3819
  return pOut
3791
3820
  end
3792
3821
 
3793
3822
  # ret: pointer
3794
- def self.GetDragDropPayload() # peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
3823
+ def self.GetDragDropPayload() # peek directly into the current payload from anywhere. returns NULL when drag and drop is finished or inactive. use ImGuiPayload::IsDataType() to test for the payload type.
3795
3824
  igGetDragDropPayload()
3796
3825
  end
3797
3826
 
@@ -4053,14 +4082,14 @@ module ImGui
4053
4082
  end
4054
4083
 
4055
4084
  # ret: void
4056
- def self.GetWindowPos() # get current window position in screen space (note: it is unlikely you need to use this. Consider using current layout pos instead, GetScreenCursorPos())
4085
+ def self.GetWindowPos() # get current window position in screen space (note: it is unlikely you need to use this. Consider using current layout pos instead, GetCursorScreenPos())
4057
4086
  pOut = ImVec2.new
4058
4087
  igGetWindowPos(pOut)
4059
4088
  return pOut
4060
4089
  end
4061
4090
 
4062
4091
  # ret: void
4063
- def self.GetWindowSize() # get current window size (note: it is unlikely you need to use this. Consider using GetScreenCursorPos() and e.g. GetContentRegionAvail() instead)
4092
+ def self.GetWindowSize() # get current window size (note: it is unlikely you need to use this. Consider using GetCursorScreenPos() and e.g. GetContentRegionAvail() instead)
4064
4093
  pOut = ImVec2.new
4065
4094
  igGetWindowSize(pOut)
4066
4095
  return pOut
@@ -4076,14 +4105,15 @@ module ImGui
4076
4105
  #
4077
4106
  # Widgets: Images
4078
4107
  # - Read about ImTextureID here: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
4108
+ # - Note that ImageButton() adds style.FramePadding*2.0f to provided size. This is in order to facilitate fitting an image in a button.
4079
4109
  def self.Image(user_texture_id, size, uv0 = ImVec2.create(0,0), uv1 = ImVec2.create(1,1), tint_col = ImVec4.create(1,1,1,1), border_col = ImVec4.create(0,0,0,0)) # Implied uv0 = ImVec2(0, 0), uv1 = ImVec2(1, 1), tint_col = ImVec4(1, 1, 1, 1), border_col = ImVec4(0, 0, 0, 0)
4080
4110
  igImage(user_texture_id, size, uv0, uv1, tint_col, border_col)
4081
4111
  end
4082
4112
 
4083
- # arg: str_id(const char*), user_texture_id(ImTextureID), size(ImVec2), uv0(ImVec2), uv1(ImVec2), bg_col(ImVec4), tint_col(ImVec4)
4113
+ # arg: str_id(const char*), user_texture_id(ImTextureID), image_size(ImVec2), uv0(ImVec2), uv1(ImVec2), bg_col(ImVec4), tint_col(ImVec4)
4084
4114
  # ret: bool
4085
- def self.ImageButton(str_id, user_texture_id, size, uv0 = ImVec2.create(0,0), uv1 = ImVec2.create(1,1), bg_col = ImVec4.create(0,0,0,0), tint_col = ImVec4.create(1,1,1,1)) # Implied uv0 = ImVec2(0, 0), uv1 = ImVec2(1, 1), bg_col = ImVec4(0, 0, 0, 0), tint_col = ImVec4(1, 1, 1, 1)
4086
- igImageButton(str_id, user_texture_id, size, uv0, uv1, bg_col, tint_col)
4115
+ def self.ImageButton(str_id, user_texture_id, image_size, uv0 = ImVec2.create(0,0), uv1 = ImVec2.create(1,1), bg_col = ImVec4.create(0,0,0,0), tint_col = ImVec4.create(1,1,1,1)) # Implied uv0 = ImVec2(0, 0), uv1 = ImVec2(1, 1), bg_col = ImVec4(0, 0, 0, 0), tint_col = ImVec4(1, 1, 1, 1)
4116
+ igImageButton(str_id, user_texture_id, image_size, uv0, uv1, bg_col, tint_col)
4087
4117
  end
4088
4118
 
4089
4119
  # arg: indent_w(float)
@@ -4262,6 +4292,12 @@ module ImGui
4262
4292
  igIsItemVisible()
4263
4293
  end
4264
4294
 
4295
+ # arg: key_chord(ImGuiKeyChord)
4296
+ # ret: bool
4297
+ def self.IsKeyChordPressed(key_chord) # was key chord (mods + key) pressed, e.g. you can pass 'ImGuiMod_Ctrl | ImGuiKey_S' as a key-chord. This doesn't do any routing or focus check, please consider using Shortcut() function instead.
4298
+ igIsKeyChordPressed(key_chord)
4299
+ end
4300
+
4265
4301
  # arg: key(ImGuiKey)
4266
4302
  # ret: bool
4267
4303
  #
@@ -4377,7 +4413,7 @@ module ImGui
4377
4413
 
4378
4414
  # arg: flags(ImGuiHoveredFlags)
4379
4415
  # ret: bool
4380
- def self.IsWindowHovered(flags = 0) # is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
4416
+ def self.IsWindowHovered(flags = 0) # is current window hovered and hoverable (e.g. not blocked by a popup/modal)? See ImGuiHoveredFlags_ for options. IMPORTANT: If you are trying to check whether your mouse should be dispatched to Dear ImGui or to your underlying app, you should not use this function! Use the 'io.WantCaptureMouse' boolean for that! Refer to FAQ entry "How can I tell whether to dispatch mouse/keyboard to Dear ImGui or my application?" for details.
4381
4417
  igIsWindowHovered(flags)
4382
4418
  end
4383
4419
 
@@ -4393,10 +4429,10 @@ module ImGui
4393
4429
  igListBox_Str_arr(label, current_item, items, items_count, height_in_items)
4394
4430
  end
4395
4431
 
4396
- # arg: label(const char*), current_item(int*), items_getter(bool(*)(void* data,int idx,const char** out_text)), data(void*), items_count(int), height_in_items(int)
4432
+ # arg: label(const char*), current_item(int*), getter(const char*(*)(void* user_data,int idx)), user_data(void*), items_count(int), height_in_items(int)
4397
4433
  # ret: bool
4398
- def self.ListBox_FnBoolPtr(label, current_item, items_getter, data, items_count, height_in_items = -1)
4399
- igListBox_FnBoolPtr(label, current_item, items_getter, data, items_count, height_in_items)
4434
+ def self.ListBox_FnStrPtr(label, current_item, getter, user_data, items_count, height_in_items = -1)
4435
+ igListBox_FnStrPtr(label, current_item, getter, user_data, items_count, height_in_items)
4400
4436
  end
4401
4437
 
4402
4438
  # arg: ini_filename(const char*)
@@ -4733,13 +4769,7 @@ module ImGui
4733
4769
 
4734
4770
  # ret: void
4735
4771
  #
4736
- # Cursor / Layout
4737
- # - By "cursor" we mean the current output position.
4738
- # - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
4739
- # - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget.
4740
- # - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
4741
- # Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
4742
- # Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions.
4772
+ # Other layout functions
4743
4773
  def self.Separator() # separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
4744
4774
  igSeparator()
4745
4775
  end
@@ -4793,19 +4823,19 @@ module ImGui
4793
4823
 
4794
4824
  # arg: local_pos(ImVec2)
4795
4825
  # ret: void
4796
- def self.SetCursorPos(local_pos) # are using the main, absolute coordinate system.
4826
+ def self.SetCursorPos(local_pos) # [window-local] "
4797
4827
  igSetCursorPos(local_pos)
4798
4828
  end
4799
4829
 
4800
4830
  # arg: local_x(float)
4801
4831
  # ret: void
4802
- def self.SetCursorPosX(local_x) # GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
4832
+ def self.SetCursorPosX(local_x) # [window-local] "
4803
4833
  igSetCursorPosX(local_x)
4804
4834
  end
4805
4835
 
4806
4836
  # arg: local_y(float)
4807
4837
  # ret: void
4808
- def self.SetCursorPosY(local_y) #
4838
+ def self.SetCursorPosY(local_y) # [window-local] "
4809
4839
  igSetCursorPosY(local_y)
4810
4840
  end
4811
4841
 
@@ -4924,7 +4954,7 @@ module ImGui
4924
4954
 
4925
4955
  # arg: size_min(ImVec2), size_max(ImVec2), custom_callback(ImGuiSizeCallback), custom_callback_data(void*)
4926
4956
  # ret: void
4927
- def self.SetNextWindowSizeConstraints(size_min, size_max, custom_callback = nil, custom_callback_data = nil) # set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
4957
+ def self.SetNextWindowSizeConstraints(size_min, size_max, custom_callback = nil, custom_callback_data = nil) # set next window size limits. use 0.0f or FLT_MAX if you don't want limits. Use -1 for both min and max of same axis to preserve current size (which itself is a constraint). Use callback to apply non-trivial programmatic constraints.
4928
4958
  igSetNextWindowSizeConstraints(size_min, size_max, custom_callback, custom_callback_data)
4929
4959
  end
4930
4960
 
@@ -5063,14 +5093,14 @@ module ImGui
5063
5093
 
5064
5094
  # arg: p_open(bool*)
5065
5095
  # ret: void
5066
- def self.ShowMetricsWindow(p_open = nil) # create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
5067
- igShowMetricsWindow(p_open)
5096
+ def self.ShowIDStackToolWindow(p_open = nil) # Implied p_open = NULL
5097
+ igShowIDStackToolWindow(p_open)
5068
5098
  end
5069
5099
 
5070
5100
  # arg: p_open(bool*)
5071
5101
  # ret: void
5072
- def self.ShowStackToolWindow(p_open = nil) # create Stack Tool window. hover items with mouse to query information about the source of their unique ID.
5073
- igShowStackToolWindow(p_open)
5102
+ def self.ShowMetricsWindow(p_open = nil) # create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
5103
+ igShowMetricsWindow(p_open)
5074
5104
  end
5075
5105
 
5076
5106
  # arg: ref(ImGuiStyle*)
@@ -5165,7 +5195,7 @@ module ImGui
5165
5195
 
5166
5196
  # arg: label(const char*)
5167
5197
  # ret: bool
5168
- def self.SmallButton(label) # button with FramePadding=(0,0) to easily embed within text
5198
+ def self.SmallButton(label) # button with (FramePadding.y == 0) to easily embed within text
5169
5199
  igSmallButton(label)
5170
5200
  end
5171
5201
 
@@ -5200,6 +5230,11 @@ module ImGui
5200
5230
  igTabItemButton(label, flags)
5201
5231
  end
5202
5232
 
5233
+ # ret: void
5234
+ def self.TableAngledHeadersRow() # submit a row with angled headers for every column with the ImGuiTableColumnFlags_AngledHeader flag. MUST BE FIRST ROW.
5235
+ igTableAngledHeadersRow()
5236
+ end
5237
+
5203
5238
  # ret: int
5204
5239
  def self.TableGetColumnCount() # return number of columns (value passed to BeginTable)
5205
5240
  igTableGetColumnCount()
@@ -5246,7 +5281,7 @@ module ImGui
5246
5281
  end
5247
5282
 
5248
5283
  # ret: void
5249
- def self.TableHeadersRow() # submit all headers cells based on data provided to TableSetupColumn() + submit context menu
5284
+ def self.TableHeadersRow() # submit a row with headers cells based on data provided to TableSetupColumn() + submit context menu
5250
5285
  igTableHeadersRow()
5251
5286
  end
5252
5287
 
@@ -5438,19 +5473,29 @@ module ImGui
5438
5473
  #
5439
5474
  # Child Windows
5440
5475
  # - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
5441
- # - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
5442
- # - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
5443
- # Always call a matching EndChild() for each BeginChild() call, regardless of its return value.
5444
- # [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
5445
- # BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
5446
- # returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
5476
+ # - Before 1.90 (November 2023), the "ImGuiChildFlags child_flags = 0" parameter was "bool border = false".
5477
+ # This API is backward compatible with old code, as we guarantee that ImGuiChildFlags_Border == true.
5478
+ # Consider updating your old call sites:
5479
+ # BeginChild("Name", size, false) -> Begin("Name", size, 0); or Begin("Name", size, ImGuiChildFlags_None);
5480
+ # BeginChild("Name", size, true) -> Begin("Name", size, ImGuiChildFlags_Border);
5481
+ # - Manual sizing (each axis can use a different setting e.g. ImVec2(0.0f, 400.0f)):
5482
+ # == 0.0f: use remaining parent window size for this axis.
5483
+ # > 0.0f: use specified size for this axis.
5484
+ # < 0.0f: right/bottom-align to specified distance from available content boundaries.
5485
+ # - Specifying ImGuiChildFlags_AutoResizeX or ImGuiChildFlags_AutoResizeY makes the sizing automatic based on child contents.
5486
+ # Combining both ImGuiChildFlags_AutoResizeX _and_ ImGuiChildFlags_AutoResizeY defeats purpose of a scrolling region and is NOT recommended.
5487
+ # - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
5488
+ # anything to the window. Always call a matching EndChild() for each BeginChild() call, regardless of its return value.
5489
+ # [Important: due to legacy reason, Begin/End and BeginChild/EndChild are inconsistent with all other functions
5490
+ # such as BeginMenu/EndMenu, BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding
5491
+ # BeginXXX function returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
5447
5492
  def self.BeginChild(*arg)
5448
- # arg: 0:str_id(const char*), 1:size(ImVec2), 2:border(bool), 3:flags(ImGuiWindowFlags)
5493
+ # arg: 0:str_id(const char*), 1:size(ImVec2), 2:child_flags(ImGuiChildFlags), 3:window_flags(ImGuiWindowFlags)
5449
5494
  # ret: bool
5450
- return igBeginChild_Str(arg[0], arg[1], arg[2], arg[3]) if arg.length == 4 && (arg[0].kind_of?(String) && arg[1].kind_of?(ImVec2) && (arg[2].is_a?(TrueClass) || arg[2].is_a?(FalseClass)) && arg[3].kind_of?(Integer))
5451
- # arg: 0:id(ImGuiID), 1:size(ImVec2), 2:border(bool), 3:flags(ImGuiWindowFlags)
5495
+ return igBeginChild_Str(arg[0], arg[1], arg[2], arg[3]) if arg.length == 4 && (arg[0].kind_of?(String) && arg[1].kind_of?(ImVec2) && arg[2].kind_of?(Integer) && arg[3].kind_of?(Integer))
5496
+ # arg: 0:id(ImGuiID), 1:size(ImVec2), 2:child_flags(ImGuiChildFlags), 3:window_flags(ImGuiWindowFlags)
5452
5497
  # ret: bool
5453
- return igBeginChild_ID(arg[0], arg[1], arg[2], arg[3]) if arg.length == 4 && (arg[0].kind_of?(Integer) && arg[1].kind_of?(ImVec2) && (arg[2].is_a?(TrueClass) || arg[2].is_a?(FalseClass)) && arg[3].kind_of?(Integer))
5498
+ return igBeginChild_ID(arg[0], arg[1], arg[2], arg[3]) if arg.length == 4 && (arg[0].kind_of?(Integer) && arg[1].kind_of?(ImVec2) && arg[2].kind_of?(Integer) && arg[3].kind_of?(Integer))
5454
5499
  $stderr.puts("[Warning] BeginChild : No matching functions found (#{arg})")
5455
5500
  end
5456
5501
 
@@ -5481,9 +5526,9 @@ module ImGui
5481
5526
  # arg: 0:label(const char*), 1:current_item(int*), 2:items_separated_by_zeros(const char*), 3:popup_max_height_in_items(int)
5482
5527
  # ret: bool
5483
5528
  return igCombo_Str(arg[0], arg[1], arg[2], arg[3]) if arg.length == 4 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(String) && arg[3].kind_of?(Integer))
5484
- # arg: 0:label(const char*), 1:current_item(int*), 2:items_getter(bool(*)(void* data,int idx,const char** out_text)), 3:data(void*), 4:items_count(int), 5:popup_max_height_in_items(int)
5529
+ # arg: 0:label(const char*), 1:current_item(int*), 2:getter(const char*(*)(void* user_data,int idx)), 3:user_data(void*), 4:items_count(int), 5:popup_max_height_in_items(int)
5485
5530
  # ret: bool
5486
- return igCombo_FnBoolPtr(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]) if arg.length == 6 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(String) && arg[3].kind_of?(FFI::Pointer) && arg[4].kind_of?(Integer) && arg[5].kind_of?(Integer))
5531
+ return igCombo_FnStrPtr(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]) if arg.length == 6 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(String) && arg[3].kind_of?(FFI::Pointer) && arg[4].kind_of?(Integer) && arg[5].kind_of?(Integer))
5487
5532
  $stderr.puts("[Warning] Combo : No matching functions found (#{arg})")
5488
5533
  end
5489
5534
 
@@ -5527,9 +5572,9 @@ module ImGui
5527
5572
  # arg: 0:label(const char*), 1:current_item(int*), 2:items(const char* const[]), 3:items_count(int), 4:height_in_items(int)
5528
5573
  # ret: bool
5529
5574
  return igListBox_Str_arr(arg[0], arg[1], arg[2], arg[3], arg[4]) if arg.length == 5 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(FFI::Pointer) && arg[3].kind_of?(Integer) && arg[4].kind_of?(Integer))
5530
- # arg: 0:label(const char*), 1:current_item(int*), 2:items_getter(bool(*)(void* data,int idx,const char** out_text)), 3:data(void*), 4:items_count(int), 5:height_in_items(int)
5575
+ # arg: 0:label(const char*), 1:current_item(int*), 2:getter(const char*(*)(void* user_data,int idx)), 3:user_data(void*), 4:items_count(int), 5:height_in_items(int)
5531
5576
  # ret: bool
5532
- return igListBox_FnBoolPtr(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]) if arg.length == 6 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(String) && arg[3].kind_of?(FFI::Pointer) && arg[4].kind_of?(Integer) && arg[5].kind_of?(Integer))
5577
+ return igListBox_FnStrPtr(arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]) if arg.length == 6 && (arg[0].kind_of?(String) && arg[1].kind_of?(FFI::Pointer) && arg[2].kind_of?(String) && arg[3].kind_of?(FFI::Pointer) && arg[4].kind_of?(Integer) && arg[5].kind_of?(Integer))
5533
5578
  $stderr.puts("[Warning] ListBox : No matching functions found (#{arg})")
5534
5579
  end
5535
5580