mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	Merge branch 'master' into viewport
# Conflicts: # examples/imgui_impl_win32.cpp
This commit is contained in:
		@@ -30,7 +30,6 @@ HOW TO UPDATE?
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-----------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------
 | 
				
			||||||
<<<<<<< HEAD
 | 
					 | 
				
			||||||
 VIEWPORT BRANCH (In Progress)
 | 
					 VIEWPORT BRANCH (In Progress)
 | 
				
			||||||
-----------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -71,20 +70,19 @@ Other changes:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-----------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------
 | 
				
			||||||
 VERSION 1.68
 | 
					 | 
				
			||||||
=======
 | 
					 | 
				
			||||||
 VERSION 1.68 (In progress)
 | 
					 VERSION 1.68 (In progress)
 | 
				
			||||||
>>>>>>> master
 | 
					 | 
				
			||||||
-----------------------------------------------------------------------
 | 
					-----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Other Changes:
 | 
					Other Changes:
 | 
				
			||||||
- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
 | 
					- Added .editorconfig file for text editors to standardize using spaces. (#2038) [@kudaba]
 | 
				
			||||||
- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
 | 
					- ImDrawList: Fixed AddCircle(), AddCircleFilled() angle step being off, which was visible when drawing a "circle"
 | 
				
			||||||
  with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
 | 
					  with a small number of segments (e.g. an hexagon). (#2287) [@baktery]
 | 
				
			||||||
- Fonts: imgui_freetype: Added support for imgui allocators + custom FreeType only SetAllocatorFunctions. (#2285) [@Vuhdo]
 | 
					- ImFontAtlas: Added 0x2000-0x206F general punctuation range to default ChineseFull/ChineseSimplifiedCommon ranges. (#2093)
 | 
				
			||||||
 | 
					- ImFontAtlas: FreeType: Added support for imgui allocators + custom FreeType only SetAllocatorFunctions. (#2285) [@Vuhdo]
 | 
				
			||||||
- Examples: Win32: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created 
 | 
					- Examples: Win32: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created 
 | 
				
			||||||
  in a different thread or parent. (#1951, #2087, #2156, #2232) [many people]
 | 
					  in a different thread or parent. (#1951, #2087, #2156, #2232) [many people]
 | 
				
			||||||
- Examples: Win32: Added support for XInput games (if ImGuiConfigFlags_NavEnableGamepad is enabled).
 | 
					- Examples: Win32: Added support for XInput games (if ImGuiConfigFlags_NavEnableGamepad is enabled).
 | 
				
			||||||
 | 
					- Examples: Win32: Added support for mouse buttons 4 and 5 via WM_XBUTTON* messages. (#2264)
 | 
				
			||||||
- Examples: DirectX9: Explicitly disable fog (D3DRS_FOGENABLE) before drawing in case user state has it set. (#2288, #2230)
 | 
					- Examples: DirectX9: Explicitly disable fog (D3DRS_FOGENABLE) before drawing in case user state has it set. (#2288, #2230)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -149,7 +149,7 @@ Frameworks:
 | 
				
			|||||||
- LÖVE+Lua: [love-imgui](https://github.com/slages/love-imgui)
 | 
					- LÖVE+Lua: [love-imgui](https://github.com/slages/love-imgui)
 | 
				
			||||||
- Magnum: [ImGuiIntegration](https://doc.magnum.graphics/magnum/namespaceMagnum_1_1ImGuiIntegration.html) ([example](https://doc.magnum.graphics/magnum/examples-imgui.html))
 | 
					- Magnum: [ImGuiIntegration](https://doc.magnum.graphics/magnum/namespaceMagnum_1_1ImGuiIntegration.html) ([example](https://doc.magnum.graphics/magnum/examples-imgui.html))
 | 
				
			||||||
- NanoRT: [syoyo/imgui](https://github.com/syoyo/imgui/tree/nanort)
 | 
					- NanoRT: [syoyo/imgui](https://github.com/syoyo/imgui/tree/nanort)
 | 
				
			||||||
- Qt3d: [imgui-qt3d](https://github.com/alpqr/imgui-qt3d), QOpenGLWindow [qtimgui](https://github.com/ocornut/imgui/issues/1910)
 | 
					- Qt: [imgui-qt3d](https://github.com/alpqr/imgui-qt3d) / [QOpenGLWindow (qtimgui)](https://github.com/ocornut/imgui/issues/1910) / [QtDirect3D](https://github.com/giladreich/QtDirect3D) / [qt6](https://github.com/alpqr/qvk6/tree/imgui/examples/rhi/imguidemo)
 | 
				
			||||||
- SFML: [imgui-sfml](https://github.com/EliasD/imgui-sfml)
 | 
					- SFML: [imgui-sfml](https://github.com/EliasD/imgui-sfml)
 | 
				
			||||||
- Software renderer: [imgui_software_renderer](https://github.com/emilk/imgui_software_renderer)
 | 
					- Software renderer: [imgui_software_renderer](https://github.com/emilk/imgui_software_renderer)
 | 
				
			||||||
- Unreal Engine 4: [segross/UnrealImGui](https://github.com/segross/UnrealImGui) or [sronsse/UnrealEngine_ImGui](https://github.com/sronsse/UnrealEngine_ImGui)
 | 
					- Unreal Engine 4: [segross/UnrealImGui](https://github.com/segross/UnrealImGui) or [sronsse/UnrealEngine_ImGui](https://github.com/sronsse/UnrealEngine_ImGui)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -168,61 +168,61 @@ example_win32_directx11/
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
example_win32_directx12/
 | 
					example_win32_directx12/
 | 
				
			||||||
    DirectX12 example, Windows only.
 | 
					    DirectX12 example, Windows only.
 | 
				
			||||||
    This is quite long and tedious, because: DirectX12.
 | 
					 | 
				
			||||||
    = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx12.cpp
 | 
					    = main.cpp + imgui_impl_win32.cpp + imgui_impl_dx12.cpp
 | 
				
			||||||
 | 
					    This is quite long and tedious, because: DirectX12.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_apple_metal/
 | 
					example_apple_metal/
 | 
				
			||||||
    OSX & iOS + Metal.
 | 
					    OSX & iOS + Metal.
 | 
				
			||||||
 | 
					    = main.m + imgui_impl_osx.mm + imgui_impl_metal.mm
 | 
				
			||||||
    It is based on the "cross-platform" game template provided with Xcode as of Xcode 9.
 | 
					    It is based on the "cross-platform" game template provided with Xcode as of Xcode 9.
 | 
				
			||||||
    (NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.)
 | 
					    (NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.)
 | 
				
			||||||
    = game template + imgui_impl_osx.mm + imgui_impl_metal.mm
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_apple_opengl2/
 | 
					example_apple_opengl2/
 | 
				
			||||||
    OSX + OpenGL2.
 | 
					    OSX + OpenGL2.
 | 
				
			||||||
    (NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.)
 | 
					 | 
				
			||||||
    = main.mm + imgui_impl_osx.mm + imgui_impl_opengl2.cpp
 | 
					    = main.mm + imgui_impl_osx.mm + imgui_impl_opengl2.cpp
 | 
				
			||||||
 | 
					    (NB: you may still want to use GLFW or SDL which will also support Windows, Linux along with OSX.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_glfw_opengl2/
 | 
					example_glfw_opengl2/
 | 
				
			||||||
 | 
					    GLFW + OpenGL2 example (legacy, fixed pipeline).
 | 
				
			||||||
 | 
					    = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl2.cpp
 | 
				
			||||||
    **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
 | 
					    **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
 | 
				
			||||||
    **Prefer using OPENGL3 code (with gl3w/glew/glad, you can replace the OpenGL function loader)**
 | 
					    **Prefer using OPENGL3 code (with gl3w/glew/glad, you can replace the OpenGL function loader)**
 | 
				
			||||||
    GLFW + OpenGL2 example (legacy, fixed pipeline).
 | 
					 | 
				
			||||||
    This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter.
 | 
					    This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter.
 | 
				
			||||||
    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
 | 
					    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
 | 
				
			||||||
    make things more complicated, will require your code to reset many OpenGL attributes to their initial
 | 
					    make things more complicated, will require your code to reset many OpenGL attributes to their initial
 | 
				
			||||||
    state, and might confuse your GPU driver. One star, not recommended.
 | 
					    state, and might confuse your GPU driver. One star, not recommended.
 | 
				
			||||||
    = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl2.cpp
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_glfw_opengl3/
 | 
					example_glfw_opengl3/
 | 
				
			||||||
    GLFW (Win32, Mac, Linux) + OpenGL3+/ES2/ES3 example (programmable pipeline, binding modern functions with GL3W).
 | 
					    GLFW (Win32, Mac, Linux) + OpenGL3+/ES2/ES3 example (programmable pipeline).
 | 
				
			||||||
 | 
					    = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp
 | 
				
			||||||
    This uses more modern OpenGL calls and custom shaders. 
 | 
					    This uses more modern OpenGL calls and custom shaders. 
 | 
				
			||||||
    Prefer using that if you are using modern OpenGL in your application (anything with shaders).
 | 
					    Prefer using that if you are using modern OpenGL in your application (anything with shaders).
 | 
				
			||||||
    = main.cpp + imgui_impl_glfw.cpp + imgui_impl_opengl3.cpp
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
example_glfw_vulkan/
 | 
					example_glfw_vulkan/
 | 
				
			||||||
    GLFW (Win32, Mac, Linux) + Vulkan example.
 | 
					    GLFW (Win32, Mac, Linux) + Vulkan example.
 | 
				
			||||||
    This is quite long and tedious, because: Vulkan.
 | 
					 | 
				
			||||||
    = 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_sdl_opengl2/
 | 
					example_sdl_opengl2/
 | 
				
			||||||
 | 
					    SDL2 (Win32, Mac, Linux etc.) + OpenGL example (legacy, fixed pipeline).
 | 
				
			||||||
 | 
					    = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl2.cpp
 | 
				
			||||||
    **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
 | 
					    **DO NOT USE OPENGL2 CODE IF YOUR CODE/ENGINE IS USING MODERN OPENGL (SHADERS, VBO, VAO, etc.)**
 | 
				
			||||||
    **Prefer using OPENGL3 code (with gl3w/glew/glad, you can replace the OpenGL function loader)**
 | 
					    **Prefer using OPENGL3 code (with gl3w/glew/glad, you can replace the OpenGL function loader)**
 | 
				
			||||||
    SDL2 (Win32, Mac, Linux etc.) + OpenGL example (legacy, fixed pipeline).
 | 
					 | 
				
			||||||
    This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter.
 | 
					    This code is mostly provided as a reference to learn about Dear ImGui integration, because it is shorter.
 | 
				
			||||||
    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
 | 
					    If your code is using GL3+ context or any semi modern OpenGL calls, using this renderer is likely to
 | 
				
			||||||
    make things more complicated, will require your code to reset many OpenGL attributes to their initial
 | 
					    make things more complicated, will require your code to reset many OpenGL attributes to their initial
 | 
				
			||||||
    state, and might confuse your GPU driver. One star, not recommended. 
 | 
					    state, and might confuse your GPU driver. One star, not recommended. 
 | 
				
			||||||
    = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl2.cpp
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_sdl_opengl3/
 | 
					example_sdl_opengl3/
 | 
				
			||||||
    SDL2 (Win32, Mac, Linux, etc.) + OpenGL3+/ES2/ES3 example.
 | 
					    SDL2 (Win32, Mac, Linux, etc.) + OpenGL3+/ES2/ES3 example.
 | 
				
			||||||
 | 
					    = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl3.cpp
 | 
				
			||||||
    This uses more modern OpenGL calls and custom shaders. 
 | 
					    This uses more modern OpenGL calls and custom shaders. 
 | 
				
			||||||
    Prefer using that if you are using modern OpenGL in your application (anything with shaders).
 | 
					    Prefer using that if you are using modern OpenGL in your application (anything with shaders).
 | 
				
			||||||
    = main.cpp + imgui_impl_sdl.cpp + imgui_impl_opengl3.cpp
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_sdl_vulkan/
 | 
					example_sdl_vulkan/
 | 
				
			||||||
    SDL2 (Win32, Mac, Linux, etc.) + Vulkan example.
 | 
					    SDL2 (Win32, Mac, Linux, etc.) + Vulkan example.
 | 
				
			||||||
    This is quite long and tedious, because: Vulkan.
 | 
					 | 
				
			||||||
    = 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
example_allegro5/
 | 
					example_allegro5/
 | 
				
			||||||
    Allegro 5 example.
 | 
					    Allegro 5 example.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,13 +98,13 @@ int main(int, char**)
 | 
				
			|||||||
    // Create application window
 | 
					    // Create application window
 | 
				
			||||||
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
					    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
				
			||||||
    RegisterClassEx(&wc);
 | 
					    RegisterClassEx(&wc);
 | 
				
			||||||
    HWND hwnd = CreateWindow(_T("ImGui Example"), _T("Dear ImGui DirectX10 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
					    HWND hwnd = CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX10 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize Direct3D
 | 
					    // Initialize Direct3D
 | 
				
			||||||
    if (CreateDeviceD3D(hwnd) < 0)
 | 
					    if (CreateDeviceD3D(hwnd) < 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        CleanupDeviceD3D();
 | 
					        CleanupDeviceD3D();
 | 
				
			||||||
        UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					        UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -238,7 +238,7 @@ int main(int, char**)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    CleanupDeviceD3D();
 | 
					    CleanupDeviceD3D();
 | 
				
			||||||
    DestroyWindow(hwnd);
 | 
					    DestroyWindow(hwnd);
 | 
				
			||||||
    UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					    UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,13 +114,13 @@ int main(int, char**)
 | 
				
			|||||||
    // Create application window
 | 
					    // Create application window
 | 
				
			||||||
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
					    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
				
			||||||
    RegisterClassEx(&wc);
 | 
					    RegisterClassEx(&wc);
 | 
				
			||||||
    HWND hwnd = CreateWindow(_T("ImGui Example"), _T("Dear ImGui DirectX11 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
					    HWND hwnd = CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX11 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize Direct3D
 | 
					    // Initialize Direct3D
 | 
				
			||||||
    if (CreateDeviceD3D(hwnd) < 0)
 | 
					    if (CreateDeviceD3D(hwnd) < 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        CleanupDeviceD3D();
 | 
					        CleanupDeviceD3D();
 | 
				
			||||||
        UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					        UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -258,7 +258,7 @@ int main(int, char**)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    CleanupDeviceD3D();
 | 
					    CleanupDeviceD3D();
 | 
				
			||||||
    DestroyWindow(hwnd);
 | 
					    DestroyWindow(hwnd);
 | 
				
			||||||
    UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					    UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -272,13 +272,13 @@ int main(int, char**)
 | 
				
			|||||||
    // Create application window
 | 
					    // Create application window
 | 
				
			||||||
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
					    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
				
			||||||
    RegisterClassEx(&wc);
 | 
					    RegisterClassEx(&wc);
 | 
				
			||||||
    HWND hwnd = CreateWindow(_T("ImGui Example"), _T("Dear ImGui DirectX12 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
					    HWND hwnd = CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX12 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize Direct3D
 | 
					    // Initialize Direct3D
 | 
				
			||||||
    if (CreateDeviceD3D(hwnd) < 0)
 | 
					    if (CreateDeviceD3D(hwnd) < 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        CleanupDeviceD3D();
 | 
					        CleanupDeviceD3D();
 | 
				
			||||||
        UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					        UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -442,7 +442,7 @@ int main(int, char**)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    CleanupDeviceD3D();
 | 
					    CleanupDeviceD3D();
 | 
				
			||||||
    DestroyWindow(hwnd);
 | 
					    DestroyWindow(hwnd);
 | 
				
			||||||
    UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					    UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,13 +49,13 @@ int main(int, char**)
 | 
				
			|||||||
    // Create application window
 | 
					    // Create application window
 | 
				
			||||||
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
					    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };
 | 
				
			||||||
    RegisterClassEx(&wc);
 | 
					    RegisterClassEx(&wc);
 | 
				
			||||||
    HWND hwnd = CreateWindow(_T("ImGui Example"), _T("Dear ImGui DirectX9 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
					    HWND hwnd = CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX9 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize Direct3D
 | 
					    // Initialize Direct3D
 | 
				
			||||||
    LPDIRECT3D9 pD3D;
 | 
					    LPDIRECT3D9 pD3D;
 | 
				
			||||||
    if ((pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
 | 
					    if ((pD3D = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					        UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ZeroMemory(&g_d3dpp, sizeof(g_d3dpp));
 | 
					    ZeroMemory(&g_d3dpp, sizeof(g_d3dpp));
 | 
				
			||||||
@@ -71,7 +71,7 @@ int main(int, char**)
 | 
				
			|||||||
    if (pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_d3dpp, &g_pd3dDevice) < 0)
 | 
					    if (pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &g_d3dpp, &g_pd3dDevice) < 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        pD3D->Release();
 | 
					        pD3D->Release();
 | 
				
			||||||
        UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					        UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -200,7 +200,7 @@ int main(int, char**)
 | 
				
			|||||||
    if (g_pd3dDevice) g_pd3dDevice->Release();
 | 
					    if (g_pd3dDevice) g_pd3dDevice->Release();
 | 
				
			||||||
    if (pD3D) pD3D->Release();
 | 
					    if (pD3D) pD3D->Release();
 | 
				
			||||||
    DestroyWindow(hwnd);
 | 
					    DestroyWindow(hwnd);
 | 
				
			||||||
    UnregisterClass(_T("ImGui Example"), wc.hInstance);
 | 
					    UnregisterClass(wc.lpszClassName, wc.hInstance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,8 @@
 | 
				
			|||||||
// CHANGELOG
 | 
					// CHANGELOG
 | 
				
			||||||
// (minor and older changes stripped away, please see git history for details)
 | 
					// (minor and older changes stripped away, please see git history for details)
 | 
				
			||||||
//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
					//  2018-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 | 
				
			||||||
//  2019-01-17: Inputs: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created in a different thread or parent.
 | 
					//  2019-01-17: Misc: Using GetForegroundWindow()+IsChild() instead of GetActiveWindow() to be compatible with windows created in a different thread or parent.
 | 
				
			||||||
 | 
					//  2019-01-17: Inputs: Added support for mouse buttons 4 and 5 via WM_XBUTTON* messages.
 | 
				
			||||||
//  2019-01-15: Inputs: Added support for XInput gamepads (if ImGuiConfigFlags_NavEnableGamepad is set by user application).
 | 
					//  2019-01-15: Inputs: Added support for XInput gamepads (if ImGuiConfigFlags_NavEnableGamepad is set by user application).
 | 
				
			||||||
//  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
 | 
					//  2018-11-30: Misc: Setting up io.BackendPlatformName so it can be displayed in the About Window.
 | 
				
			||||||
//  2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor.
 | 
					//  2018-06-29: Inputs: Added support for the ImGuiMouseCursor_Hand cursor.
 | 
				
			||||||
@@ -323,11 +324,13 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
 | 
				
			|||||||
    case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
 | 
					    case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK:
 | 
				
			||||||
    case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
 | 
					    case WM_RBUTTONDOWN: case WM_RBUTTONDBLCLK:
 | 
				
			||||||
    case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
 | 
					    case WM_MBUTTONDOWN: case WM_MBUTTONDBLCLK:
 | 
				
			||||||
 | 
					    case WM_XBUTTONDOWN: case WM_XBUTTONDBLCLK:
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int button = 0;
 | 
					        int button = 0;
 | 
				
			||||||
        if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) button = 0;
 | 
					        if (msg == WM_LBUTTONDOWN || msg == WM_LBUTTONDBLCLK) { button = 0; }
 | 
				
			||||||
        if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) button = 1;
 | 
					        if (msg == WM_RBUTTONDOWN || msg == WM_RBUTTONDBLCLK) { button = 1; }
 | 
				
			||||||
        if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) button = 2;
 | 
					        if (msg == WM_MBUTTONDOWN || msg == WM_MBUTTONDBLCLK) { button = 2; }
 | 
				
			||||||
 | 
					        if (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONDBLCLK) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
 | 
				
			||||||
        if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL)
 | 
					        if (!ImGui::IsAnyMouseDown() && ::GetCapture() == NULL)
 | 
				
			||||||
            ::SetCapture(hwnd);
 | 
					            ::SetCapture(hwnd);
 | 
				
			||||||
        io.MouseDown[button] = true;
 | 
					        io.MouseDown[button] = true;
 | 
				
			||||||
@@ -336,11 +339,13 @@ IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARA
 | 
				
			|||||||
    case WM_LBUTTONUP:
 | 
					    case WM_LBUTTONUP:
 | 
				
			||||||
    case WM_RBUTTONUP:
 | 
					    case WM_RBUTTONUP:
 | 
				
			||||||
    case WM_MBUTTONUP:
 | 
					    case WM_MBUTTONUP:
 | 
				
			||||||
 | 
					    case WM_XBUTTONUP:
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int button = 0;
 | 
					        int button = 0;
 | 
				
			||||||
        if (msg == WM_LBUTTONUP) button = 0;
 | 
					        if (msg == WM_LBUTTONUP) { button = 0; }
 | 
				
			||||||
        if (msg == WM_RBUTTONUP) button = 1;
 | 
					        if (msg == WM_RBUTTONUP) { button = 1; }
 | 
				
			||||||
        if (msg == WM_MBUTTONUP) button = 2;
 | 
					        if (msg == WM_MBUTTONUP) { button = 2; }
 | 
				
			||||||
 | 
					        if (msg == WM_XBUTTONUP) { button = (GET_XBUTTON_WPARAM(wParam) == XBUTTON1) ? 3 : 4; }
 | 
				
			||||||
        io.MouseDown[button] = false;
 | 
					        io.MouseDown[button] = false;
 | 
				
			||||||
        if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd)
 | 
					        if (!ImGui::IsAnyMouseDown() && ::GetCapture() == hwnd)
 | 
				
			||||||
            ::ReleaseCapture();
 | 
					            ::ReleaseCapture();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2167,7 +2167,8 @@ const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
 | 
				
			|||||||
    static const ImWchar ranges[] =
 | 
					    static const ImWchar ranges[] =
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
					        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
				
			||||||
        0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
 | 
					        0x2000, 0x206F, // General Punctuation
 | 
				
			||||||
 | 
					        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
 | 
				
			||||||
        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
					        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
				
			||||||
        0xFF00, 0xFFEF, // Half-width characters
 | 
					        0xFF00, 0xFFEF, // Half-width characters
 | 
				
			||||||
        0x4e00, 0x9FAF, // CJK Ideograms
 | 
					        0x4e00, 0x9FAF, // CJK Ideograms
 | 
				
			||||||
@@ -2243,9 +2244,10 @@ const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
 | 
				
			|||||||
    static ImWchar base_ranges[] = // not zero-terminated
 | 
					    static ImWchar base_ranges[] = // not zero-terminated
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
					        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
				
			||||||
        0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
 | 
					        0x2000, 0x206F, // General Punctuation
 | 
				
			||||||
 | 
					        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
 | 
				
			||||||
        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
					        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
				
			||||||
        0xFF00, 0xFFEF, // Half-width characters
 | 
					        0xFF00, 0xFFEF  // Half-width characters
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
 | 
					    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
 | 
				
			||||||
    if (!full_ranges[0])
 | 
					    if (!full_ranges[0])
 | 
				
			||||||
@@ -2301,9 +2303,9 @@ const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
 | 
				
			|||||||
    static ImWchar base_ranges[] = // not zero-terminated
 | 
					    static ImWchar base_ranges[] = // not zero-terminated
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
					        0x0020, 0x00FF, // Basic Latin + Latin Supplement
 | 
				
			||||||
        0x3000, 0x30FF, // Punctuations, Hiragana, Katakana
 | 
					        0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
 | 
				
			||||||
        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
					        0x31F0, 0x31FF, // Katakana Phonetic Extensions
 | 
				
			||||||
        0xFF00, 0xFFEF, // Half-width characters
 | 
					        0xFF00, 0xFFEF  // Half-width characters
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
 | 
					    static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
 | 
				
			||||||
    if (!full_ranges[0])
 | 
					    if (!full_ranges[0])
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user