mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # docs/CHANGELOG.txt
This commit is contained in:
		| @@ -110,9 +110,15 @@ Breaking Changes: | |||||||
|   the new names and equivalent. |   the new names and equivalent. | ||||||
|  |  | ||||||
| Other Changes: | Other Changes: | ||||||
|  | - Window: Fixed InnerClipRect right-most coordinates using wrong padding setting (introduced in 1.71). | ||||||
|  | - 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). | ||||||
| - ImDrawList: Fixed CloneOutput() helper crashing. (#1860) [@gviot] | - ImDrawList: Fixed CloneOutput() helper crashing. (#1860) [@gviot] | ||||||
| - ImDrawListSlitter, ImDrawList::ChannelsSplit(), : Fixed an issue with merging draw commands between channel 0 and 1. (#2624) | - ImDrawListSplitter, ImDrawList::ChannelsSplit(): Fixed an issue with merging draw commands between | ||||||
| >>>>>>> master |   channel 0 and 1. (#2624) | ||||||
|  | - 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] | ||||||
|  |  | ||||||
|  |  | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
|   | |||||||
| @@ -127,7 +127,7 @@ Languages: (third-party bindings) | |||||||
| - Odin: [odin-dear_imgui](https://github.com/ThisDrunkDane/odin-dear_imgui) | - Odin: [odin-dear_imgui](https://github.com/ThisDrunkDane/odin-dear_imgui) | ||||||
| - Pascal: [imgui-pas](https://github.com/dpethes/imgui-pas) | - Pascal: [imgui-pas](https://github.com/dpethes/imgui-pas) | ||||||
| - PureBasic: [pb-cimgui](https://github.com/hippyau/pb-cimgui) | - PureBasic: [pb-cimgui](https://github.com/hippyau/pb-cimgui) | ||||||
| - Python: [pyimgui](https://github.com/swistakm/pyimgui) or [bimpy](https://github.com/podgorskiy/bimpy) | - Python: [pyimgui](https://github.com/swistakm/pyimgui) or [bimpy](https://github.com/podgorskiy/bimpy) or [ogre-imgui](https://github.com/OGRECave/ogre-imgui) | ||||||
| - Ruby: [ruby-imgui](https://github.com/vaiorabbit/ruby-imgui) | - Ruby: [ruby-imgui](https://github.com/vaiorabbit/ruby-imgui) | ||||||
| - Rust: [imgui-rs](https://github.com/Gekkio/imgui-rs) or [imgui-rust](https://github.com/nsf/imgui-rust) | - Rust: [imgui-rs](https://github.com/Gekkio/imgui-rs) or [imgui-rust](https://github.com/nsf/imgui-rust) | ||||||
| - Swift [swift-imgui](https://github.com/mnmly/Swift-imgui) | - Swift [swift-imgui](https://github.com/mnmly/Swift-imgui) | ||||||
| @@ -142,7 +142,7 @@ Frameworks: | |||||||
| - Flexium: [FlexGUI](https://github.com/DXsmiley/FlexGUI) | - Flexium: [FlexGUI](https://github.com/DXsmiley/FlexGUI) | ||||||
| - GML/GameMakerStudio2: [ImGuiGML](https://marketplace.yoyogames.com/assets/6221/imguigml) | - GML/GameMakerStudio2: [ImGuiGML](https://marketplace.yoyogames.com/assets/6221/imguigml) | ||||||
| - Irrlicht: [IrrIMGUI](https://github.com/ZahlGraf/IrrIMGUI) | - Irrlicht: [IrrIMGUI](https://github.com/ZahlGraf/IrrIMGUI) | ||||||
| - Ogre: [ogreimgui](https://bitbucket.org/LMCrashy/ogreimgui/src) | - Ogre: [ogre-imgui](https://github.com/OGRECave/ogre-imgui) | ||||||
| - OpenFrameworks: [ofxImGui](https://github.com/jvcleave/ofxImGui) | - OpenFrameworks: [ofxImGui](https://github.com/jvcleave/ofxImGui) | ||||||
| - OpenSceneGraph/OSG: [gist](https://gist.github.com/fulezi/d2442ca7626bf270226014501357042c) | - OpenSceneGraph/OSG: [gist](https://gist.github.com/fulezi/d2442ca7626bf270226014501357042c) | ||||||
| - ORX: [ImGuiOrx](https://github.com/thegwydd/ImGuiOrx), [#1843](https://github.com/ocornut/imgui/pull/1843) | - ORX: [ImGuiOrx](https://github.com/thegwydd/ImGuiOrx), [#1843](https://github.com/ocornut/imgui/pull/1843) | ||||||
|   | |||||||
| @@ -208,6 +208,7 @@ example_glfw_vulkan/ | |||||||
|     GLFW (Win32, Mac, Linux) + Vulkan example. |     GLFW (Win32, Mac, Linux) + Vulkan example. | ||||||
|     = main.cpp + imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp |     = main.cpp + imgui_impl_glfw.cpp + imgui_impl_vulkan.cpp | ||||||
|     This is quite long and tedious, because: Vulkan. |     This is quite long and tedious, because: Vulkan. | ||||||
|  |     For this example, the main.cpp file exceptionally use helpers function from imgui_impl_vulkan.h/cpp. | ||||||
|  |  | ||||||
| example_glut_opengl2/ | example_glut_opengl2/ | ||||||
|     GLUT (e.g., FreeGLUT on Linux/Windows, GLUT framework on OSX) + OpenGL2. |     GLUT (e.g., FreeGLUT on Linux/Windows, GLUT framework on OSX) + OpenGL2. | ||||||
| @@ -224,6 +225,11 @@ example_null | |||||||
|     This is used to quickly test compilation of core imgui files in as many setups as possible. |     This is used to quickly test compilation of core imgui files in as many setups as possible. | ||||||
|     Because this application doesn't create a window nor a graphic context, there's no graphics output. |     Because this application doesn't create a window nor a graphic context, there's no graphics output. | ||||||
|  |  | ||||||
|  | example_sdl_directx11/ | ||||||
|  |     SDL2 + DirectX11 example, Windows only. | ||||||
|  |     = main.cpp + imgui_impl_sdl.cpp + imgui_impl_dx11.cpp | ||||||
|  |     This to demonstrate usage of DirectX with SDL. | ||||||
|  |  | ||||||
| example_sdl_opengl2/ | example_sdl_opengl2/ | ||||||
|     SDL2 (Win32, Mac, Linux etc.) + OpenGL example (legacy, fixed pipeline). |     SDL2 (Win32, Mac, Linux etc.) + OpenGL example (legacy, fixed pipeline). | ||||||
|     = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl2.cpp |     = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl2.cpp | ||||||
| @@ -247,6 +253,7 @@ example_sdl_vulkan/ | |||||||
|     SDL2 (Win32, Mac, Linux, etc.) + Vulkan example. |     SDL2 (Win32, Mac, Linux, etc.) + Vulkan example. | ||||||
|     = main.cpp + imgui_impl_sdl.cpp + imgui_impl_vulkan.cpp |     = main.cpp + imgui_impl_sdl.cpp + imgui_impl_vulkan.cpp | ||||||
|     This is quite long and tedious, because: Vulkan. |     This is quite long and tedious, because: Vulkan. | ||||||
|  |     For this example, the main.cpp file exceptionally use helpers function from imgui_impl_vulkan.h/cpp. | ||||||
|  |  | ||||||
| example_win32_directx9/ | example_win32_directx9/ | ||||||
|     DirectX9 example, Windows only. |     DirectX9 example, Windows only. | ||||||
|   | |||||||
| @@ -74,6 +74,7 @@ int main(int, char**) | |||||||
|  |  | ||||||
|     MTLRenderPassDescriptor *renderPassDescriptor = [MTLRenderPassDescriptor new]; |     MTLRenderPassDescriptor *renderPassDescriptor = [MTLRenderPassDescriptor new]; | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     float clear_color[4] = {0.45f, 0.55f, 0.60f, 1.00f}; |     float clear_color[4] = {0.45f, 0.55f, 0.60f, 1.00f}; | ||||||
|   | |||||||
| @@ -81,6 +81,7 @@ int main(int, char**) | |||||||
|     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|     //IM_ASSERT(font != NULL); |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -124,6 +124,7 @@ int main(int, char**) | |||||||
|     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|     //IM_ASSERT(font != NULL); |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -452,6 +452,7 @@ int main(int, char**) | |||||||
|         ImGui_ImplVulkan_DestroyFontUploadObjects(); |         ImGui_ImplVulkan_DestroyFontUploadObjects(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ | |||||||
| #pragma warning (disable: 4505) // unreferenced local function has been removed | #pragma warning (disable: 4505) // unreferenced local function has been removed | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Our state | ||||||
| static bool show_demo_window = true; | static bool show_demo_window = true; | ||||||
| static bool show_another_window = false; | static bool show_another_window = false; | ||||||
| static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | static ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
| @@ -105,6 +106,7 @@ int main(int argc, char** argv) | |||||||
|     glutDisplayFunc(glut_display_func); |     glutDisplayFunc(glut_display_func); | ||||||
|  |  | ||||||
|     // Setup Dear ImGui context |     // Setup Dear ImGui context | ||||||
|  |     IMGUI_CHECKVERSION(); | ||||||
|     ImGui::CreateContext(); |     ImGui::CreateContext(); | ||||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; |     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||||
|     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls |     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls | ||||||
|   | |||||||
| @@ -45,6 +45,7 @@ int main(int, char**) | |||||||
|     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|     //IM_ASSERT(font != NULL); |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								examples/example_sdl_directx11/build_win32.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								examples/example_sdl_directx11/build_win32.bat
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +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 ..\imgui_impl_sdl.cpp ..\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 | ||||||
							
								
								
									
										181
									
								
								examples/example_sdl_directx11/example_sdl_directx11.vcxproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								examples/example_sdl_directx11/example_sdl_directx11.vcxproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,181 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup Label="ProjectConfigurations"> | ||||||
|  |     <ProjectConfiguration Include="Debug|Win32"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Debug|x64"> | ||||||
|  |       <Configuration>Debug</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|Win32"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>Win32</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |     <ProjectConfiguration Include="Release|x64"> | ||||||
|  |       <Configuration>Release</Configuration> | ||||||
|  |       <Platform>x64</Platform> | ||||||
|  |     </ProjectConfiguration> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <PropertyGroup Label="Globals"> | ||||||
|  |     <ProjectGuid>{9E1987E3-1F19-45CA-B9C9-D31E791836D8}</ProjectGuid> | ||||||
|  |     <RootNamespace>example_sdl_directx11</RootNamespace> | ||||||
|  |     <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> | ||||||
|  |     <ProjectName>example_sdl_directx11</ProjectName> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |     <PlatformToolset>v110</PlatformToolset> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>true</UseDebugLibraries> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |     <PlatformToolset>v110</PlatformToolset> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |     <PlatformToolset>v110</PlatformToolset> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||||
|  |     <ConfigurationType>Application</ConfigurationType> | ||||||
|  |     <UseDebugLibraries>false</UseDebugLibraries> | ||||||
|  |     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||||
|  |     <CharacterSet>MultiByte</CharacterSet> | ||||||
|  |     <PlatformToolset>v110</PlatformToolset> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||||
|  |   <ImportGroup Label="ExtensionSettings"> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> | ||||||
|  |     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||||
|  |   </ImportGroup> | ||||||
|  |   <PropertyGroup Label="UserMacros" /> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||||
|  |     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||||
|  |     <IncludePath>$(IncludePath)</IncludePath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||||
|  |     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||||
|  |     <IncludePath>$(IncludePath)</IncludePath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||||
|  |     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||||
|  |     <IncludePath>$(IncludePath)</IncludePath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <OutDir>$(ProjectDir)$(Configuration)\</OutDir> | ||||||
|  |     <IntDir>$(ProjectDir)$(Configuration)\</IntDir> | ||||||
|  |     <IncludePath>$(IncludePath)</IncludePath> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level4</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <AdditionalIncludeDirectories>..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|  |       <AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||||
|  |       <AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||||
|  |       <SubSystem>Console</SubSystem> | ||||||
|  |       <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level4</WarningLevel> | ||||||
|  |       <Optimization>Disabled</Optimization> | ||||||
|  |       <AdditionalIncludeDirectories>..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|  |       <AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||||
|  |       <AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||||
|  |       <SubSystem>Console</SubSystem> | ||||||
|  |       <IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level4</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <AdditionalIncludeDirectories>..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||||
|  |       <BufferSecurityCheck>false</BufferSecurityCheck> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |       <AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||||
|  |       <AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||||
|  |       <SubSystem>Console</SubSystem> | ||||||
|  |       <IgnoreSpecificDefaultLibraries> | ||||||
|  |       </IgnoreSpecificDefaultLibraries> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||||
|  |     <ClCompile> | ||||||
|  |       <WarningLevel>Level4</WarningLevel> | ||||||
|  |       <Optimization>MaxSpeed</Optimization> | ||||||
|  |       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||||
|  |       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||||
|  |       <AdditionalIncludeDirectories>..\..;..;%SDL2_DIR%\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||||
|  |       <BufferSecurityCheck>false</BufferSecurityCheck> | ||||||
|  |     </ClCompile> | ||||||
|  |     <Link> | ||||||
|  |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|  |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|  |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|  |       <AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||||
|  |       <AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||||
|  |       <SubSystem>Console</SubSystem> | ||||||
|  |       <IgnoreSpecificDefaultLibraries> | ||||||
|  |       </IgnoreSpecificDefaultLibraries> | ||||||
|  |     </Link> | ||||||
|  |   </ItemDefinitionGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\..\imgui.cpp" /> | ||||||
|  |     <ClCompile Include="..\..\imgui_demo.cpp" /> | ||||||
|  |     <ClCompile Include="..\..\imgui_draw.cpp" /> | ||||||
|  |     <ClCompile Include="..\..\imgui_widgets.cpp" /> | ||||||
|  |     <ClCompile Include="..\imgui_impl_dx11.cpp" /> | ||||||
|  |     <ClCompile Include="..\imgui_impl_sdl.cpp" /> | ||||||
|  |     <ClCompile Include="main.cpp" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\..\imconfig.h" /> | ||||||
|  |     <ClInclude Include="..\..\imgui.h" /> | ||||||
|  |     <ClInclude Include="..\..\imgui_internal.h" /> | ||||||
|  |     <ClInclude Include="..\imgui_impl_dx11.h" /> | ||||||
|  |     <ClInclude Include="..\imgui_impl_sdl.h" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <None Include="..\..\misc\natvis\imgui.natvis" /> | ||||||
|  |     <None Include="..\README.txt" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||||
|  |   <ImportGroup Label="ExtensionTargets"> | ||||||
|  |   </ImportGroup> | ||||||
|  | </Project> | ||||||
| @@ -0,0 +1,57 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Filter Include="imgui"> | ||||||
|  |       <UniqueIdentifier>{0587d7a3-f2ce-4d56-b84f-a0005d3bfce6}</UniqueIdentifier> | ||||||
|  |     </Filter> | ||||||
|  |     <Filter Include="sources"> | ||||||
|  |       <UniqueIdentifier>{08e36723-ce4f-4cff-9662-c40801cf1acf}</UniqueIdentifier> | ||||||
|  |     </Filter> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClInclude Include="..\..\imconfig.h"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\..\imgui.h"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\..\imgui_internal.h"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\imgui_impl_dx11.h"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |     <ClInclude Include="..\imgui_impl_sdl.h"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </ClInclude> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ClCompile Include="..\..\imgui.cpp"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="main.cpp"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\..\imgui_demo.cpp"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\..\imgui_draw.cpp"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\imgui_impl_dx11.cpp"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\..\imgui_widgets.cpp"> | ||||||
|  |       <Filter>imgui</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |     <ClCompile Include="..\imgui_impl_sdl.cpp"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </ClCompile> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <None Include="..\README.txt" /> | ||||||
|  |     <None Include="..\..\misc\natvis\imgui.natvis"> | ||||||
|  |       <Filter>sources</Filter> | ||||||
|  |     </None> | ||||||
|  |   </ItemGroup> | ||||||
|  | </Project> | ||||||
							
								
								
									
										219
									
								
								examples/example_sdl_directx11/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										219
									
								
								examples/example_sdl_directx11/main.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,219 @@ | |||||||
|  | // dear imgui: standalone example application for SDL2 + DirectX 11 | ||||||
|  | // If you are new to dear imgui, see examples/README.txt and documentation at the top of imgui.cpp. | ||||||
|  | // (SDL is a cross-platform general purpose library for handling windows, inputs, OpenGL/Vulkan graphics context creation, etc.) | ||||||
|  |  | ||||||
|  | #include "imgui.h" | ||||||
|  | #include "imgui_impl_sdl.h" | ||||||
|  | #include "imgui_impl_dx11.h" | ||||||
|  | #include <d3d11.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <SDL.h> | ||||||
|  | #include <SDL_syswm.h> | ||||||
|  |  | ||||||
|  | // Data | ||||||
|  | static ID3D11Device*            g_pd3dDevice = NULL; | ||||||
|  | static ID3D11DeviceContext*     g_pd3dDeviceContext = NULL; | ||||||
|  | static IDXGISwapChain*          g_pSwapChain = NULL; | ||||||
|  | static ID3D11RenderTargetView*  g_mainRenderTargetView = NULL; | ||||||
|  |  | ||||||
|  | // Forward declarations of helper functions | ||||||
|  | bool CreateDeviceD3D(HWND hWnd); | ||||||
|  | void CleanupDeviceD3D(); | ||||||
|  | void CreateRenderTarget(); | ||||||
|  | void CleanupRenderTarget(); | ||||||
|  |  | ||||||
|  | // Main code | ||||||
|  | int main(int, char**) | ||||||
|  | { | ||||||
|  |     // Setup SDL | ||||||
|  |     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) | ||||||
|  |     { | ||||||
|  |         printf("Error: %s\n", SDL_GetError()); | ||||||
|  |         return -1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Setup window | ||||||
|  |     SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); | ||||||
|  |     SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+DirectX11 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags); | ||||||
|  |     SDL_SysWMinfo wmInfo; | ||||||
|  |     SDL_VERSION(&wmInfo.version); | ||||||
|  |     SDL_GetWindowWMInfo(window, &wmInfo); | ||||||
|  |     HWND hwnd = (HWND)wmInfo.info.win.window; | ||||||
|  |  | ||||||
|  |     // Initialize Direct3D | ||||||
|  |     if (!CreateDeviceD3D(hwnd)) | ||||||
|  |     { | ||||||
|  |         CleanupDeviceD3D(); | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Setup Dear ImGui context | ||||||
|  |     IMGUI_CHECKVERSION(); | ||||||
|  |     ImGui::CreateContext(); | ||||||
|  |     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||||
|  |     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;     // Enable Keyboard Controls | ||||||
|  |     //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;      // Enable Gamepad Controls | ||||||
|  |  | ||||||
|  |     // Setup Dear ImGui style | ||||||
|  |     ImGui::StyleColorsDark(); | ||||||
|  |     //ImGui::StyleColorsClassic(); | ||||||
|  |  | ||||||
|  |     // Setup Platform/Renderer bindings | ||||||
|  |     ImGui_ImplSDL2_InitForD3D(window); | ||||||
|  |     ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); | ||||||
|  |  | ||||||
|  |     // Load Fonts | ||||||
|  |     // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them. | ||||||
|  |     // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple. | ||||||
|  |     // - If the file cannot be loaded, the function will return NULL. Please handle those errors in your application (e.g. use an assertion, or display an error and quit). | ||||||
|  |     // - The fonts will be rasterized at a given size (w/ oversampling) and stored into a texture when calling ImFontAtlas::Build()/GetTexDataAsXXXX(), which ImGui_ImplXXXX_NewFrame below will call. | ||||||
|  |     // - Read 'misc/fonts/README.txt' for more instructions and details. | ||||||
|  |     // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ ! | ||||||
|  |     //io.Fonts->AddFontDefault(); | ||||||
|  |     //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 16.0f); | ||||||
|  |     //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 15.0f); | ||||||
|  |     //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf", 16.0f); | ||||||
|  |     //io.Fonts->AddFontFromFileTTF("../../misc/fonts/ProggyTiny.ttf", 10.0f); | ||||||
|  |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|  |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|  |     bool show_demo_window = true; | ||||||
|  |     bool show_another_window = false; | ||||||
|  |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|  |  | ||||||
|  |     // Main loop | ||||||
|  |     bool done = false; | ||||||
|  |     while (!done) | ||||||
|  |     { | ||||||
|  |         // Poll and handle events (inputs, window resize, etc.) | ||||||
|  |         // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. | ||||||
|  |         // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. | ||||||
|  |         // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. | ||||||
|  |         // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. | ||||||
|  |         SDL_Event event; | ||||||
|  |         while (SDL_PollEvent(&event)) | ||||||
|  |         { | ||||||
|  |             ImGui_ImplSDL2_ProcessEvent(&event); | ||||||
|  |             if (event.type == SDL_QUIT) | ||||||
|  |                 done = true; | ||||||
|  |             if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) | ||||||
|  |                 done = true; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Start the Dear ImGui frame | ||||||
|  |         ImGui_ImplDX11_NewFrame(); | ||||||
|  |         ImGui_ImplSDL2_NewFrame(window); | ||||||
|  |         ImGui::NewFrame(); | ||||||
|  |  | ||||||
|  |         // 1. Show the big demo window (Most of the sample code is in ImGui::ShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). | ||||||
|  |         if (show_demo_window) | ||||||
|  |             ImGui::ShowDemoWindow(&show_demo_window); | ||||||
|  |  | ||||||
|  |         // 2. Show a simple window that we create ourselves. We use a Begin/End pair to created a named window. | ||||||
|  |         { | ||||||
|  |             static float f = 0.0f; | ||||||
|  |             static int counter = 0; | ||||||
|  |  | ||||||
|  |             ImGui::Begin("Hello, world!");                          // Create a window called "Hello, world!" and append into it. | ||||||
|  |  | ||||||
|  |             ImGui::Text("This is some useful text.");               // Display some text (you can use a format strings too) | ||||||
|  |             ImGui::Checkbox("Demo Window", &show_demo_window);      // Edit bools storing our window open/close state | ||||||
|  |             ImGui::Checkbox("Another Window", &show_another_window); | ||||||
|  |  | ||||||
|  |             ImGui::SliderFloat("float", &f, 0.0f, 1.0f);            // Edit 1 float using a slider from 0.0f to 1.0f | ||||||
|  |             ImGui::ColorEdit3("clear color", (float*)&clear_color); // Edit 3 floats representing a color | ||||||
|  |  | ||||||
|  |             if (ImGui::Button("Button"))                            // Buttons return true when clicked (most widgets return true when edited/activated) | ||||||
|  |                 counter++; | ||||||
|  |             ImGui::SameLine(); | ||||||
|  |             ImGui::Text("counter = %d", counter); | ||||||
|  |  | ||||||
|  |             ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); | ||||||
|  |             ImGui::End(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // 3. Show another simple window. | ||||||
|  |         if (show_another_window) | ||||||
|  |         { | ||||||
|  |             ImGui::Begin("Another Window", &show_another_window);   // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) | ||||||
|  |             ImGui::Text("Hello from another window!"); | ||||||
|  |             if (ImGui::Button("Close Me")) | ||||||
|  |                 show_another_window = false; | ||||||
|  |             ImGui::End(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Rendering | ||||||
|  |         ImGui::Render(); | ||||||
|  |         g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL); | ||||||
|  |         g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, (float*)&clear_color); | ||||||
|  |         ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); | ||||||
|  |  | ||||||
|  |         g_pSwapChain->Present(1, 0); // Present with vsync | ||||||
|  |         //g_pSwapChain->Present(0, 0); // Present without vsync | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // Cleanup | ||||||
|  |     ImGui_ImplDX11_Shutdown(); | ||||||
|  |     ImGui_ImplSDL2_Shutdown(); | ||||||
|  |     ImGui::DestroyContext(); | ||||||
|  |  | ||||||
|  |     CleanupDeviceD3D(); | ||||||
|  |     SDL_DestroyWindow(window); | ||||||
|  |     SDL_Quit(); | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Helper functions | ||||||
|  |  | ||||||
|  | bool CreateDeviceD3D(HWND hWnd) | ||||||
|  | { | ||||||
|  |     // Setup swap chain | ||||||
|  |     DXGI_SWAP_CHAIN_DESC sd; | ||||||
|  |     ZeroMemory(&sd, sizeof(sd)); | ||||||
|  |     sd.BufferCount = 2; | ||||||
|  |     sd.BufferDesc.Width = 0; | ||||||
|  |     sd.BufferDesc.Height = 0; | ||||||
|  |     sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; | ||||||
|  |     sd.BufferDesc.RefreshRate.Numerator = 60; | ||||||
|  |     sd.BufferDesc.RefreshRate.Denominator = 1; | ||||||
|  |     sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; | ||||||
|  |     sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; | ||||||
|  |     sd.OutputWindow = hWnd; | ||||||
|  |     sd.SampleDesc.Count = 1; | ||||||
|  |     sd.SampleDesc.Quality = 0; | ||||||
|  |     sd.Windowed = TRUE; | ||||||
|  |     sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; | ||||||
|  |  | ||||||
|  |     UINT createDeviceFlags = 0; | ||||||
|  |     //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; | ||||||
|  |     D3D_FEATURE_LEVEL featureLevel; | ||||||
|  |     const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, }; | ||||||
|  |     if (D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext) != S_OK) | ||||||
|  |         return false; | ||||||
|  |  | ||||||
|  |     CreateRenderTarget(); | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void CleanupDeviceD3D() | ||||||
|  | { | ||||||
|  |     CleanupRenderTarget(); | ||||||
|  |     if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } | ||||||
|  |     if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = NULL; } | ||||||
|  |     if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void CreateRenderTarget() | ||||||
|  | { | ||||||
|  |     ID3D11Texture2D* pBackBuffer; | ||||||
|  |     g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); | ||||||
|  |     g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_mainRenderTargetView); | ||||||
|  |     pBackBuffer->Release(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void CleanupRenderTarget() | ||||||
|  | { | ||||||
|  |     if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = NULL; } | ||||||
|  | } | ||||||
| @@ -13,6 +13,7 @@ | |||||||
| #include <SDL.h> | #include <SDL.h> | ||||||
| #include <SDL_opengl.h> | #include <SDL_opengl.h> | ||||||
|  |  | ||||||
|  | // Main code | ||||||
| int main(int, char**) | int main(int, char**) | ||||||
| { | { | ||||||
|     // Setup SDL |     // Setup SDL | ||||||
| @@ -76,6 +77,7 @@ int main(int, char**) | |||||||
|     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|     //IM_ASSERT(font != NULL); |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ | |||||||
| #include IMGUI_IMPL_OPENGL_LOADER_CUSTOM | #include IMGUI_IMPL_OPENGL_LOADER_CUSTOM | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Main code | ||||||
| int main(int, char**) | int main(int, char**) | ||||||
| { | { | ||||||
|     // Setup SDL |     // Setup SDL | ||||||
| @@ -116,6 +117,7 @@ int main(int, char**) | |||||||
|     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); |     //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); | ||||||
|     //IM_ASSERT(font != NULL); |     //IM_ASSERT(font != NULL); | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -322,7 +322,7 @@ int main(int, char**) | |||||||
|     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) |     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_GAMECONTROLLER) != 0) | ||||||
|     { |     { | ||||||
|         printf("Error: %s\n", SDL_GetError()); |         printf("Error: %s\n", SDL_GetError()); | ||||||
|         return 1; |         return -1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Setup window |     // Setup window | ||||||
| @@ -353,6 +353,7 @@ int main(int, char**) | |||||||
|     SetupVulkanWindow(wd, surface, w, h); |     SetupVulkanWindow(wd, surface, w, h); | ||||||
|  |  | ||||||
|     // Setup Dear ImGui context |     // Setup Dear ImGui context | ||||||
|  |     IMGUI_CHECKVERSION(); | ||||||
|     ImGui::CreateContext(); |     ImGui::CreateContext(); | ||||||
|     ImGuiIO& io = ImGui::GetIO(); (void)io; |     ImGuiIO& io = ImGui::GetIO(); (void)io; | ||||||
|     io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls |     io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;       // Enable Keyboard Controls | ||||||
| @@ -435,6 +436,7 @@ int main(int, char**) | |||||||
|         ImGui_ImplVulkan_DestroyFontUploadObjects(); |         ImGui_ImplVulkan_DestroyFontUploadObjects(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Our state | ||||||
|     bool show_demo_window = true; |     bool show_demo_window = true; | ||||||
|     bool show_another_window = false; |     bool show_another_window = false; | ||||||
|     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); |     ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); | ||||||
|   | |||||||
| @@ -174,6 +174,7 @@ int main(int, char**) | |||||||
|         //g_pSwapChain->Present(0, 0); // Present without vsync |         //g_pSwapChain->Present(0, 0); // Present without vsync | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // Cleanup | ||||||
|     ImGui_ImplDX11_Shutdown(); |     ImGui_ImplDX11_Shutdown(); | ||||||
|     ImGui_ImplWin32_Shutdown(); |     ImGui_ImplWin32_Shutdown(); | ||||||
|     ImGui::DestroyContext(); |     ImGui::DestroyContext(); | ||||||
|   | |||||||
| @@ -79,7 +79,7 @@ | |||||||
|  |  | ||||||
| // Auto-detect GL version | // Auto-detect GL version | ||||||
| #if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) | #if !defined(IMGUI_IMPL_OPENGL_ES2) && !defined(IMGUI_IMPL_OPENGL_ES3) | ||||||
| #if (defined(__APPLE__) && TARGET_OS_IOS) || (defined(__ANDROID__)) | #if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) || (defined(__ANDROID__)) | ||||||
| #define IMGUI_IMPL_OPENGL_ES3       // iOS, Android  -> GL ES 3, "#version 300 es" | #define IMGUI_IMPL_OPENGL_ES3       // iOS, Android  -> GL ES 3, "#version 300 es" | ||||||
| #elif defined(__EMSCRIPTEN__) | #elif defined(__EMSCRIPTEN__) | ||||||
| #define IMGUI_IMPL_OPENGL_ES2       // Emscripten    -> GL ES 2, "#version 100" | #define IMGUI_IMPL_OPENGL_ES2       // Emscripten    -> GL ES 2, "#version 100" | ||||||
| @@ -89,7 +89,11 @@ | |||||||
| #if defined(IMGUI_IMPL_OPENGL_ES2) | #if defined(IMGUI_IMPL_OPENGL_ES2) | ||||||
| #include <GLES2/gl2.h> | #include <GLES2/gl2.h> | ||||||
| #elif defined(IMGUI_IMPL_OPENGL_ES3) | #elif defined(IMGUI_IMPL_OPENGL_ES3) | ||||||
|  | #if (defined(__APPLE__) && (TARGET_OS_IOS || TARGET_OS_TV)) | ||||||
|  | #include <OpenGLES/ES3/gl.h>  // Use GL ES 3 | ||||||
|  | #else | ||||||
| #include <GLES3/gl3.h>  // Use GL ES 3 | #include <GLES3/gl3.h>  // Use GL ES 3 | ||||||
|  | #endif | ||||||
| #else | #else | ||||||
| // About Desktop OpenGL function loaders: | // About Desktop OpenGL function loaders: | ||||||
| //  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. | //  Modern desktop OpenGL doesn't have a standard portable header file to load OpenGL function pointers. | ||||||
|   | |||||||
| @@ -223,6 +223,14 @@ bool ImGui_ImplSDL2_InitForVulkan(SDL_Window* window) | |||||||
|     return ImGui_ImplSDL2_Init(window, NULL); |     return ImGui_ImplSDL2_Init(window, NULL); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool ImGui_ImplSDL2_InitForD3D(SDL_Window* window) | ||||||
|  | { | ||||||
|  | #if !defined(_WIN32) | ||||||
|  |     IM_ASSERT(0 && "Unsupported"); | ||||||
|  | #endif | ||||||
|  |     return ImGui_ImplSDL2_Init(window, NULL); | ||||||
|  | } | ||||||
|  |  | ||||||
| void ImGui_ImplSDL2_Shutdown() | void ImGui_ImplSDL2_Shutdown() | ||||||
| { | { | ||||||
|     ImGui_ImplSDL2_ShutdownPlatformInterface(); |     ImGui_ImplSDL2_ShutdownPlatformInterface(); | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ typedef union SDL_Event SDL_Event; | |||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); | IMGUI_IMPL_API bool     ImGui_ImplSDL2_InitForOpenGL(SDL_Window* window, void* sdl_gl_context); | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); | IMGUI_IMPL_API bool     ImGui_ImplSDL2_InitForVulkan(SDL_Window* window); | ||||||
|  | IMGUI_IMPL_API bool     ImGui_ImplSDL2_InitForD3D(SDL_Window* window); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplSDL2_Shutdown(); | IMGUI_IMPL_API void     ImGui_ImplSDL2_Shutdown(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplSDL2_NewFrame(SDL_Window* window); | IMGUI_IMPL_API void     ImGui_ImplSDL2_NewFrame(SDL_Window* window); | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); | IMGUI_IMPL_API bool     ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event); | ||||||
|   | |||||||
							
								
								
									
										43
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -1032,6 +1032,8 @@ CODE | |||||||
| #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | ||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
|  | // We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association. | ||||||
|  | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | ||||||
| #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size | #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size | ||||||
| #pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' | #pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*' | ||||||
| @@ -1039,9 +1041,7 @@ CODE | |||||||
| #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | ||||||
| #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | ||||||
| #pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false | #pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false | ||||||
| #if __GNUC__ >= 8 | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
| #pragma GCC diagnostic ignored "-Wclass-memaccess"          // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead |  | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch. | // When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch. | ||||||
| @@ -2294,8 +2294,8 @@ static void SetCursorPosYAndSetupDummyPrevLine(float pos_y, float line_height) | |||||||
|     ImGuiWindow* window = ImGui::GetCurrentWindow(); |     ImGuiWindow* window = ImGui::GetCurrentWindow(); | ||||||
|     window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height;      // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage. |     window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height;      // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage. | ||||||
|     window->DC.PrevLineSize.y = (line_height - GImGui->Style.ItemSpacing.y);    // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list. |     window->DC.PrevLineSize.y = (line_height - GImGui->Style.ItemSpacing.y);    // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list. | ||||||
|     if (window->DC.CurrentColumns) |     if (ImGuiColumns* columns = window->DC.CurrentColumns) | ||||||
|         window->DC.CurrentColumns->LineMinY = window->DC.CursorPos.y;           // Setting this so that cell Y position are set properly |         columns->LineMinY = window->DC.CursorPos.y;                             // Setting this so that cell Y position are set properly | ||||||
| } | } | ||||||
|  |  | ||||||
| // Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1 | // Use case A: Begin() called from constructor with items_height<0, then called again from Sync() in StepNo 1 | ||||||
| @@ -3562,7 +3562,7 @@ void ImGui::UpdateMouseWheel() | |||||||
|     const bool scroll_allowed = !(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs); |     const bool scroll_allowed = !(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs); | ||||||
|     if (scroll_allowed && (g.IO.MouseWheel != 0.0f || g.IO.MouseWheelH != 0.0f) && !g.IO.KeyCtrl) |     if (scroll_allowed && (g.IO.MouseWheel != 0.0f || g.IO.MouseWheelH != 0.0f) && !g.IO.KeyCtrl) | ||||||
|     { |     { | ||||||
|         ImVec2 max_step = (window->ContentsRegionRect.GetSize() + window->WindowPadding * 2.0f) * 0.67f; |         ImVec2 max_step = window->InnerRect.GetSize() * 0.67f; | ||||||
|  |  | ||||||
|         // Vertical Mouse Wheel Scrolling (hold Shift to scroll horizontally) |         // Vertical Mouse Wheel Scrolling (hold Shift to scroll horizontally) | ||||||
|         if (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) |         if (g.IO.MouseWheel != 0.0f && !g.IO.KeyShift) | ||||||
| @@ -6138,7 +6138,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | |||||||
|         float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize); |         float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize); | ||||||
|         window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize)); |         window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize)); | ||||||
|         window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size); |         window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size); | ||||||
|         window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.y * 0.5f), window->WindowBorderSize)); |         window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize)); | ||||||
|         window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize); |         window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize); | ||||||
|         window->InnerClipRect.ClipWithFull(host_rect); |         window->InnerClipRect.ClipWithFull(host_rect); | ||||||
|  |  | ||||||
| @@ -6452,7 +6452,7 @@ void ImGui::End() | |||||||
|  |  | ||||||
|     ImGuiWindow* window = g.CurrentWindow; |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|  |  | ||||||
|     if (window->DC.CurrentColumns != NULL) |     if (window->DC.CurrentColumns) | ||||||
|         EndColumns(); |         EndColumns(); | ||||||
|     if (!(window->Flags & ImGuiWindowFlags_DockNodeHost))   // Pop inner window clip rectangle |     if (!(window->Flags & ImGuiWindowFlags_DockNodeHost))   // Pop inner window clip rectangle | ||||||
|         PopClipRect(); |         PopClipRect(); | ||||||
| @@ -7299,7 +7299,7 @@ ImVec2 ImGui::GetContentRegionMax() | |||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|     ImVec2 mx = window->ContentsRegionRect.Max - window->Pos; |     ImVec2 mx = window->ContentsRegionRect.Max - window->Pos; | ||||||
|     if (window->DC.CurrentColumns) |     if (window->DC.CurrentColumns) | ||||||
|         mx.x = GetColumnOffset(window->DC.CurrentColumns->Current + 1) - window->WindowPadding.x; |         mx.x = window->WorkRect.Max.x - window->Pos.x; | ||||||
|     return mx; |     return mx; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -7309,7 +7309,7 @@ ImVec2 ImGui::GetContentRegionMaxAbs() | |||||||
|     ImGuiWindow* window = GImGui->CurrentWindow; |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|     ImVec2 mx = window->ContentsRegionRect.Max; |     ImVec2 mx = window->ContentsRegionRect.Max; | ||||||
|     if (window->DC.CurrentColumns) |     if (window->DC.CurrentColumns) | ||||||
|         mx.x = window->Pos.x + GetColumnOffset(window->DC.CurrentColumns->Current + 1) - window->WindowPadding.x; |         mx.x = window->WorkRect.Max.x; | ||||||
|     return mx; |     return mx; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -7322,19 +7322,19 @@ ImVec2 ImGui::GetContentRegionAvail() | |||||||
| // In window space (not screen space!) | // In window space (not screen space!) | ||||||
| ImVec2 ImGui::GetWindowContentRegionMin() | ImVec2 ImGui::GetWindowContentRegionMin() | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindowRead(); |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|     return window->ContentsRegionRect.Min - window->Pos; |     return window->ContentsRegionRect.Min - window->Pos; | ||||||
| } | } | ||||||
|  |  | ||||||
| ImVec2 ImGui::GetWindowContentRegionMax() | ImVec2 ImGui::GetWindowContentRegionMax() | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindowRead(); |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|     return window->ContentsRegionRect.Max - window->Pos; |     return window->ContentsRegionRect.Max - window->Pos; | ||||||
| } | } | ||||||
|  |  | ||||||
| float ImGui::GetWindowContentRegionWidth() | float ImGui::GetWindowContentRegionWidth() | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindowRead(); |     ImGuiWindow* window = GImGui->CurrentWindow; | ||||||
|     return window->ContentsRegionRect.GetWidth(); |     return window->ContentsRegionRect.GetWidth(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -9350,7 +9350,13 @@ void ImGui::NextColumn() | |||||||
|     window->DC.CurrLineTextBaseOffset = 0.0f; |     window->DC.CurrLineTextBaseOffset = 0.0f; | ||||||
|  |  | ||||||
|     PushColumnClipRect(columns->Current);     // FIXME-COLUMNS: Could it be an overwrite? |     PushColumnClipRect(columns->Current);     // FIXME-COLUMNS: Could it be an overwrite? | ||||||
|     PushItemWidth(GetColumnWidth() * 0.65f);  // FIXME-COLUMNS: Move on columns setup |  | ||||||
|  |     // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup. | ||||||
|  |     float offset_0 = GetColumnOffset(columns->Current); | ||||||
|  |     float offset_1 = GetColumnOffset(columns->Current + 1); | ||||||
|  |     float width = offset_1 - offset_0; | ||||||
|  |     PushItemWidth(width * 0.65f); | ||||||
|  |     window->WorkRect.Max.x = window->Pos.x + offset_1 - window->WindowPadding.x; | ||||||
| } | } | ||||||
|  |  | ||||||
| int ImGui::GetColumnIndex() | int ImGui::GetColumnIndex() | ||||||
| @@ -9546,6 +9552,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag | |||||||
|     columns->HostCursorPosY = window->DC.CursorPos.y; |     columns->HostCursorPosY = window->DC.CursorPos.y; | ||||||
|     columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x; |     columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x; | ||||||
|     columns->HostClipRect = window->ClipRect; |     columns->HostClipRect = window->ClipRect; | ||||||
|  |     columns->HostWorkRect = window->WorkRect; | ||||||
|     columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y; |     columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y; | ||||||
|     window->DC.ColumnsOffset.x = 0.0f; |     window->DC.ColumnsOffset.x = 0.0f; | ||||||
|     window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); |     window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); | ||||||
| @@ -9583,7 +9590,12 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag | |||||||
|         window->DrawList->ChannelsSetCurrent(1); |         window->DrawList->ChannelsSetCurrent(1); | ||||||
|         PushColumnClipRect(0); |         PushColumnClipRect(0); | ||||||
|     } |     } | ||||||
|     PushItemWidth(GetColumnWidth() * 0.65f); |  | ||||||
|  |     float offset_0 = GetColumnOffset(columns->Current); | ||||||
|  |     float offset_1 = GetColumnOffset(columns->Current + 1); | ||||||
|  |     float width = offset_1 - offset_0; | ||||||
|  |     PushItemWidth(width * 0.65f); | ||||||
|  |     window->WorkRect.Max.x = window->Pos.x + offset_1 - window->WindowPadding.x; | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui::EndColumns() | void ImGui::EndColumns() | ||||||
| @@ -9655,6 +9667,7 @@ void ImGui::EndColumns() | |||||||
|     } |     } | ||||||
|     columns->IsBeingResized = is_being_resized; |     columns->IsBeingResized = is_being_resized; | ||||||
|  |  | ||||||
|  |     window->WorkRect = columns->HostWorkRect; | ||||||
|     window->DC.CurrentColumns = NULL; |     window->DC.CurrentColumns = NULL; | ||||||
|     window->DC.ColumnsOffset.x = 0.0f; |     window->DC.ColumnsOffset.x = 0.0f; | ||||||
|     window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); |     window->DC.CursorPos.x = (float)(int)(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| // dear imgui, v1.71 WIP | // dear imgui, v1.72 WIP | ||||||
| // (headers) | // (headers) | ||||||
|  |  | ||||||
| // See imgui.cpp file for documentation. | // See imgui.cpp file for documentation. | ||||||
| @@ -86,9 +86,10 @@ Index of this file: | |||||||
| #if __has_warning("-Wzero-as-null-pointer-constant") | #if __has_warning("-Wzero-as-null-pointer-constant") | ||||||
| #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" | #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" | ||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) && __GNUC__ >= 8 | #elif defined(__GNUC__) | ||||||
| #pragma GCC diagnostic push | #pragma GCC diagnostic push | ||||||
| #pragma GCC diagnostic ignored "-Wclass-memaccess" | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
|  | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| @@ -2408,7 +2409,7 @@ struct ImGuiViewport | |||||||
|  |  | ||||||
| #if defined(__clang__) | #if defined(__clang__) | ||||||
| #pragma clang diagnostic pop | #pragma clang diagnostic pop | ||||||
| #elif defined(__GNUC__) && __GNUC__ >= 8 | #elif defined(__GNUC__) | ||||||
| #pragma GCC diagnostic pop | #pragma GCC diagnostic pop | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -90,13 +90,12 @@ Index of this file: | |||||||
| #pragma clang diagnostic ignored "-Wreserved-id-macro"          // warning : macro name is a reserved identifier                // | #pragma clang diagnostic ignored "-Wreserved-id-macro"          // warning : macro name is a reserved identifier                // | ||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic ignored "-Wpragmas"                      // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"          // warning: cast to pointer from integer of different size | #pragma GCC diagnostic ignored "-Wint-to-pointer-cast"          // warning: cast to pointer from integer of different size | ||||||
| #pragma GCC diagnostic ignored "-Wformat-security"              // warning : format string is not a string literal (potentially insecure) | #pragma GCC diagnostic ignored "-Wformat-security"              // warning : format string is not a string literal (potentially insecure) | ||||||
| #pragma GCC diagnostic ignored "-Wdouble-promotion"             // warning: implicit conversion from 'float' to 'double' when passing argument to function | #pragma GCC diagnostic ignored "-Wdouble-promotion"             // warning: implicit conversion from 'float' to 'double' when passing argument to function | ||||||
| #pragma GCC diagnostic ignored "-Wconversion"                   // warning: conversion to 'xxxx' from 'xxxx' may alter its value | #pragma GCC diagnostic ignored "-Wconversion"                   // warning: conversion to 'xxxx' from 'xxxx' may alter its value | ||||||
| #if (__GNUC__ >= 6) | #pragma GCC diagnostic ignored "-Wmisleading-indentation"       // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement      // GCC 6.0+ only. See #883 on GitHub. | ||||||
| #pragma GCC diagnostic ignored "-Wmisleading-indentation"       // warning: this 'if' clause does not guard this statement      // GCC 6.0+ only. See #883 on GitHub. |  | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. | // Play it nice with Windows users. Notepad in 2017 still doesn't display text data with Unix-style \n. | ||||||
|   | |||||||
| @@ -72,13 +72,12 @@ Index of this file: | |||||||
| #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | ||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | ||||||
| #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | #pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function | ||||||
| #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | #pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value | ||||||
| #pragma GCC diagnostic ignored "-Wstack-protector"          // warning: stack protector not protecting local variables: variable length buffer | #pragma GCC diagnostic ignored "-Wstack-protector"          // warning: stack protector not protecting local variables: variable length buffer | ||||||
| #if __GNUC__ >= 8 | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
| #pragma GCC diagnostic ignored "-Wclass-memaccess"          // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead |  | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| @@ -2699,7 +2698,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // We ignore blank width at the end of the line (they can be skipped) |         // We ignore blank width at the end of the line (they can be skipped) | ||||||
|         if (line_width + word_width >= wrap_width) |         if (line_width + word_width > wrap_width) | ||||||
|         { |         { | ||||||
|             // Words that cannot possibly fit within an entire line will be cut anywhere. |             // Words that cannot possibly fit within an entire line will be cut anywhere. | ||||||
|             if (word_width < wrap_width) |             if (word_width < wrap_width) | ||||||
|   | |||||||
| @@ -56,9 +56,8 @@ Index of this file: | |||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
| #pragma GCC diagnostic push | #pragma GCC diagnostic push | ||||||
| #if __GNUC__ >= 8 | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wclass-memaccess"          // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| @@ -725,6 +724,7 @@ struct ImGuiColumns | |||||||
|     float               HostCursorPosY;         // Backup of CursorPos at the time of BeginColumns() |     float               HostCursorPosY;         // Backup of CursorPos at the time of BeginColumns() | ||||||
|     float               HostCursorMaxPosX;      // Backup of CursorMaxPos at the time of BeginColumns() |     float               HostCursorMaxPosX;      // Backup of CursorMaxPos at the time of BeginColumns() | ||||||
|     ImRect              HostClipRect;           // Backup of ClipRect at the time of BeginColumns() |     ImRect              HostClipRect;           // Backup of ClipRect at the time of BeginColumns() | ||||||
|  |     ImRect              HostWorkRect;           // Backup of WorkRect at the time of BeginColumns() | ||||||
|     ImVector<ImGuiColumnData> Columns; |     ImVector<ImGuiColumnData> Columns; | ||||||
|  |  | ||||||
|     ImGuiColumns()      { Clear(); } |     ImGuiColumns()      { Clear(); } | ||||||
| @@ -1463,7 +1463,7 @@ struct IMGUI_API ImGuiWindow | |||||||
|     // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer. |     // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer. | ||||||
|     // The main 'OuterRect', omitted as a field, is window->Rect(). |     // The main 'OuterRect', omitted as a field, is window->Rect(). | ||||||
|     ImRect                  OuterRectClipped;                   // == Window->Rect() just after setup in Begin(). == window->Rect() for root window. |     ImRect                  OuterRectClipped;                   // == Window->Rect() just after setup in Begin(). == window->Rect() for root window. | ||||||
|     ImRect                  InnerRect;                          // Inner rectangle (omit title bar, menu bar) |     ImRect                  InnerRect;                          // Inner rectangle (omit title bar, menu bar, scroll bar) | ||||||
|     ImRect                  InnerClipRect;                      // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect. |     ImRect                  InnerClipRect;                      // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect. | ||||||
|     ImRect                  WorkRect;                           // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentsRegionRect over time (from 1.71+ onward). |     ImRect                  WorkRect;                           // Cover the whole scrolling region, shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentsRegionRect over time (from 1.71+ onward). | ||||||
|     ImRect                  ClipRect;                           // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back(). |     ImRect                  ClipRect;                           // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back(). | ||||||
|   | |||||||
| @@ -63,10 +63,9 @@ Index of this file: | |||||||
| #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | #pragma clang diagnostic ignored "-Wdouble-promotion"       // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double. | ||||||
| #endif | #endif | ||||||
| #elif defined(__GNUC__) | #elif defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | #pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked | ||||||
| #if __GNUC__ >= 8 | #pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead | ||||||
| #pragma GCC diagnostic ignored "-Wclass-memaccess"          // warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead |  | ||||||
| #endif |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
|   | |||||||
| @@ -36,6 +36,7 @@ | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if defined(__GNUC__) | #if defined(__GNUC__) | ||||||
|  | #pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind | ||||||
| #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | #pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user