mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # imgui.h # imgui_internal.h
This commit is contained in:
		| @@ -9,7 +9,7 @@ | ||||
|  | ||||
| // Important: to compile on 32-bit systems, this backend requires code to be compiled with '#define ImTextureID ImU64'. | ||||
| // This is because we need ImTextureID to carry a 64-bit value and by default ImTextureID is defined as void*. | ||||
| // This define is done in the example .vcxproj file and need to be replicated in your app (by e.g. editing imconfig.h) | ||||
| // This define is set in the example .vcxproj file and need to be replicated in your app or by adding it to your imconfig.h file. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|  | ||||
| // Important: to compile on 32-bit systems, this backend requires code to be compiled with '#define ImTextureID ImU64'. | ||||
| // This is because we need ImTextureID to carry a 64-bit value and by default ImTextureID is defined as void*. | ||||
| // This define is done in the example .vcxproj file and need to be replicated in your app (by e.g. editing imconfig.h) | ||||
| // This define is set in the example .vcxproj file and need to be replicated in your app or by adding it to your imconfig.h file. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
|   | ||||
| @@ -180,6 +180,7 @@ Other Changes: | ||||
| - Examples: Apple+Metal: Consolidated/simplified to get closer to other examples. (#3543) [@warrenm] | ||||
| - Examples: Apple+Metal: Forward events down so OS key combination like Cmd+Q can work. (#3554) [@rokups] | ||||
| - Examples: Emscripten: Renamed example_emscripten/ to example_emscripten_opengl3/. (#3632) | ||||
| - Examples: DirectX12: Move ImGui::Render() call above the first barrier to clarify its lack of effect on the graphics pipe. | ||||
| - CI: Fix testing for Windows DLL builds. (#3603, #3601) [@iboB] | ||||
| - Docs: Split examples/README.txt into docs/BACKENDS.md and docs/EXAMPLES.md improved them. | ||||
| - Docs: Consistently renamed all occurences of "binding" and "back-end" to "backend" in comments and docs. | ||||
|   | ||||
| @@ -214,8 +214,6 @@ Button("OK");          // Label = "OK",     ID = hash of ("MyOtherWindow", "OK") | ||||
| End(); | ||||
| ``` | ||||
|  | ||||
| We used "..." above to signify whatever was already pushed to the ID stack previously: | ||||
|  | ||||
| - If you have a same ID twice in the same location, you'll have a conflict: | ||||
| ```cpp | ||||
| Button("OK"); | ||||
|   | ||||
| @@ -132,7 +132,7 @@ Also see [Wiki](https://github.com/ocornut/imgui/wiki) for more links and ideas. | ||||
| ### Upcoming Changes | ||||
|  | ||||
| Some of the goals for 2020 are: | ||||
| - Work on new Tables API (to replace Columns). (see [#2957](https://github.com/ocornut/imgui/issues/2957), in public [tables](https://github.com/ocornut/imgui/tree/tables) branch looking for feedback) | ||||
| - Work on Tables (see [#2957](https://github.com/ocornut/imgui/issues/2957), now merged in master. | ||||
| - Work on Docking (see [#2109](https://github.com/ocornut/imgui/issues/2109), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch) | ||||
| - Work on Multi-Viewport / Multiple OS windows. (see [#1542](https://github.com/ocornut/imgui/issues/1542), in public [docking](https://github.com/ocornut/imgui/tree/docking) branch looking for feedback) | ||||
| - Work on gamepad/keyboard controls. (see [#787](https://github.com/ocornut/imgui/issues/787)) | ||||
|   | ||||
| @@ -129,18 +129,6 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | ||||
|  - group: IsHovered() after EndGroup() covers whole aabb rather than the intersection of individual items. Is that desirable? | ||||
|  - group: merge deactivation/activation within same group (fwd WasEdited flag). (#2550) | ||||
|  | ||||
|  - columns: sizing policy (e.g. for each column: fixed size, %, fill, distribute default size among fills) (#513, #125) | ||||
|  - columns: add a conditional parameter to SetColumnOffset() (#513, #125) | ||||
|  - columns: headers. re-orderable. (#513, #125) | ||||
|  - columns: optional sorting modifiers (up/down), sort list so sorting can be done multi-criteria. notify user when sort order changed. | ||||
|  - columns: option to alternate background colors on odd/even scanlines. | ||||
|  - columns: allow columns to recurse. | ||||
|  - columns: allow a same columns set to be interrupted by e.g. CollapsingHeader and resume with columns in sync when moving them. | ||||
|  - columns: sizing is lossy when columns width is very small (default width may turn negative etc.) | ||||
|  - columns: separator function or parameter that works within the column (currently Separator() bypass all columns) (#125) | ||||
|  - columns: flag to add horizontal separator above/below) | ||||
|  - columns/layout: setup minimum line height (equivalent of automatically calling AlignFirstTextHeightToWidgets) | ||||
|  | ||||
| !- color: the color conversion helpers/types are a mess and needs sorting out. | ||||
|  - color: (api breaking) ImGui::ColorConvertXXX functions should be loose ImColorConvertXX to match imgui_internals.h | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include *.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_opengl2.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_glfw_opengl2 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,3 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I ..\libs\gl3w *.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c /FeDebug/example_glfw_opengl3.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_glfw_opengl3 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I..\libs\gl3w | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c  | ||||
| @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,7 +1,14 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
|  | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_vulkan.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
| @set OUT_EXE=example_glfw_vulkan | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
|  | ||||
| mkdir Release | ||||
| cl /nologo /Zi /MD /Ox /Oi /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeRelease/example_glfw_vulkan.exe /FoRelease/ /link /LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
| @set OUT_DIR=Debug | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|  | ||||
| @set OUT_DIR=Release | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,7 +1,13 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of amd64/vcvars32.bat to setup 64-bit command-line compiler. | ||||
|  | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeDebug/example_glfw_vulkan.exe /FoDebug/ /link /LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
|  | ||||
| mkdir Release | ||||
| cl /nologo /Zi /MD /Ox /Oi /I .. /I ..\.. /I ..\libs\glfw\include /I %VULKAN_SDK%\include *.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp /FeRelease/example_glfw_vulkan.exe /FoRelease/ /link /LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib | ||||
| @set OUT_DIR=Debug | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|  | ||||
| @set OUT_DIR=Release | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| set OUT_DIR=Debug | ||||
| set OUT_EXE=example_sdl_directx11 | ||||
| set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" | ||||
| set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp | ||||
| set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_sdl_directx11 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| set OUT_DIR=Debug | ||||
| set OUT_EXE=example_sdl_opengl2 | ||||
| set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include | ||||
| set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp | ||||
| set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_sdl_opengl2 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| set OUT_DIR=Debug | ||||
| set OUT_EXE=example_sdl_opengl3 | ||||
| set INCLUDES=/I.. /I..\.. /I%SDL2_DIR%\include /I..\libs\gl3w | ||||
| set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c | ||||
| set LIBS=/libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_sdl_opengl3 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I..\libs\gl3w | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp ..\libs\gl3w\GL\gl3w.c | ||||
| @set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console | ||||
|   | ||||
| @@ -1,4 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" /D UNICODE /D _UNICODE *.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\backends\imgui_impl_dx10.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx10.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d10.lib d3dcompiler.lib | ||||
|  | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_win32_directx10 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\backends\imgui_impl_dx10.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d10.lib d3dcompiler.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,4 +1,9 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" /D UNICODE /D _UNICODE *.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx11.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_win32_directx11 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include" | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,9 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| @REM Important: to build on 32-bit systems, the DX12 backends needs '#define ImTextureID ImU64', so we pass it here. | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_win32_directx12 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx12.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=d3d12.lib d3dcompiler.lib dxgi.lib | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /D ImTextureID=ImU64 /D UNICODE /D _UNICODE *.cpp ..\..\backends\imgui_impl_dx12.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx12.exe /FoDebug/ /link d3d12.lib d3dcompiler.lib dxgi.lib | ||||
|  | ||||
| cl /nologo /Zi /MD %INCLUDES% /D ImTextureID=ImU64 /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| // Dear ImGui: standalone example application for DirectX 12 | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
| // FIXME: 64-bit only for now! (Because sizeof(ImTextureId) == sizeof(void*)) | ||||
|  | ||||
| // Important: to compile on 32-bit systems, the DirectX12 backend requires code to be compiled with '#define ImTextureID ImU64'. | ||||
| // This is because we need ImTextureID to carry a 64-bit value and by default ImTextureID is defined as void*. | ||||
| // This define is set in the example .vcxproj file and need to be replicated in your app or by adding it to your imconfig.h file. | ||||
|  | ||||
| #include "imgui.h" | ||||
| #include "imgui_impl_win32.h" | ||||
| @@ -185,9 +188,11 @@ int main(int, char**) | ||||
|         } | ||||
|  | ||||
|         // Rendering | ||||
|         FrameContext* frameCtxt = WaitForNextFrameResources(); | ||||
|         ImGui::Render(); | ||||
|  | ||||
|         FrameContext* frameCtx = WaitForNextFrameResources(); | ||||
|         UINT backBufferIdx = g_pSwapChain->GetCurrentBackBufferIndex(); | ||||
|         frameCtxt->CommandAllocator->Reset(); | ||||
|         frameCtx->CommandAllocator->Reset(); | ||||
|  | ||||
|         D3D12_RESOURCE_BARRIER barrier = {}; | ||||
|         barrier.Type                   = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; | ||||
| @@ -196,13 +201,13 @@ int main(int, char**) | ||||
|         barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; | ||||
|         barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; | ||||
|         barrier.Transition.StateAfter  = D3D12_RESOURCE_STATE_RENDER_TARGET; | ||||
|  | ||||
|         g_pd3dCommandList->Reset(frameCtxt->CommandAllocator, NULL); | ||||
|         g_pd3dCommandList->Reset(frameCtx->CommandAllocator, NULL); | ||||
|         g_pd3dCommandList->ResourceBarrier(1, &barrier); | ||||
|  | ||||
|         // Render Dear ImGui graphics | ||||
|         g_pd3dCommandList->ClearRenderTargetView(g_mainRenderTargetDescriptor[backBufferIdx], (float*)&clear_color, 0, NULL); | ||||
|         g_pd3dCommandList->OMSetRenderTargets(1, &g_mainRenderTargetDescriptor[backBufferIdx], FALSE, NULL); | ||||
|         g_pd3dCommandList->SetDescriptorHeaps(1, &g_pd3dSrvDescHeap); | ||||
|         ImGui::Render(); | ||||
|         ImGui_ImplDX12_RenderDrawData(ImGui::GetDrawData(), g_pd3dCommandList); | ||||
|         barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET; | ||||
|         barrier.Transition.StateAfter  = D3D12_RESOURCE_STATE_PRESENT; | ||||
| @@ -224,10 +229,12 @@ int main(int, char**) | ||||
|         UINT64 fenceValue = g_fenceLastSignaledValue + 1; | ||||
|         g_pd3dCommandQueue->Signal(g_fence, fenceValue); | ||||
|         g_fenceLastSignaledValue = fenceValue; | ||||
|         frameCtxt->FenceValue = fenceValue; | ||||
|         frameCtx->FenceValue = fenceValue; | ||||
|     } | ||||
|  | ||||
|     WaitForLastSubmittedFrame(); | ||||
|  | ||||
|     // Cleanup | ||||
|     ImGui_ImplDX12_Shutdown(); | ||||
|     ImGui_ImplWin32_Shutdown(); | ||||
|     ImGui::DestroyContext(); | ||||
| @@ -401,13 +408,13 @@ void CleanupRenderTarget() | ||||
|  | ||||
| void WaitForLastSubmittedFrame() | ||||
| { | ||||
|     FrameContext* frameCtxt = &g_frameContext[g_frameIndex % NUM_FRAMES_IN_FLIGHT]; | ||||
|     FrameContext* frameCtx = &g_frameContext[g_frameIndex % NUM_FRAMES_IN_FLIGHT]; | ||||
|  | ||||
|     UINT64 fenceValue = frameCtxt->FenceValue; | ||||
|     UINT64 fenceValue = frameCtx->FenceValue; | ||||
|     if (fenceValue == 0) | ||||
|         return; // No fence was signaled | ||||
|  | ||||
|     frameCtxt->FenceValue = 0; | ||||
|     frameCtx->FenceValue = 0; | ||||
|     if (g_fence->GetCompletedValue() >= fenceValue) | ||||
|         return; | ||||
|  | ||||
| @@ -423,11 +430,11 @@ FrameContext* WaitForNextFrameResources() | ||||
|     HANDLE waitableObjects[] = { g_hSwapChainWaitableObject, NULL }; | ||||
|     DWORD numWaitableObjects = 1; | ||||
|  | ||||
|     FrameContext* frameCtxt = &g_frameContext[nextFrameIndex % NUM_FRAMES_IN_FLIGHT]; | ||||
|     UINT64 fenceValue = frameCtxt->FenceValue; | ||||
|     FrameContext* frameCtx = &g_frameContext[nextFrameIndex % NUM_FRAMES_IN_FLIGHT]; | ||||
|     UINT64 fenceValue = frameCtx->FenceValue; | ||||
|     if (fenceValue != 0) // means no fence was signaled | ||||
|     { | ||||
|         frameCtxt->FenceValue = 0; | ||||
|         frameCtx->FenceValue = 0; | ||||
|         g_fence->SetEventOnCompletion(fenceValue, g_fenceEvent); | ||||
|         waitableObjects[1] = g_fenceEvent; | ||||
|         numWaitableObjects = 2; | ||||
| @@ -435,7 +442,7 @@ FrameContext* WaitForNextFrameResources() | ||||
|  | ||||
|     WaitForMultipleObjects(numWaitableObjects, waitableObjects, TRUE, INFINITE); | ||||
|  | ||||
|     return frameCtxt; | ||||
|     return frameCtx; | ||||
| } | ||||
|  | ||||
| void ResizeSwapChain(HWND hWnd, int width, int height) | ||||
|   | ||||
| @@ -1,3 +1,8 @@ | ||||
| @REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler. | ||||
| mkdir Debug | ||||
| cl /nologo /Zi /MD /I .. /I ..\.. /I "%DXSDK_DIR%/Include" /D UNICODE /D _UNICODE *.cpp ..\..\backends\imgui_impl_dx9.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp /FeDebug/example_win32_directx9.exe /FoDebug/ /link /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d9.lib | ||||
| @set OUT_DIR=Debug | ||||
| @set OUT_EXE=example_win32_directx9 | ||||
| @set INCLUDES=/I..\.. /I..\..\backends /I "%DXSDK_DIR%/Include" | ||||
| @set SOURCES=main.cpp ..\..\backends\imgui_impl_dx9.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp | ||||
| @set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d9.lib | ||||
| mkdir %OUT_DIR% | ||||
| cl /nologo /Zi /MD %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% | ||||
|   | ||||
| @@ -6089,6 +6089,8 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|             window->HiddenFramesCanSkipItems--; | ||||
|         if (window->HiddenFramesCannotSkipItems > 0) | ||||
|             window->HiddenFramesCannotSkipItems--; | ||||
|         if (window->HiddenFramesForRenderOnly > 0) | ||||
|             window->HiddenFramesForRenderOnly--; | ||||
|  | ||||
|         // Hide new windows for one frame until they calculate their size | ||||
|         if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api)) | ||||
| @@ -6730,7 +6732,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | ||||
|             window->HiddenFramesCanSkipItems = 1; | ||||
|  | ||||
|         // Update the Hidden flag | ||||
|         window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0); | ||||
|         window->Hidden = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0) || (window->HiddenFramesForRenderOnly > 0); | ||||
|  | ||||
|         // Update the SkipItems flag, used to early out of all items functions (no layout required) | ||||
|         bool skip_items = false; | ||||
| @@ -8505,7 +8507,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags toolt | ||||
|             { | ||||
|                 // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one. | ||||
|                 window->Hidden = true; | ||||
|                 window->HiddenFramesCanSkipItems = 1; | ||||
|                 window->HiddenFramesCanSkipItems = 1; // FIXME: This may not be necessary? | ||||
|                 ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); | ||||
|             } | ||||
|     ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDocking; | ||||
|   | ||||
							
								
								
									
										70
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -27,15 +27,13 @@ Index of this file: | ||||
| // ImVector<> | ||||
| // ImGuiStyle | ||||
| // ImGuiIO | ||||
| // Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiWindowClass, ImGuiPayload) | ||||
| // Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiWindowClass, ImGuiPayload, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs) | ||||
| // Obsolete functions | ||||
| // Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor) | ||||
| // Draw List API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData) | ||||
| // Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont) | ||||
| // Platform interface for multi-viewport support (ImGuiPlatformIO, ImGuiPlatformMonitor, ImGuiViewportFlags, ImGuiViewport) | ||||
|  | ||||
| // FIXME-TABLE: Add ImGuiTableSortSpecs and ImGuiTableColumnSortSpecs in "Misc data structures" section above (we don't do it right now to facilitate merging various branches) | ||||
|  | ||||
| */ | ||||
|  | ||||
| #pragma once | ||||
| @@ -65,8 +63,9 @@ Index of this file: | ||||
| #define IMGUI_VERSION               "1.80 WIP" | ||||
| #define IMGUI_VERSION_NUM           17906 | ||||
| #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 | ||||
| #define IMGUI_HAS_TABLE | ||||
| #define IMGUI_HAS_VIEWPORT          // Viewport WIP branch | ||||
| #define IMGUI_HAS_DOCK              // Docking WIP branch | ||||
|  | ||||
| // Define attributes of all API symbols declarations (e.g. for DLL under Windows) | ||||
| // IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default backends files (imgui_impl_xxx.h) | ||||
| @@ -692,7 +691,6 @@ namespace ImGui | ||||
|     //       TableNextRow()                           -> Text("Hello 0")                                               // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear! | ||||
|     //      ---------------------------------------------------------------------------------------------------------- | ||||
|     // - 5. Call EndTable() | ||||
|     #define IMGUI_HAS_TABLE 1 | ||||
|     IMGUI_API bool          BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f); | ||||
|     IMGUI_API void          EndTable();                                 // only call EndTable() if BeginTable() returns true! | ||||
|     IMGUI_API void          TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row. | ||||
| @@ -1101,38 +1099,40 @@ enum ImGuiTableFlags_ | ||||
|     ImGuiTableFlags_Reorderable                     = 1 << 1,   // Allow reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers) | ||||
|     ImGuiTableFlags_Hideable                        = 1 << 2,   // Allow hiding/disabling columns in context menu. | ||||
|     ImGuiTableFlags_Sortable                        = 1 << 3,   // Allow sorting on one column (sort_specs_count will always be == 1). Call TableGetSortSpecs() to obtain sort specs. | ||||
|     ImGuiTableFlags_MultiSortable                   = 1 << 4,   // Allow sorting on multiple columns by holding Shift (sort_specs_count may be > 1). Call TableGetSortSpecs() to obtain sort specs. | ||||
|     ImGuiTableFlags_NoSavedSettings                 = 1 << 5,   // Disable persisting columns order, width and sort settings in the .ini file. | ||||
|     ImGuiTableFlags_ContextMenuInBody               = 1 << 6,   // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow(). | ||||
|     ImGuiTableFlags_NoSavedSettings                 = 1 << 4,   // Disable persisting columns order, width and sort settings in the .ini file. | ||||
|     ImGuiTableFlags_ContextMenuInBody               = 1 << 5,   // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow(). | ||||
|     // Decorations | ||||
|     ImGuiTableFlags_RowBg                           = 1 << 7,   // Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually) | ||||
|     ImGuiTableFlags_BordersInnerH                   = 1 << 8,   // Draw horizontal borders between rows. | ||||
|     ImGuiTableFlags_BordersOuterH                   = 1 << 9,   // Draw horizontal borders at the top and bottom. | ||||
|     ImGuiTableFlags_BordersInnerV                   = 1 << 10,  // Draw vertical borders between columns. | ||||
|     ImGuiTableFlags_BordersOuterV                   = 1 << 11,  // Draw vertical borders on the left and right sides. | ||||
|     ImGuiTableFlags_RowBg                           = 1 << 6,   // Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually) | ||||
|     ImGuiTableFlags_BordersInnerH                   = 1 << 7,   // Draw horizontal borders between rows. | ||||
|     ImGuiTableFlags_BordersOuterH                   = 1 << 8,   // Draw horizontal borders at the top and bottom. | ||||
|     ImGuiTableFlags_BordersInnerV                   = 1 << 9,   // Draw vertical borders between columns. | ||||
|     ImGuiTableFlags_BordersOuterV                   = 1 << 10,  // Draw vertical borders on the left and right sides. | ||||
|     ImGuiTableFlags_BordersH                        = ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH, // Draw horizontal borders. | ||||
|     ImGuiTableFlags_BordersV                        = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV, // Draw vertical borders. | ||||
|     ImGuiTableFlags_BordersInner                    = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH, // Draw inner borders. | ||||
|     ImGuiTableFlags_BordersOuter                    = ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH, // Draw outer borders. | ||||
|     ImGuiTableFlags_Borders                         = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter,   // Draw all borders. | ||||
|     ImGuiTableFlags_NoBordersInBody                 = 1 << 12,  // Disable vertical borders in columns Body (borders will always appears in Headers). | ||||
|     ImGuiTableFlags_NoBordersInBodyUntilResize      = 1 << 13,  // Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). | ||||
|     ImGuiTableFlags_NoBordersInBody                 = 1 << 11,  // Disable vertical borders in columns Body (borders will always appears in Headers). | ||||
|     ImGuiTableFlags_NoBordersInBodyUntilResize      = 1 << 12,  // Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). | ||||
|     // Sizing | ||||
|     ImGuiTableFlags_ColumnsWidthStretch             = 1 << 14,  // Default if ScrollX is off. Columns will default to use _WidthStretch. Read description above for more details. | ||||
|     ImGuiTableFlags_ColumnsWidthFixed               = 1 << 15,  // Default if ScrollX is on. Columns will default to use _WidthFixed or _WidthAutoResize policy (if Resizable is off). Read description above for more details. | ||||
|     ImGuiTableFlags_SameWidths                      = 1 << 16,  // Make all columns the same widths which is useful with Fixed columns policy (but granted by default with Stretch policy + no resize). Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible and disable ImGuiTableFlags_Resizable. | ||||
|     ImGuiTableFlags_NoHeadersWidth                  = 1 << 17,  // Disable headers' contribution to automatic width calculation. | ||||
|     ImGuiTableFlags_NoHostExtendY                   = 1 << 18,  // Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible) | ||||
|     ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 19,  // Disable keeping column always minimally visible when ScrollX is off and table gets too small. | ||||
|     ImGuiTableFlags_PreciseWidths                   = 1 << 20,  // 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. | ||||
|     ImGuiTableFlags_NoClip                          = 1 << 21,  // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze(). | ||||
|     ImGuiTableFlags_ColumnsWidthStretch             = 1 << 13,  // Default if ScrollX is off. Columns will default to use _WidthStretch. Read description above for more details. | ||||
|     ImGuiTableFlags_ColumnsWidthFixed               = 1 << 14,  // Default if ScrollX is on. Columns will default to use _WidthFixed or _WidthAutoResize policy (if Resizable is off). Read description above for more details. | ||||
|     ImGuiTableFlags_SameWidths                      = 1 << 15,  // Make all columns the same widths which is useful with Fixed columns policy (but granted by default with Stretch policy + no resize). Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible and disable ImGuiTableFlags_Resizable. | ||||
|     ImGuiTableFlags_NoHeadersWidth                  = 1 << 16,  // Disable headers' contribution to automatic width calculation. | ||||
|     ImGuiTableFlags_NoHostExtendY                   = 1 << 17,  // Disable extending past the limit set by outer_size.y, only meaningful when neither of ScrollX|ScrollY are set (data below the limit will be clipped and not visible) | ||||
|     ImGuiTableFlags_NoKeepColumnsVisible            = 1 << 18,  // Disable keeping column always minimally visible when ScrollX is off and table gets too small. | ||||
|     ImGuiTableFlags_PreciseWidths                   = 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. | ||||
|     ImGuiTableFlags_NoClip                          = 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(). | ||||
|     // Padding | ||||
|     ImGuiTableFlags_PadOuterX                       = 1 << 22,  // Default if BordersOuterV is on. Enable outer-most padding. | ||||
|     ImGuiTableFlags_NoPadOuterX                     = 1 << 23,  // Default if BordersOuterV is off. Disable outer-most padding. | ||||
|     ImGuiTableFlags_NoPadInnerX                     = 1 << 24,  // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off). | ||||
|     ImGuiTableFlags_PadOuterX                       = 1 << 21,  // Default if BordersOuterV is on. Enable outer-most padding. | ||||
|     ImGuiTableFlags_NoPadOuterX                     = 1 << 22,  // Default if BordersOuterV is off. Disable outer-most padding. | ||||
|     ImGuiTableFlags_NoPadInnerX                     = 1 << 23,  // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off). | ||||
|     // Scrolling | ||||
|     ImGuiTableFlags_ScrollX                         = 1 << 25,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this create a child window, ScrollY is currently generally recommended when using ScrollX. | ||||
|     ImGuiTableFlags_ScrollY                         = 1 << 26   // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. | ||||
|     ImGuiTableFlags_ScrollX                         = 1 << 24,  // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this create a child window, ScrollY is currently generally recommended when using ScrollX. | ||||
|     ImGuiTableFlags_ScrollY                         = 1 << 25,  // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. | ||||
|     // Sorting | ||||
|     ImGuiTableFlags_SortMulti                       = 1 << 26,  // Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1). | ||||
|     ImGuiTableFlags_SortTristate                    = 1 << 27   // Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0). | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::TableSetupColumn() | ||||
| @@ -1152,7 +1152,7 @@ enum ImGuiTableColumnFlags_ | ||||
|     ImGuiTableColumnFlags_NoSort                    = 1 << 9,   // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table). | ||||
|     ImGuiTableColumnFlags_NoSortAscending           = 1 << 10,  // Disable ability to sort in the ascending direction. | ||||
|     ImGuiTableColumnFlags_NoSortDescending          = 1 << 11,  // Disable ability to sort in the descending direction. | ||||
|     ImGuiTableColumnFlags_NoHeaderWidth             = 1 << 12,  // Header width don't contribute to automatic column width. | ||||
|     ImGuiTableColumnFlags_NoHeaderWidth             = 1 << 12,  // Disable header text width contribution to automatic column width. | ||||
|     ImGuiTableColumnFlags_PreferSortAscending       = 1 << 13,  // Make the initial sort direction Ascending when first sorting on this column (default). | ||||
|     ImGuiTableColumnFlags_PreferSortDescending      = 1 << 14,  // Make the initial sort direction Descending when first sorting on this column. | ||||
|     ImGuiTableColumnFlags_IndentEnable              = 1 << 15,  // Use current Indent value when entering cell (default for column 0). | ||||
| @@ -1190,11 +1190,9 @@ enum ImGuiTableRowFlags_ | ||||
| enum ImGuiTableBgTarget_ | ||||
| { | ||||
|     ImGuiTableBgTarget_None                         = 0, | ||||
|     //ImGuiTableBgTarget_ColumnBg0                  = 1,        // FIXME-TABLE: Todo. Set column background color 0 (generally used for background | ||||
|     //ImGuiTableBgTarget_ColumnBg1                  = 2,        // FIXME-TABLE: Todo. Set column background color 1 (generally used for selection marking) | ||||
|     ImGuiTableBgTarget_RowBg0                       = 3,        // Set row background color 0 (generally used for background, automatically set when ImGuiTableFlags_RowBg is used) | ||||
|     ImGuiTableBgTarget_RowBg1                       = 4,        // Set row background color 1 (generally used for selection marking) | ||||
|     ImGuiTableBgTarget_CellBg                       = 5         // Set cell background color (top-most color) | ||||
|     ImGuiTableBgTarget_RowBg0                       = 1,        // Set row background color 0 (generally used for background, automatically set when ImGuiTableFlags_RowBg is used) | ||||
|     ImGuiTableBgTarget_RowBg1                       = 2,        // Set row background color 1 (generally used for selection marking) | ||||
|     ImGuiTableBgTarget_CellBg                       = 3         // Set cell background color (top-most color) | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::IsWindowFocused() | ||||
| @@ -2023,7 +2021,7 @@ struct ImGuiTableColumnSortSpecs | ||||
| struct ImGuiTableSortSpecs | ||||
| { | ||||
|     const ImGuiTableColumnSortSpecs* Specs;     // Pointer to sort spec array. | ||||
|     int                         SpecsCount;     // Sort spec count. Most often 1 unless e.g. ImGuiTableFlags_MultiSortable is enabled. | ||||
|     int                         SpecsCount;     // Sort spec count. Most often 1. May be > 1 when ImGuiTableFlags_SortMulti is enabled. May be == 0 when ImGuiTableFlags_SortTristate is enabled. | ||||
|     bool                        SpecsDirty;     // Set to true when specs have changed since last time! Use this to sort again, then clear the flag. | ||||
|  | ||||
|     ImGuiTableSortSpecs()       { memset(this, 0, sizeof(*this)); } | ||||
|   | ||||
| @@ -3652,7 +3652,7 @@ static void ShowDemoWindowTables() | ||||
|         // If there is not enough available width to fit all columns, they will however be resized down. | ||||
|         // FIXME-TABLE: Providing a stretch-on-init would make sense especially for tables which don't have saved settings | ||||
|         HelpMarker( | ||||
|             "Using _Resizable + _ColumnsWidthFixedX flags.\n" | ||||
|             "Using _Resizable + _ColumnsWidthFixed flags.\n" | ||||
|             "Fixed-width columns generally makes more sense if you want to use horizontal scrolling.\n\n" | ||||
|             "Double-click a column border to auto-fit the column to its contents."); | ||||
|         static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_ColumnsWidthFixed | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_ContextMenuInBody; | ||||
| @@ -3785,7 +3785,8 @@ static void ShowDemoWindowTables() | ||||
|             "e.g.:\n" | ||||
|             "- BorderOuterV\n" | ||||
|             "- any form of row selection\n" | ||||
|             "Because of this, activating BorderOuterV sets the default to PadOuterX. Using PadOuterX or NoPadOuterX you can override the default.\n"); | ||||
|             "Because of this, activating BorderOuterV sets the default to PadOuterX. Using PadOuterX or NoPadOuterX you can override the default.\n\n" | ||||
|             "Actual padding values are using style.CellPadding."); | ||||
|  | ||||
|         PushStyleCompact(); | ||||
|         ImGui::CheckboxFlags("ImGuiTableFlags_PadOuterX", &flags, ImGuiTableFlags_PadOuterX); | ||||
| @@ -4087,7 +4088,7 @@ static void ShowDemoWindowTables() | ||||
|         HelpMarker("This section allows you to interact and see the effect of StretchX vs FixedX sizing policies depending on whether Scroll is enabled and the contents of your columns."); | ||||
|         enum ContentsType { CT_ShortText, CT_LongText, CT_Button, CT_FillButton, CT_InputText }; | ||||
|         static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg; | ||||
|         static int contents_type = CT_Button; | ||||
|         static int contents_type = CT_LongText; | ||||
|         static int column_count = 3; | ||||
|  | ||||
|         PushStyleCompact(); | ||||
| @@ -4633,8 +4634,6 @@ static void ShowDemoWindowTables() | ||||
|         ImGui::SetNextItemOpen(open_action != 0); | ||||
|     if (ImGui::TreeNode("Sorting")) | ||||
|     { | ||||
|         HelpMarker("Use Shift+Click to sort on multiple columns"); | ||||
|  | ||||
|         // Create item list | ||||
|         static ImVector<MyItem> items; | ||||
|         if (items.Size == 0) | ||||
| @@ -4650,10 +4649,16 @@ static void ShowDemoWindowTables() | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         ImGuiTableFlags flags = | ||||
|             ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable | ||||
|         // Options | ||||
|         static ImGuiTableFlags flags = | ||||
|             ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti | ||||
|             | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_NoBordersInBody | ||||
|             | ImGuiTableFlags_ScrollY; | ||||
|         ImGui::CheckboxFlags("ImGuiTableFlags_SortMulti", &flags, ImGuiTableFlags_SortMulti); | ||||
|         ImGui::SameLine(); HelpMarker("When sorting is enabled: hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1)."); | ||||
|         ImGui::CheckboxFlags("ImGuiTableFlags_SortTristate", &flags, ImGuiTableFlags_SortTristate); | ||||
|         ImGui::SameLine(); HelpMarker("When sorting is enabled: allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0)."); | ||||
|  | ||||
|         if (ImGui::BeginTable("##table", 4, flags, ImVec2(0, TEXT_BASE_HEIGHT * 15), 0.0f)) | ||||
|         { | ||||
|             // Declare columns | ||||
| @@ -4712,11 +4717,11 @@ static void ShowDemoWindowTables() | ||||
|     if (ImGui::TreeNode("Advanced")) | ||||
|     { | ||||
|         static ImGuiTableFlags flags = | ||||
|             ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_MultiSortable | ||||
|             ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ||||
|             | ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti | ||||
|             | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders | ImGuiTableFlags_NoBordersInBody | ||||
|             | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ||||
|             | ImGuiTableFlags_ColumnsWidthFixed | ||||
|             ; | ||||
|             | ImGuiTableFlags_ColumnsWidthFixed; | ||||
|  | ||||
|         enum ContentsType { CT_Text, CT_Button, CT_SmallButton, CT_FillButton, CT_Selectable, CT_SelectableSpanRow }; | ||||
|         static int contents_type = CT_Button; | ||||
| @@ -4744,7 +4749,6 @@ static void ShowDemoWindowTables() | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", &flags, ImGuiTableFlags_Reorderable); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", &flags, ImGuiTableFlags_Hideable); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_Sortable", &flags, ImGuiTableFlags_Sortable); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_MultiSortable", &flags, ImGuiTableFlags_MultiSortable); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_NoSavedSettings", &flags, ImGuiTableFlags_NoSavedSettings); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_ContextMenuInBody", &flags, ImGuiTableFlags_ContextMenuInBody); | ||||
|                 ImGui::TreePop(); | ||||
| @@ -4805,6 +4809,15 @@ static void ShowDemoWindowTables() | ||||
|                 ImGui::TreePop(); | ||||
|             } | ||||
|  | ||||
|             if (ImGui::TreeNodeEx("Sorting:", ImGuiTreeNodeFlags_DefaultOpen)) | ||||
|             { | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_SortMulti", &flags, ImGuiTableFlags_SortMulti); | ||||
|                 ImGui::SameLine(); HelpMarker("When sorting is enabled: hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1)."); | ||||
|                 ImGui::CheckboxFlags("ImGuiTableFlags_SortTristate", &flags, ImGuiTableFlags_SortTristate); | ||||
|                 ImGui::SameLine(); HelpMarker("When sorting is enabled: allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0)."); | ||||
|                 ImGui::TreePop(); | ||||
|             } | ||||
|  | ||||
|             if (ImGui::TreeNodeEx("Other:", ImGuiTreeNodeFlags_DefaultOpen)) | ||||
|             { | ||||
|                 ImGui::Checkbox("show_headers", &show_headers); | ||||
| @@ -4860,13 +4873,13 @@ static void ShowDemoWindowTables() | ||||
|             // Declare columns | ||||
|             // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications. | ||||
|             // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index! | ||||
|             ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows); | ||||
|             ImGui::TableSetupColumn("ID",          ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHide, -1.0f, MyItemColumnID_ID); | ||||
|             ImGui::TableSetupColumn("Name",        ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Name); | ||||
|             ImGui::TableSetupColumn("Action",      ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, -1.0f, MyItemColumnID_Action); | ||||
|             ImGui::TableSetupColumn("Quantity (Long Label)", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Quantity);// , ImGuiTableColumnFlags_WidthAutoResize); | ||||
|             ImGui::TableSetupColumn("Description", ImGuiTableColumnFlags_WidthStretch, 1.0f, MyItemColumnID_Description); | ||||
|             ImGui::TableSetupColumn("Hidden",      ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort); | ||||
|             ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows); | ||||
|  | ||||
|             // Sort our data if sort specs have been changed! | ||||
|             ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs(); | ||||
|   | ||||
| @@ -1912,12 +1912,13 @@ struct IMGUI_API ImGuiWindow | ||||
|     ImS8                    AutoFitChildAxises; | ||||
|     bool                    AutoFitOnlyGrows; | ||||
|     ImGuiDir                AutoPosLastDirection; | ||||
|     int                     HiddenFramesCanSkipItems;           // Hide the window for N frames | ||||
|     int                     HiddenFramesCannotSkipItems;        // Hide the window for N frames while allowing items to be submitted so we can measure their size | ||||
|     ImGuiCond               SetWindowPosAllowFlags;             // store acceptable condition flags for SetNextWindowPos() use. | ||||
|     ImGuiCond               SetWindowSizeAllowFlags;            // store acceptable condition flags for SetNextWindowSize() use. | ||||
|     ImGuiCond               SetWindowCollapsedAllowFlags;       // store acceptable condition flags for SetNextWindowCollapsed() use. | ||||
|     ImGuiCond               SetWindowDockAllowFlags;            // store acceptable condition flags for SetNextWindowDock() use. | ||||
|     ImS8                    HiddenFramesCanSkipItems;           // Hide the window for N frames | ||||
|     ImS8                    HiddenFramesCannotSkipItems;        // Hide the window for N frames while allowing items to be submitted so we can measure their size | ||||
|     ImS8                    HiddenFramesForRenderOnly;          // Hide the window until frame N at Render() time only | ||||
|     ImGuiCond               SetWindowPosAllowFlags : 8;         // store acceptable condition flags for SetNextWindowPos() use. | ||||
|     ImGuiCond               SetWindowSizeAllowFlags : 8;        // store acceptable condition flags for SetNextWindowSize() use. | ||||
|     ImGuiCond               SetWindowCollapsedAllowFlags : 8;   // store acceptable condition flags for SetNextWindowCollapsed() use. | ||||
|     ImGuiCond               SetWindowDockAllowFlags : 8;        // store acceptable condition flags for SetNextWindowDock() use. | ||||
|     ImVec2                  SetWindowPosVal;                    // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size) | ||||
|     ImVec2                  SetWindowPosPivot;                  // store window pivot for positioning. ImVec2(0, 0) when positioning from top-left corner; ImVec2(0.5f, 0.5f) for centering; ImVec2(1, 1) for bottom right. | ||||
|  | ||||
| @@ -2115,8 +2116,7 @@ struct ImGuiTableColumn | ||||
| { | ||||
|     ImRect                  ClipRect;                       // Clipping rectangle for the column | ||||
|     ImGuiID                 UserID;                         // Optional, value passed to TableSetupColumn() | ||||
|     ImGuiTableColumnFlags   FlagsIn;                        // Flags as they were provided by user. See ImGuiTableColumnFlags_ | ||||
|     ImGuiTableColumnFlags   Flags;                          // Effective flags. See ImGuiTableColumnFlags_ | ||||
|     ImGuiTableColumnFlags   Flags;                          // Flags after some patching (not directly same as provided by user). See ImGuiTableColumnFlags_ | ||||
|     float                   MinX;                           // Absolute positions | ||||
|     float                   MaxX; | ||||
|     float                   InitStretchWeightOrWidth;       // Value passed to TableSetupColumn(). For Width it is a content width (_without padding_). | ||||
| @@ -2148,9 +2148,12 @@ struct ImGuiTableColumn | ||||
|     bool                    IsSkipItems;                    // Do we want item submissions to this column to be completely ignored (no layout will happen). | ||||
|     bool                    IsPreserveWidthAuto; | ||||
|     ImS8                    NavLayerCurrent;                // ImGuiNavLayer in 1 byte | ||||
|     ImS8                    SortDirection;                  // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending | ||||
|     ImU8                    AutoFitQueue;                   // Queue of 8 values for the next 8 frames to request auto-fit | ||||
|     ImU8                    CannotSkipItemsQueue;           // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem | ||||
|     ImU8                    SortDirection : 2;              // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending | ||||
|     ImU8                    SortDirectionsAvailCount : 2;   // Number of available sort directions (0 to 3) | ||||
|     ImU8                    SortDirectionsAvailMask : 4;    // Mask of available sort directions (1-bit each) | ||||
|     ImU8                    SortDirectionsAvailList;        // Ordered of available sort directions (2-bits each) | ||||
|  | ||||
|     ImGuiTableColumn() | ||||
|     { | ||||
| @@ -2173,7 +2176,7 @@ struct ImGuiTableCellData | ||||
|     ImGuiTableColumnIdx         Column;     // Column number | ||||
| }; | ||||
|  | ||||
| // FIXME-TABLES: transient data could be stored in a per-stacked table structure: DrawSplitter, SortSpecs, incoming RowData | ||||
| // FIXME-TABLE: transient data could be stored in a per-stacked table structure: DrawSplitter, SortSpecs, incoming RowData | ||||
| struct ImGuiTable | ||||
| { | ||||
|     ImGuiID                     ID; | ||||
| @@ -2280,8 +2283,8 @@ struct ImGuiTable | ||||
|     bool                        MemoryCompacted; | ||||
|     bool                        HostSkipItems;              // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis | ||||
|  | ||||
|     IMGUI_API ImGuiTable(); | ||||
|     IMGUI_API ~ImGuiTable(); | ||||
|     IMGUI_API ImGuiTable()      { memset(this, 0, sizeof(*this)); LastFrameActive = -1; } | ||||
|     IMGUI_API ~ImGuiTable()     { IM_FREE(RawData); } | ||||
| }; | ||||
|  | ||||
| // sizeof() ~ 12 | ||||
| @@ -2550,7 +2553,6 @@ namespace ImGui | ||||
|     // Tables: Candidates for public API | ||||
|     IMGUI_API void          TableOpenContextMenu(int column_n = -1); | ||||
|     IMGUI_API void          TableSetColumnWidth(int column_n, float width); | ||||
|     IMGUI_API void          TableSetColumnIsEnabled(int column_n, bool enabled); | ||||
|     IMGUI_API void          TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs); | ||||
|     IMGUI_API int           TableGetHoveredColumn(); // May use (TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered) instead. Return hovered column. return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered. | ||||
|     IMGUI_API float         TableGetHeaderRowHeight(); | ||||
| @@ -2565,12 +2567,14 @@ namespace ImGui | ||||
|     IMGUI_API void          TableSetupDrawChannels(ImGuiTable* table); | ||||
|     IMGUI_API void          TableUpdateLayout(ImGuiTable* table); | ||||
|     IMGUI_API void          TableUpdateBorders(ImGuiTable* table); | ||||
|     IMGUI_API void          TableUpdateColumnsWeightFromWidth(ImGuiTable* table); | ||||
|     IMGUI_API void          TableDrawBorders(ImGuiTable* table); | ||||
|     IMGUI_API void          TableDrawContextMenu(ImGuiTable* table); | ||||
|     IMGUI_API void          TableMergeDrawChannels(ImGuiTable* table); | ||||
|     IMGUI_API void          TableSortSpecsSanitize(ImGuiTable* table); | ||||
|     IMGUI_API void          TableSortSpecsBuild(ImGuiTable* table); | ||||
|     IMGUI_API void          TableFixColumnSortDirection(ImGuiTableColumn* column); | ||||
|     IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn* column); | ||||
|     IMGUI_API void          TableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column); | ||||
|     IMGUI_API void          TableBeginRow(ImGuiTable* table); | ||||
|     IMGUI_API void          TableEndRow(ImGuiTable* table); | ||||
|     IMGUI_API void          TableBeginCell(ImGuiTable* table, int column_n); | ||||
| @@ -2578,6 +2582,7 @@ namespace ImGui | ||||
|     IMGUI_API ImRect        TableGetCellBgRect(const ImGuiTable* table, int column_n); | ||||
|     IMGUI_API const char*   TableGetColumnName(const ImGuiTable* table, int column_n); | ||||
|     IMGUI_API ImGuiID       TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no = 0); | ||||
|     IMGUI_API float         TableGetMinColumnWidth(); | ||||
|     IMGUI_API void          TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n); | ||||
|     IMGUI_API void          TableSetColumnWidthAutoAll(ImGuiTable* table); | ||||
|     IMGUI_API void          TableRemove(ImGuiTable* table); | ||||
|   | ||||
							
								
								
									
										851
									
								
								imgui_tables.cpp
									
									
									
									
									
								
							
							
						
						
									
										851
									
								
								imgui_tables.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user