mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-03 17:24:24 +00:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # examples/imgui_impl_dx10.cpp # examples/imgui_impl_dx11.cpp # examples/imgui_impl_glfw.cpp # examples/imgui_impl_sdl.cpp # imgui.cpp
This commit is contained in:
		@@ -132,10 +132,15 @@ Other Changes:
 | 
			
		||||
- Columns: Improved honoring alignment with various values of ItemSpacing.x and WindowPadding.x. (#125, #2666)
 | 
			
		||||
- Word-wrapping: Fixed overzealous word-wrapping when glyph edge lands exactly on the limit. Because
 | 
			
		||||
  of this, auto-fitting exactly unwrapped text would make it wrap. (fixes initial 1.15 commit, 78645a7d).
 | 
			
		||||
- Columns: Made GetColumnOffset() and GetColumnWidth() behave when there's no column set, consistently with
 | 
			
		||||
  other column functions. (#2683)
 | 
			
		||||
- Scrolling: Added SetScrollHereX(), SetScrollFromPosX() for completeness. (#1580) [@kevreco]
 | 
			
		||||
- Style: Attenuated default opacity of ImGuiCol_Separator in Classic and Light styles.
 | 
			
		||||
- Style: Added style.ColorButtonPosition (left/right, defaults to ImGuiDir_Right) to move the color button
 | 
			
		||||
  of ColorEdit3/ColorEdit4 functions to either side of the inputs.
 | 
			
		||||
- IO: Added ImGuiKey_KeyPadEnter and support in various back-ends (previously back-ends would need to
 | 
			
		||||
  specifically redirect key-pad keys to their regular counterpart). This is a temporary attenuating measure
 | 
			
		||||
  until we actually refactor and add whole sets of keys into the ImGuiKey enum. (#2677, #2005) [@amc522]
 | 
			
		||||
- Misc: Made Button(), ColorButton() not trigger an "edited" event leading to IsItemDeactivatedAfterEdit()
 | 
			
		||||
  returning true. This also effectively make ColorEdit4() not incorrect trigger IsItemDeactivatedAfterEdit()
 | 
			
		||||
  when clicking the color button to open the picker popup. (#1875)
 | 
			
		||||
@@ -148,6 +153,12 @@ Other Changes:
 | 
			
		||||
- ImDrawListSplitter: Fixed memory leak when using low-level split api (was not affecting ImDrawList api,
 | 
			
		||||
  also this type was added in 1.71 and not advertised as a public-facing feature).
 | 
			
		||||
- Fonts: binary_to_compressed_c.cpp: Display an error message if failing to open/read the input font file.
 | 
			
		||||
- Backends: DX10/DX11: Backup, clear and restore Geometry Shader is any is bound when calling renderer.
 | 
			
		||||
- Backends: DX11: Clear Hull Shader, Domain Shader, Compute Shader before rendering. Not backing/restoring them.
 | 
			
		||||
- Backends: OSX: Disabled default native Mac clipboard copy/paste implementation in core library (added in 1.71),
 | 
			
		||||
  because it needs application to be linked with '-framework ApplicationServices'. It can be explicitly
 | 
			
		||||
  enabled back by using '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h. Re-added
 | 
			
		||||
  equivalent using NSPasteboard api in the imgui_impl_osx.mm experimental back-end. (#2546)
 | 
			
		||||
- Backends: SDL2: Added dummy ImGui_ImplSDL2_InitForD3D() function to make D3D support more visible.
 | 
			
		||||
  (#2482, #2632) [@josiahmanson]
 | 
			
		||||
- Examples: Added SDL2+DirectX11 example application. (#2632, #2612, #2482) [@vincenthamm]
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
 | 
			
		||||
//  2019-05-11: Inputs: Don't filter character value from ALLEGRO_EVENT_KEY_CHAR before calling AddInputCharacter().
 | 
			
		||||
//  2019-04-30: Renderer: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
 | 
			
		||||
//  2018-11-30: Platform: Added touchscreen support.
 | 
			
		||||
@@ -282,6 +283,7 @@ bool ImGui_ImplAllegro5_Init(ALLEGRO_DISPLAY* display)
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space] = ALLEGRO_KEY_SPACE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter] = ALLEGRO_KEY_ENTER;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape] = ALLEGRO_KEY_ESCAPE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = ALLEGRO_KEY_PAD_ENTER;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A] = ALLEGRO_KEY_A;
 | 
			
		||||
    io.KeyMap[ImGuiKey_C] = ALLEGRO_KEY_C;
 | 
			
		||||
    io.KeyMap[ImGuiKey_V] = ALLEGRO_KEY_V;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2019-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-07-21: DirectX10: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData().
 | 
			
		||||
//  2019-05-29: DirectX10: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag.
 | 
			
		||||
//  2019-04-30: DirectX10: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
 | 
			
		||||
//  2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile().
 | 
			
		||||
@@ -87,6 +88,7 @@ static void ImGui_ImplDX10_SetupRenderState(ImDrawData* draw_data, ID3D10Device*
 | 
			
		||||
    ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer);
 | 
			
		||||
    ctx->PSSetShader(g_pPixelShader);
 | 
			
		||||
    ctx->PSSetSamplers(0, 1, &g_pFontSampler);
 | 
			
		||||
    ctx->GSSetShader(NULL);
 | 
			
		||||
 | 
			
		||||
    // Setup render state
 | 
			
		||||
    const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f };
 | 
			
		||||
@@ -189,6 +191,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
        ID3D10SamplerState*         PSSampler;
 | 
			
		||||
        ID3D10PixelShader*          PS;
 | 
			
		||||
        ID3D10VertexShader*         VS;
 | 
			
		||||
        ID3D10GeometryShader*       GS;
 | 
			
		||||
        D3D10_PRIMITIVE_TOPOLOGY    PrimitiveTopology;
 | 
			
		||||
        ID3D10Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer;
 | 
			
		||||
        UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset;
 | 
			
		||||
@@ -207,6 +210,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    ctx->PSGetShader(&old.PS);
 | 
			
		||||
    ctx->VSGetShader(&old.VS);
 | 
			
		||||
    ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer);
 | 
			
		||||
    ctx->GSGetShader(&old.GS);
 | 
			
		||||
    ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology);
 | 
			
		||||
    ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset);
 | 
			
		||||
    ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset);
 | 
			
		||||
@@ -261,6 +265,7 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    ctx->PSSetSamplers(0, 1, &old.PSSampler); if (old.PSSampler) old.PSSampler->Release();
 | 
			
		||||
    ctx->PSSetShader(old.PS); if (old.PS) old.PS->Release();
 | 
			
		||||
    ctx->VSSetShader(old.VS); if (old.VS) old.VS->Release();
 | 
			
		||||
    ctx->GSSetShader(old.GS); if (old.GS) old.GS->Release();
 | 
			
		||||
    ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release();
 | 
			
		||||
    ctx->IASetPrimitiveTopology(old.PrimitiveTopology);
 | 
			
		||||
    ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release();
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2019-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-07-21: DirectX11: Backup, clear and restore Geometry Shader is any is bound when calling ImGui_ImplDX10_RenderDrawData. Clearing Hull/Domain/Compute shaders without backup/restore.
 | 
			
		||||
//  2019-05-29: DirectX11: Added support for large mesh (64K+ vertices), enable ImGuiBackendFlags_RendererHasVtxOffset flag.
 | 
			
		||||
//  2019-04-30: DirectX11: Added support for special ImDrawCallback_ResetRenderState callback to reset render state.
 | 
			
		||||
//  2018-12-03: Misc: Added #pragma comment statement to automatically link with d3dcompiler.lib when using D3DCompile().
 | 
			
		||||
@@ -87,6 +88,10 @@ static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, ID3D11DeviceC
 | 
			
		||||
    ctx->VSSetConstantBuffers(0, 1, &g_pVertexConstantBuffer);
 | 
			
		||||
    ctx->PSSetShader(g_pPixelShader, NULL, 0);
 | 
			
		||||
    ctx->PSSetSamplers(0, 1, &g_pFontSampler);
 | 
			
		||||
    ctx->GSSetShader(NULL, NULL, 0);
 | 
			
		||||
    ctx->HSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used..
 | 
			
		||||
    ctx->DSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used..
 | 
			
		||||
    ctx->CSSetShader(NULL, NULL, 0); // In theory we should backup and restore this as well.. very infrequently used..
 | 
			
		||||
 | 
			
		||||
    // Setup blend state
 | 
			
		||||
    const float blend_factor[4] = { 0.f, 0.f, 0.f, 0.f };
 | 
			
		||||
@@ -191,8 +196,9 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
        ID3D11SamplerState*         PSSampler;
 | 
			
		||||
        ID3D11PixelShader*          PS;
 | 
			
		||||
        ID3D11VertexShader*         VS;
 | 
			
		||||
        UINT                        PSInstancesCount, VSInstancesCount;
 | 
			
		||||
        ID3D11ClassInstance*        PSInstances[256], *VSInstances[256];   // 256 is max according to PSSetShader documentation
 | 
			
		||||
        ID3D11GeometryShader*       GS;
 | 
			
		||||
        UINT                        PSInstancesCount, VSInstancesCount, GSInstancesCount;
 | 
			
		||||
        ID3D11ClassInstance         *PSInstances[256], *VSInstances[256], *GSInstances[256];   // 256 is max according to PSSetShader documentation
 | 
			
		||||
        D3D11_PRIMITIVE_TOPOLOGY    PrimitiveTopology;
 | 
			
		||||
        ID3D11Buffer*               IndexBuffer, *VertexBuffer, *VSConstantBuffer;
 | 
			
		||||
        UINT                        IndexBufferOffset, VertexBufferStride, VertexBufferOffset;
 | 
			
		||||
@@ -212,6 +218,8 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    ctx->PSGetShader(&old.PS, old.PSInstances, &old.PSInstancesCount);
 | 
			
		||||
    ctx->VSGetShader(&old.VS, old.VSInstances, &old.VSInstancesCount);
 | 
			
		||||
    ctx->VSGetConstantBuffers(0, 1, &old.VSConstantBuffer);
 | 
			
		||||
    ctx->GSGetShader(&old.GS, old.GSInstances, &old.GSInstancesCount);
 | 
			
		||||
 | 
			
		||||
    ctx->IAGetPrimitiveTopology(&old.PrimitiveTopology);
 | 
			
		||||
    ctx->IAGetIndexBuffer(&old.IndexBuffer, &old.IndexBufferFormat, &old.IndexBufferOffset);
 | 
			
		||||
    ctx->IAGetVertexBuffers(0, 1, &old.VertexBuffer, &old.VertexBufferStride, &old.VertexBufferOffset);
 | 
			
		||||
@@ -268,6 +276,7 @@ void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
 | 
			
		||||
    for (UINT i = 0; i < old.PSInstancesCount; i++) if (old.PSInstances[i]) old.PSInstances[i]->Release();
 | 
			
		||||
    ctx->VSSetShader(old.VS, old.VSInstances, old.VSInstancesCount); if (old.VS) old.VS->Release();
 | 
			
		||||
    ctx->VSSetConstantBuffers(0, 1, &old.VSConstantBuffer); if (old.VSConstantBuffer) old.VSConstantBuffer->Release();
 | 
			
		||||
    ctx->GSSetShader(old.GS, old.GSInstances, old.GSInstancesCount); if (old.GS) old.GS->Release();
 | 
			
		||||
    for (UINT i = 0; i < old.VSInstancesCount; i++) if (old.VSInstances[i]) old.VSInstances[i]->Release();
 | 
			
		||||
    ctx->IASetPrimitiveTopology(old.PrimitiveTopology);
 | 
			
		||||
    ctx->IASetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset); if (old.IndexBuffer) old.IndexBuffer->Release();
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,8 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
 | 
			
		||||
//  2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter().
 | 
			
		||||
//  2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized.
 | 
			
		||||
//  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
 | 
			
		||||
@@ -166,6 +167,7 @@ static bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks, Glfw
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space] = GLFW_KEY_SPACE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = GLFW_KEY_KP_ENTER;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A] = GLFW_KEY_A;
 | 
			
		||||
    io.KeyMap[ImGuiKey_C] = GLFW_KEY_C;
 | 
			
		||||
    io.KeyMap[ImGuiKey_V] = GLFW_KEY_V;
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,7 @@ bool ImGui_ImplGLUT_Init()
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space]       = ' ';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter]       = 13; // == CTRL+M
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape]      = 27;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = 13; // == CTRL+M
 | 
			
		||||
    io.KeyMap[ImGuiKey_A]           = 'A';
 | 
			
		||||
    io.KeyMap[ImGuiKey_C]           = 'C';
 | 
			
		||||
    io.KeyMap[ImGuiKey_V]           = 'V';
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
 | 
			
		||||
//  2019-05-11: Inputs: Don't filter value from character callback before calling AddInputCharacter().
 | 
			
		||||
//  2018-11-30: Misc: Setting up io.BackendPlatformName/io.BackendRendererName so they can be displayed in the About Window.
 | 
			
		||||
//  2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_Marmalade_RenderDrawData() in the .h file so you can call it yourself.
 | 
			
		||||
@@ -235,6 +236,7 @@ bool    ImGui_Marmalade_Init(bool install_callbacks)
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space] = s3eKeySpace;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter] = s3eKeyEnter;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape] = s3eKeyEsc;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = s3eKeyNumPadEnter;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A] = s3eKeyA;
 | 
			
		||||
    io.KeyMap[ImGuiKey_C] = s3eKeyC;
 | 
			
		||||
    io.KeyMap[ImGuiKey_V] = s3eKeyV;
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2019-07-21: Readded clipboard handlers as they are not enabled by default in core imgui.cpp (reverted 2019-05-18 change).
 | 
			
		||||
//  2019-05-28: Inputs: Added mouse cursor shape and visibility support.
 | 
			
		||||
//  2019-05-18: Misc: Removed clipboard handlers as they are now supported by core imgui.cpp.
 | 
			
		||||
//  2019-05-11: Inputs: Don't filter character values before calling AddInputCharacter() apart from 0xF700..0xFFFF range.
 | 
			
		||||
@@ -48,27 +49,28 @@ bool ImGui_ImplOSX_Init()
 | 
			
		||||
 | 
			
		||||
    // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array.
 | 
			
		||||
    const int offset_for_function_keys = 256 - 0xF700;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Tab]         = '\t';
 | 
			
		||||
    io.KeyMap[ImGuiKey_LeftArrow]   = NSLeftArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_RightArrow]  = NSRightArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_UpArrow]     = NSUpArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_DownArrow]   = NSDownArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_PageUp]      = NSPageUpFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_PageDown]    = NSPageDownFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Home]        = NSHomeFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_End]         = NSEndFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Insert]      = NSInsertFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Delete]      = NSDeleteFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Backspace]   = 127;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space]       = 32;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter]       = 13;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape]      = 27;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A]           = 'A';
 | 
			
		||||
    io.KeyMap[ImGuiKey_C]           = 'C';
 | 
			
		||||
    io.KeyMap[ImGuiKey_V]           = 'V';
 | 
			
		||||
    io.KeyMap[ImGuiKey_X]           = 'X';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Y]           = 'Y';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Z]           = 'Z';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Tab]             = '\t';
 | 
			
		||||
    io.KeyMap[ImGuiKey_LeftArrow]       = NSLeftArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_RightArrow]      = NSRightArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_UpArrow]         = NSUpArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_DownArrow]       = NSDownArrowFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_PageUp]          = NSPageUpFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_PageDown]        = NSPageDownFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Home]            = NSHomeFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_End]             = NSEndFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Insert]          = NSInsertFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Delete]          = NSDeleteFunctionKey + offset_for_function_keys;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Backspace]       = 127;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space]           = 32;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter]           = 13;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape]          = 27;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter]     = 13;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A]               = 'A';
 | 
			
		||||
    io.KeyMap[ImGuiKey_C]               = 'C';
 | 
			
		||||
    io.KeyMap[ImGuiKey_V]               = 'V';
 | 
			
		||||
    io.KeyMap[ImGuiKey_X]               = 'X';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Y]               = 'Y';
 | 
			
		||||
    io.KeyMap[ImGuiKey_Z]               = 'Z';
 | 
			
		||||
 | 
			
		||||
    // Load cursors. Some of them are undocumented.
 | 
			
		||||
    g_MouseCursorHidden = false;
 | 
			
		||||
@@ -81,8 +83,34 @@ bool ImGui_ImplOSX_Init()
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = [NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)] ? [NSCursor _windowResizeNorthEastSouthWestCursor] : [NSCursor closedHandCursor];
 | 
			
		||||
    g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = [NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)] ? [NSCursor _windowResizeNorthWestSouthEastCursor] : [NSCursor closedHandCursor];
 | 
			
		||||
 | 
			
		||||
    // We don't set the io.SetClipboardTextFn/io.GetClipboardTextFn handlers,
 | 
			
		||||
    // because imgui.cpp has a default for them that works with OSX.
 | 
			
		||||
    // Note that imgui.cpp also include default OSX clipboard handlers which can be enabled
 | 
			
		||||
    // by adding '#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS' in imconfig.h and adding '-framework ApplicationServices' to your linker command-line.
 | 
			
		||||
    // Since we are already in ObjC land here, it is easy for us to add a clipboard handler using the NSPasteboard api.
 | 
			
		||||
    io.SetClipboardTextFn = [](void*, const char* str) -> void
 | 
			
		||||
    {
 | 
			
		||||
        NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
 | 
			
		||||
        [pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil];
 | 
			
		||||
        [pasteboard setString:[NSString stringWithUTF8String:str] forType:NSPasteboardTypeString];
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    io.GetClipboardTextFn = [](void*) -> const char*
 | 
			
		||||
    {
 | 
			
		||||
        NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
 | 
			
		||||
        NSString* available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:NSPasteboardTypeString]];
 | 
			
		||||
        if (![available isEqualToString:NSPasteboardTypeString])
 | 
			
		||||
            return NULL;
 | 
			
		||||
 | 
			
		||||
        NSString* string = [pasteboard stringForType:NSPasteboardTypeString];
 | 
			
		||||
        if (string == nil)
 | 
			
		||||
            return NULL;
 | 
			
		||||
 | 
			
		||||
        const char* string_c = (const char*)[string UTF8String];
 | 
			
		||||
        size_t string_len = strlen(string_c);
 | 
			
		||||
        static ImVector<char> s_clipboard;
 | 
			
		||||
        s_clipboard.resize((int)string_len + 1);
 | 
			
		||||
        strcpy(s_clipboard.Data, string_c);
 | 
			
		||||
        return s_clipboard.Data;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,8 @@
 | 
			
		||||
 | 
			
		||||
// CHANGELOG
 | 
			
		||||
// (minor and older changes stripped away, please see git history for details)
 | 
			
		||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
			
		||||
//  2019-07-21: Inputs: Added mapping for ImGuiKey_KeyPadEnter.
 | 
			
		||||
//  2019-04-23: Inputs: Added support for SDL_GameController (if ImGuiConfigFlags_NavEnableGamepad is set by user application).
 | 
			
		||||
//  2019-03-12: Misc: Preserve DisplayFramebufferScale when main window is minimized.
 | 
			
		||||
//  2018-12-21: Inputs: Workaround for Android/iOS which don't seem to handle focus related calls.
 | 
			
		||||
@@ -177,6 +178,7 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window, void* sdl_gl_context)
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space] = SDL_SCANCODE_SPACE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter] = SDL_SCANCODE_RETURN;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape] = SDL_SCANCODE_ESCAPE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = SDL_SCANCODE_RETURN2;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A] = SDL_SCANCODE_A;
 | 
			
		||||
    io.KeyMap[ImGuiKey_C] = SDL_SCANCODE_C;
 | 
			
		||||
    io.KeyMap[ImGuiKey_V] = SDL_SCANCODE_V;
 | 
			
		||||
 
 | 
			
		||||
@@ -93,6 +93,7 @@ bool    ImGui_ImplWin32_Init(void* hwnd)
 | 
			
		||||
    io.KeyMap[ImGuiKey_Space] = VK_SPACE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Enter] = VK_RETURN;
 | 
			
		||||
    io.KeyMap[ImGuiKey_Escape] = VK_ESCAPE;
 | 
			
		||||
    io.KeyMap[ImGuiKey_KeyPadEnter] = VK_RETURN;
 | 
			
		||||
    io.KeyMap[ImGuiKey_A] = 'A';
 | 
			
		||||
    io.KeyMap[ImGuiKey_C] = 'C';
 | 
			
		||||
    io.KeyMap[ImGuiKey_V] = 'V';
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@
 | 
			
		||||
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc.
 | 
			
		||||
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow.
 | 
			
		||||
//#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function (clipboard, ime).
 | 
			
		||||
//#define IMGUI_DISABLE_OSX_FUNCTIONS                       // [OSX] Won't use and link with any OSX function (clipboard).
 | 
			
		||||
//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS      // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices').
 | 
			
		||||
//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf.
 | 
			
		||||
//#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h.
 | 
			
		||||
//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -1102,6 +1102,7 @@ static int              FindWindowFocusIndex(ImGuiWindow* window);
 | 
			
		||||
static void             UpdateMouseInputs();
 | 
			
		||||
static void             UpdateMouseWheel();
 | 
			
		||||
static bool             UpdateManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4]);
 | 
			
		||||
static void             UpdateDebugToolItemPicker();
 | 
			
		||||
static void             RenderWindowOuterBorders(ImGuiWindow* window);
 | 
			
		||||
static void             RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, bool handle_borders_and_resize_grips, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
 | 
			
		||||
static void             RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);
 | 
			
		||||
@@ -3749,15 +3750,10 @@ void ImGui::UpdateHoveredWindowAndCaptureFlags()
 | 
			
		||||
    g.IO.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::NewFrame()
 | 
			
		||||
static void NewFrameSanityChecks()
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
    ImGuiTestEngineHook_PreNewFrame(&g);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // Check user data
 | 
			
		||||
    // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
 | 
			
		||||
    IM_ASSERT(g.Initialized);
 | 
			
		||||
@@ -3770,7 +3766,6 @@ void ImGui::NewFrame()
 | 
			
		||||
    IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f            && "Invalid style setting. Alpha cannot be negative (allows us to avoid a few clamps in color computations)!");
 | 
			
		||||
    IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting.");
 | 
			
		||||
    IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
 | 
			
		||||
 | 
			
		||||
    for (int n = 0; n < ImGuiKey_COUNT; n++)
 | 
			
		||||
        IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < IM_ARRAYSIZE(g.IO.KeysDown) && "io.KeyMap[] contains an out of bound value (need to be 0..512, or -1 for unmapped key)");
 | 
			
		||||
 | 
			
		||||
@@ -3781,6 +3776,19 @@ void ImGui::NewFrame()
 | 
			
		||||
    // Perform simple check: the beta io.ConfigWindowsResizeFromEdges option requires back-end to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
 | 
			
		||||
    if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
 | 
			
		||||
        g.IO.ConfigWindowsResizeFromEdges = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::NewFrame()
 | 
			
		||||
{
 | 
			
		||||
    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
    ImGuiTestEngineHook_PreNewFrame(&g);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // Check and assert for various common IO and Configuration mistakes
 | 
			
		||||
    NewFrameSanityChecks();
 | 
			
		||||
 | 
			
		||||
    // Perform simple check: error if Docking or Viewport are enabled _exactly_ on frame 1 (instead of frame 0 or later), which is a common error leading to loss of .ini data.
 | 
			
		||||
    const ImGuiColumnsFlags prev_config_flags = g.ConfigFlagsForFrame;
 | 
			
		||||
@@ -4015,7 +4023,28 @@ void ImGui::NewFrame()
 | 
			
		||||
    g.BeginPopupStack.resize(0);
 | 
			
		||||
    ClosePopupsOverWindow(g.NavWindow, false);
 | 
			
		||||
 | 
			
		||||
    // Docking
 | 
			
		||||
    DockContextUpdateDocking(&g);
 | 
			
		||||
 | 
			
		||||
    // [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
 | 
			
		||||
    UpdateDebugToolItemPicker();
 | 
			
		||||
 | 
			
		||||
    // Create implicit/fallback window - which we will only render it if the user has added something to it.
 | 
			
		||||
    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
 | 
			
		||||
    // This fallback is particularly important as it avoid ImGui:: calls from crashing.
 | 
			
		||||
    SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
 | 
			
		||||
    Begin("Debug##Default");
 | 
			
		||||
    g.FrameScopePushedImplicitWindow = true;
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
    ImGuiTestEngineHook_PostNewFrame(&g);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
 | 
			
		||||
void ImGui::UpdateDebugToolItemPicker()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    g.DebugItemPickerBreakID = 0;
 | 
			
		||||
    if (g.DebugItemPickerActive)
 | 
			
		||||
    {
 | 
			
		||||
@@ -4035,20 +4064,6 @@ void ImGui::NewFrame()
 | 
			
		||||
        ImGui::TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
 | 
			
		||||
        ImGui::EndTooltip();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Docking
 | 
			
		||||
    DockContextUpdateDocking(&g);
 | 
			
		||||
 | 
			
		||||
    // Create implicit/fallback window - which we will only render it if the user has added something to it.
 | 
			
		||||
    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
 | 
			
		||||
    // This fallback is particularly important as it avoid ImGui:: calls from crashing.
 | 
			
		||||
    SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
 | 
			
		||||
    Begin("Debug##Default");
 | 
			
		||||
    g.FrameScopePushedImplicitWindow = true;
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
    ImGuiTestEngineHook_PostNewFrame(&g);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::Initialize(ImGuiContext* context)
 | 
			
		||||
@@ -6029,7 +6044,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
			
		||||
 | 
			
		||||
        const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
 | 
			
		||||
        if (window_pos_with_pivot)
 | 
			
		||||
            SetWindowPos(window, ImMax(style.DisplaySafeAreaPadding, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot), 0); // Position given a pivot (e.g. for centering)
 | 
			
		||||
            SetWindowPos(window, window->SetWindowPosVal - window->SizeFull * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
 | 
			
		||||
        else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
 | 
			
		||||
            window->Pos = FindBestWindowPosForPopup(window);
 | 
			
		||||
        else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
 | 
			
		||||
@@ -14226,12 +14241,13 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
 | 
			
		||||
    ::CloseClipboard();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif defined(__APPLE__) && TARGET_OS_OSX && !defined(IMGUI_DISABLE_OSX_FUNCTIONS)
 | 
			
		||||
#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS)
 | 
			
		||||
 | 
			
		||||
#include <Carbon/Carbon.h>  // Use old API to avoid need for separate .mm file
 | 
			
		||||
static PasteboardRef main_clipboard = 0;
 | 
			
		||||
 | 
			
		||||
// OSX clipboard implementation
 | 
			
		||||
// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line!
 | 
			
		||||
static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
 | 
			
		||||
{
 | 
			
		||||
    if (!main_clipboard)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							@@ -48,7 +48,7 @@ Index of this file:
 | 
			
		||||
// Version
 | 
			
		||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
 | 
			
		||||
#define IMGUI_VERSION               "1.72 WIP"
 | 
			
		||||
#define IMGUI_VERSION_NUM           17101
 | 
			
		||||
#define IMGUI_VERSION_NUM           17102
 | 
			
		||||
#define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
 | 
			
		||||
#define IMGUI_HAS_VIEWPORT          1 // Viewport WIP branch
 | 
			
		||||
#define IMGUI_HAS_DOCK              1 // Docking WIP branch
 | 
			
		||||
@@ -997,6 +997,7 @@ enum ImGuiKey_
 | 
			
		||||
    ImGuiKey_Space,
 | 
			
		||||
    ImGuiKey_Enter,
 | 
			
		||||
    ImGuiKey_Escape,
 | 
			
		||||
    ImGuiKey_KeyPadEnter,
 | 
			
		||||
    ImGuiKey_A,         // for text edit CTRL+A: select all
 | 
			
		||||
    ImGuiKey_C,         // for text edit CTRL+C: copy
 | 
			
		||||
    ImGuiKey_V,         // for text edit CTRL+V: paste
 | 
			
		||||
 
 | 
			
		||||
@@ -2651,7 +2651,9 @@ static void ShowDemoWindowColumns()
 | 
			
		||||
        static int columns_count = 4;
 | 
			
		||||
        const int lines_count = 3;
 | 
			
		||||
        ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
 | 
			
		||||
        ImGui::DragInt("##columns_count", &columns_count, 0.1f, 1, 10, "%d columns");
 | 
			
		||||
        ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
 | 
			
		||||
        if (columns_count < 2)
 | 
			
		||||
            columns_count = 2;
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
        ImGui::Checkbox("horizontal", &h_borders);
 | 
			
		||||
        ImGui::SameLine();
 | 
			
		||||
 
 | 
			
		||||
@@ -3660,7 +3660,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
            }
 | 
			
		||||
            state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
 | 
			
		||||
        }
 | 
			
		||||
        else if (IsKeyPressedMap(ImGuiKey_Enter))
 | 
			
		||||
        else if (IsKeyPressedMap(ImGuiKey_Enter) || IsKeyPressedMap(ImGuiKey_KeyPadEnter))
 | 
			
		||||
        {
 | 
			
		||||
            bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
 | 
			
		||||
            if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
 | 
			
		||||
@@ -7271,7 +7271,8 @@ float ImGui::GetColumnOffset(int column_index)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindowRead();
 | 
			
		||||
    ImGuiColumns* columns = window->DC.CurrentColumns;
 | 
			
		||||
    IM_ASSERT(columns != NULL);
 | 
			
		||||
    if (columns == NULL)
 | 
			
		||||
        return 0.0f;
 | 
			
		||||
 | 
			
		||||
    if (column_index < 0)
 | 
			
		||||
        column_index = columns->Current;
 | 
			
		||||
@@ -7297,9 +7298,11 @@ static float GetColumnWidthEx(ImGuiColumns* columns, int column_index, bool befo
 | 
			
		||||
 | 
			
		||||
float ImGui::GetColumnWidth(int column_index)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindowRead();
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    ImGuiColumns* columns = window->DC.CurrentColumns;
 | 
			
		||||
    IM_ASSERT(columns != NULL);
 | 
			
		||||
    if (columns == NULL)
 | 
			
		||||
        return GetContentRegionAvail().x;
 | 
			
		||||
 | 
			
		||||
    if (column_index < 0)
 | 
			
		||||
        column_index = columns->Current;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user