mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-10-26 12:27:30 +00:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # imgui.cpp # imgui_internal.h # imgui_widgets.cpp
This commit is contained in:
		| @@ -9,7 +9,8 @@ | ||||
| //  [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert vertices manually. | ||||
| //  [ ] Platform: Missing gamepad support. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,8 @@ | ||||
| //  [ ] Renderer: The renderer is suboptimal as we need to unindex our buffers and convert vertices manually. | ||||
| //  [ ] Platform: Missing gamepad support. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -11,9 +11,10 @@ | ||||
| //  - FIXME: On-screen keyboard currently needs to be enabled by the application (see examples/ and issue #3446) | ||||
| //  - FIXME: Unicode character inputs needs to be passed by Dear ImGui by the application (see examples/ and issue #3446) | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. | ||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | ||||
| // https://github.com/ocornut/imgui | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
|   | ||||
| @@ -11,9 +11,10 @@ | ||||
| //  - FIXME: On-screen keyboard currently needs to be enabled by the application (see examples/ and issue #3446) | ||||
| //  - FIXME: Unicode character inputs needs to be passed by Dear ImGui by the application (see examples/ and issue #3446) | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. | ||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | ||||
| // https://github.com/ocornut/imgui | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -11,7 +11,8 @@ | ||||
| // This is because we need ImTextureID to carry a 64-bit value and by default ImTextureID is defined as void*. | ||||
| // This define is set in the example .vcxproj file and need to be replicated in your app or by adding it to your imconfig.h file. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -10,7 +10,8 @@ | ||||
| // This is because we need ImTextureID to carry a 64-bit value and by default ImTextureID is defined as void*. | ||||
| // This define is set in the example .vcxproj file and need to be replicated in your app or by adding it to your imconfig.h file. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,8 @@ | ||||
| // Issues: | ||||
| //  [ ] Platform: Multi-viewport support: ParentViewportID not honored, and so io.ConfigViewportsNoDefaultParent has no effect (minor). | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,8 @@ | ||||
| // Issues: | ||||
| //  [ ] Platform: Multi-viewport support: ParentViewportID not honored, and so io.ConfigViewportsNoDefaultParent has no effect (minor). | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -11,7 +11,8 @@ | ||||
| //  [ ] Platform: Missing clipboard support (not supported by Glut). | ||||
| //  [ ] Platform: Missing gamepad support. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -11,7 +11,8 @@ | ||||
| //  [ ] Platform: Missing clipboard support (not supported by Glut). | ||||
| //  [ ] Platform: Missing gamepad support. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| // Missing features: | ||||
| //  [ ] Renderer: Clipping rectangles are not honored. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,8 @@ | ||||
| // Implemented features: | ||||
| //  [X] Renderer: User texture binding. Use 'CIwTexture*' as ImTextureID. Read the FAQ about ImTextureID! | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| // Missing features: | ||||
| //  [ ] Renderer: Multi-viewport / platform windows. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| // Missing features: | ||||
| //  [ ] Renderer: Multi-viewport / platform windows. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,8 @@ | ||||
| //  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,8 @@ | ||||
| //  [X] Renderer: User texture binding. Use 'GLuint' OpenGL texture identifier as void*/ImTextureID. Read the FAQ about ImTextureID! | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,8 @@ | ||||
| //  [X] Renderer: Multi-viewport support. Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
| //  [x] Renderer: Desktop GL only: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,8 @@ | ||||
| //  [ ] Platform: Keys are all generally very broken. Best using [event keycode] and not [event characters].. | ||||
| //  [ ] Platform: Multi-viewport / platform windows. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,8 @@ | ||||
| //  [ ] Platform: Keys are all generally very broken. Best using [event keycode] and not [event characters].. | ||||
| //  [ ] Platform: Multi-viewport / platform windows. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,8 @@ | ||||
| //  [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. | ||||
| //  [ ] Platform: Multi-viewport + Minimized windows seems to break mouse wheel events (at least under Windows). | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,8 @@ | ||||
| //  [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME. | ||||
| //  [ ] Platform: Multi-viewport + Minimized windows seems to break mouse wheel events (at least under Windows). | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| // Missing features: | ||||
| //  [ ] Renderer: User texture binding. Changes of ImTextureID aren't supported by this backend! See https://github.com/ocornut/imgui/pull/914 | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,8 @@ | ||||
| //  [ ] Platform: Multi-viewport / platform windows. | ||||
| //  [ ] Renderer: User texture binding. Changes of ImTextureID aren't supported by this backend! See https://github.com/ocornut/imgui/pull/914 | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: User texture binding. Use 'WGPUTextureView' as ImTextureID. Read the FAQ about ImTextureID! | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,8 @@ | ||||
| //  [X] Renderer: User texture binding. Use 'WGPUTextureView' as ImTextureID. Read the FAQ about ImTextureID! | ||||
| //  [X] Renderer: Support for large meshes (64k+ vertices) with 16-bit indices. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,8 @@ | ||||
| //  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. | ||||
| //  [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,8 @@ | ||||
| //  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'. | ||||
| //  [X] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable'. | ||||
|  | ||||
| // You can copy and use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this. | ||||
| // You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.  | ||||
| // Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need. | ||||
| // If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp. | ||||
| // Read online: https://github.com/ocornut/imgui/tree/master/docs | ||||
|  | ||||
|   | ||||
| @@ -104,6 +104,8 @@ Other changes: | ||||
| ----------------------------------------------------------------------- | ||||
|  | ||||
| Other Changes: | ||||
| - TabBar: Fixed using more than 32 KB-worth of tab names. (#4176) | ||||
| - Fixed printf-style format checks on non-MinGW flavors. (#4183, #3592) | ||||
| - Demo: Fixed requirement in 1.83 to link with imgui_demo.cpp if IMGUI_DISABLE_METRICS_WINDOW is not set. (#4171) | ||||
|   Normally the right way to disable compiling the demo is to set IMGUI_DISABLE_DEMO_WINDOWS, but we want to avoid | ||||
|   implying that the file is required. | ||||
|   | ||||
| @@ -199,7 +199,7 @@ Ongoing Dear ImGui development is currently financially supported by users and p | ||||
| - [Blizzard](https://careers.blizzard.com/en-us/openings/engineering/all/all/all/1), [Google](https://github.com/google/filament), [Nvidia](https://developer.nvidia.com/nvidia-omniverse) | ||||
|  | ||||
| *Double-chocolate and Salty caramel sponsors* | ||||
| - [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Aras Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-studios.com), [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grindinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level Games](https://www.nextlevelgames.com), [RAD Game Tools](http://www.radgametools.com/), [O-Net Communications (USA)](http://en.o-netcom.com), [Supercell](https://supercell.com), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui) | ||||
| - [Activision](https://careers.activision.com/c/programmingsoftware-engineering-jobs), [Adobe](https://www.adobe.com/products/medium.html), [Aras Pranckevičius](https://aras-p.info), [Arkane Studios](https://www.arkane-studios.com), [Framefield](http://framefield.com), [Grinding Gear Games](https://www.grindinggear.com), [Kylotonn](https://www.kylotonn.com), [Next Level Games](https://www.nextlevelgames.com), [RAD Game Tools](http://www.radgametools.com/), [O-Net Communications (USA)](http://en.o-netcom.com), [Supercell](https://supercell.com), [Ubisoft](https://montreal.ubisoft.com/en/ubisoft-sponsors-user-interface-library-for-c-dear-imgui) | ||||
|  | ||||
| Please see [detailed list of Dear ImGui supporters](https://github.com/ocornut/imgui/wiki/Sponsors) for past sponsors. | ||||
| From November 2014 to December 2019, ongoing development has also been financially supported by its users on Patreon and through individual donations. | ||||
|   | ||||
							
								
								
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -9221,7 +9221,7 @@ ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& s | ||||
| } | ||||
|  | ||||
| // Note that this is used for popups, which can overlap the non work-area of individual viewports. | ||||
| ImRect ImGui::GetWindowAllowedExtentRect(ImGuiWindow* window) | ||||
| ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     ImRect r_screen; | ||||
| @@ -9246,7 +9246,7 @@ ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|  | ||||
|     ImRect r_outer = GetWindowAllowedExtentRect(window); | ||||
|     ImRect r_outer = GetPopupAllowedExtentRect(window); | ||||
|     if (window->Flags & ImGuiWindowFlags_ChildMenu) | ||||
|     { | ||||
|         // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds. | ||||
| @@ -16249,10 +16249,10 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|         cfg->ShowTablesRects |= Combo("##show_table_rects_type", &cfg->ShowTablesRectsType, trt_rects_names, TRT_Count, TRT_Count); | ||||
|         if (cfg->ShowTablesRects && g.NavWindow != NULL) | ||||
|         { | ||||
|             for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++) | ||||
|             for (int table_n = 0; table_n < g.Tables.GetMapSize(); table_n++) | ||||
|             { | ||||
|                 ImGuiTable* table = g.Tables.GetByIndex(table_n); | ||||
|                 if (table->LastFrameActive < g.FrameCount - 1 || (table->OuterWindow != g.NavWindow && table->InnerWindow != g.NavWindow)) | ||||
|                 ImGuiTable* table = g.Tables.TryGetMapData(table_n); | ||||
|                 if (table == NULL || table->LastFrameActive < g.FrameCount - 1 || (table->OuterWindow != g.NavWindow && table->InnerWindow != g.NavWindow)) | ||||
|                     continue; | ||||
|  | ||||
|                 BulletText("Table 0x%08X (%d columns, in '%s')", table->ID, table->ColumnsCount, table->OuterWindow->Name); | ||||
| @@ -16369,11 +16369,11 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|     } | ||||
|  | ||||
|     // Details for TabBars | ||||
|     if (TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetSize())) | ||||
|     if (TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetAliveCount())) | ||||
|     { | ||||
|         for (int n = 0; n < g.TabBars.GetSize(); n++) | ||||
|         for (int n = 0; n < g.TabBars.GetMapSize(); n++) | ||||
|             if (ImGuiTabBar* tab_bar = g.TabBars.TryGetMapData(n)) | ||||
|             { | ||||
|             ImGuiTabBar* tab_bar = g.TabBars.GetByIndex(n); | ||||
|                 PushID(tab_bar); | ||||
|                 DebugNodeTabBar(tab_bar, "TabBar"); | ||||
|                 PopID(); | ||||
| @@ -16382,10 +16382,11 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|     } | ||||
|  | ||||
|     // Details for Tables | ||||
|     if (TreeNode("Tables", "Tables (%d)", g.Tables.GetSize())) | ||||
|     if (TreeNode("Tables", "Tables (%d)", g.Tables.GetAliveCount())) | ||||
|     { | ||||
|         for (int n = 0; n < g.Tables.GetSize(); n++) | ||||
|             DebugNodeTable(g.Tables.GetByIndex(n)); | ||||
|         for (int n = 0; n < g.Tables.GetMapSize(); n++) | ||||
|             if (ImGuiTable* table = g.Tables.TryGetMapData(n)) | ||||
|                 DebugNodeTable(table); | ||||
|         TreePop(); | ||||
|     } | ||||
|  | ||||
| @@ -16555,10 +16556,10 @@ void ImGui::ShowMetricsWindow(bool* p_open) | ||||
|     // Overlay: Display Tables Rectangles | ||||
|     if (cfg->ShowTablesRects) | ||||
|     { | ||||
|         for (int table_n = 0; table_n < g.Tables.GetSize(); table_n++) | ||||
|         for (int table_n = 0; table_n < g.Tables.GetMapSize(); table_n++) | ||||
|         { | ||||
|             ImGuiTable* table = g.Tables.GetByIndex(table_n); | ||||
|             if (table->LastFrameActive < g.FrameCount - 1) | ||||
|             ImGuiTable* table = g.Tables.TryGetMapData(table_n); | ||||
|             if (table == NULL || table->LastFrameActive < g.FrameCount - 1) | ||||
|                 continue; | ||||
|             ImDrawList* draw_list = GetForegroundDrawList(table->OuterWindow); | ||||
|             if (cfg->ShowTablesRectsType >= TRT_ColumnsRect) | ||||
|   | ||||
							
								
								
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -62,7 +62,7 @@ Index of this file: | ||||
| // Version | ||||
| // (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens) | ||||
| #define IMGUI_VERSION               "1.84 WIP" | ||||
| #define IMGUI_VERSION_NUM           18302 | ||||
| #define IMGUI_VERSION_NUM           18304 | ||||
| #define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx)) | ||||
| #define IMGUI_HAS_TABLE | ||||
| #define IMGUI_HAS_VIEWPORT          // Viewport WIP branch | ||||
| @@ -92,12 +92,12 @@ Index of this file: | ||||
| #endif | ||||
|  | ||||
| // Helper Macros - IM_FMTARGS, IM_FMTLIST: Apply printf-style warnings to our formatting functions. | ||||
| #if !defined(IMGUI_USE_STB_SPRINTF) && defined(__clang__) | ||||
| #define IM_FMTARGS(FMT)             __attribute__((format(printf, FMT, FMT+1))) | ||||
| #define IM_FMTLIST(FMT)             __attribute__((format(printf, FMT, 0))) | ||||
| #elif !defined(IMGUI_USE_STB_SPRINTF) && defined(__GNUC__) && defined(__MINGW32__) | ||||
| #if !defined(IMGUI_USE_STB_SPRINTF) && defined(__MINGW32__) | ||||
| #define IM_FMTARGS(FMT)             __attribute__((format(gnu_printf, FMT, FMT+1))) | ||||
| #define IM_FMTLIST(FMT)             __attribute__((format(gnu_printf, FMT, 0))) | ||||
| #elif !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__)) | ||||
| #define IM_FMTARGS(FMT)             __attribute__((format(printf, FMT, FMT+1))) | ||||
| #define IM_FMTLIST(FMT)             __attribute__((format(printf, FMT, 0))) | ||||
| #else | ||||
| #define IM_FMTARGS(FMT) | ||||
| #define IM_FMTLIST(FMT) | ||||
|   | ||||
| @@ -624,20 +624,30 @@ struct IMGUI_API ImPool | ||||
|     ImVector<T>     Buf;        // Contiguous data | ||||
|     ImGuiStorage    Map;        // ID->Index | ||||
|     ImPoolIdx       FreeIdx;    // Next free idx to use | ||||
|     ImPoolIdx       AliveCount; // Number of active/alive items (for display purpose) | ||||
|  | ||||
|     ImPool()    { FreeIdx = 0; } | ||||
|     ImPool()    { FreeIdx = AliveCount = 0; } | ||||
|     ~ImPool()   { Clear(); } | ||||
|     T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; } | ||||
|     T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; } | ||||
|     ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); } | ||||
|     T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); } | ||||
|     bool        Contains(const T* p) const          { return (p >= Buf.Data && p < Buf.Data + Buf.Size); } | ||||
|     void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = 0; } | ||||
|     T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); return &Buf[idx]; } | ||||
|     void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = AliveCount = 0; } | ||||
|     T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); AliveCount++; return &Buf[idx]; } | ||||
|     void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p)); } | ||||
|     void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); } | ||||
|     void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; } | ||||
|     void        Reserve(int capacity)               { Buf.reserve(capacity); Map.Data.reserve(capacity); } | ||||
|     int         GetSize() const                     { return Buf.Size; } | ||||
|  | ||||
|     // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... } | ||||
|     // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize() | ||||
|     int         GetAliveCount() const               { return AliveCount; }      // Number of active/alive items in the pool (for display purpose) | ||||
|     int         GetBufSize() const                  { return Buf.Size; } | ||||
|     int         GetMapSize() const                  { return Map.Data.Size; }   // It is the map we need iterate to find valid items, since we don't have "alive" storage anywhere | ||||
|     T*          TryGetMapData(ImPoolIdx n)          { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); } | ||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||
|     int         GetSize()                           { return GetMapSize(); } // For ImPlot: should use GetMapSize() from (IMGUI_VERSION_NUM >= 18304) | ||||
| #endif | ||||
| }; | ||||
|  | ||||
| // Helper: ImChunkStream<> | ||||
| @@ -2168,7 +2178,7 @@ enum ImGuiTabItemFlagsPrivate_ | ||||
|     ImGuiTabItemFlags_Preview                   = 1 << 23   // [Docking] Display tab shape for docking preview (height is adjusted slightly to compensate for the yet missing tab bar) | ||||
| }; | ||||
|  | ||||
| // Storage for one active tab item (sizeof() 32~40 bytes) | ||||
| // Storage for one active tab item (sizeof() 48 bytes) | ||||
| struct ImGuiTabItem | ||||
| { | ||||
|     ImGuiID             ID; | ||||
| @@ -2179,12 +2189,12 @@ struct ImGuiTabItem | ||||
|     float               Offset;                 // Position relative to beginning of tab | ||||
|     float               Width;                  // Width currently displayed | ||||
|     float               ContentWidth;           // Width of label, stored during BeginTabItem() call | ||||
|     ImS16               NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames | ||||
|     ImS32               NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames | ||||
|     ImS16               BeginOrder;             // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable | ||||
|     ImS16               IndexDuringLayout;      // Index only used during TabBarLayout() | ||||
|     bool                WantClose;              // Marked as closed by SetTabItemClosed() | ||||
|  | ||||
|     ImGuiTabItem()      { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = BeginOrder = IndexDuringLayout = -1; } | ||||
|     ImGuiTabItem()      { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; } | ||||
| }; | ||||
|  | ||||
| // Storage for a tab bar (sizeof() 152 bytes) | ||||
| @@ -2228,7 +2238,7 @@ struct IMGUI_API ImGuiTabBar | ||||
|     { | ||||
|         if (tab->Window) | ||||
|             return tab->Window->Name; | ||||
|         IM_ASSERT(tab->NameOffset != -1 && (int)tab->NameOffset < TabsNames.Buf.Size); | ||||
|         IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size); | ||||
|         return TabsNames.Buf.Data + tab->NameOffset; | ||||
|     } | ||||
| }; | ||||
| @@ -2507,7 +2517,6 @@ namespace ImGui | ||||
|     IMGUI_API bool          IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent); | ||||
|     IMGUI_API bool          IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below); | ||||
|     IMGUI_API bool          IsWindowNavFocusable(ImGuiWindow* window); | ||||
|     IMGUI_API ImRect        GetWindowAllowedExtentRect(ImGuiWindow* window); | ||||
|     IMGUI_API void          SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0); | ||||
|     IMGUI_API void          SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0); | ||||
|     IMGUI_API void          SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0); | ||||
| @@ -2621,11 +2630,15 @@ namespace ImGui | ||||
|     IMGUI_API bool          IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags); | ||||
|     IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags); | ||||
|     IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags); | ||||
|     IMGUI_API ImRect        GetPopupAllowedExtentRect(ImGuiWindow* window); | ||||
|     IMGUI_API ImGuiWindow*  GetTopMostPopupModal(); | ||||
|     IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window); | ||||
|     IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy); | ||||
|     IMGUI_API bool          BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags); | ||||
|  | ||||
|     // Combos | ||||
|     IMGUI_API bool          BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags); | ||||
|  | ||||
|     // Gamepad/Keyboard Navigation | ||||
|     IMGUI_API void          NavInitWindow(ImGuiWindow* window, bool force_reinit); | ||||
|     IMGUI_API bool          NavMoveRequestButNoResultYet(); | ||||
|   | ||||
| @@ -3293,8 +3293,9 @@ void ImGui::TableLoadSettings(ImGuiTable* table) | ||||
| static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandler*) | ||||
| { | ||||
|     ImGuiContext& g = *ctx; | ||||
|     for (int i = 0; i != g.Tables.GetSize(); i++) | ||||
|         g.Tables.GetByIndex(i)->SettingsOffset = -1; | ||||
|     for (int i = 0; i != g.Tables.GetMapSize(); i++) | ||||
|         if (ImGuiTable* table = g.Tables.TryGetMapData(i)) | ||||
|             table->SettingsOffset = -1; | ||||
|     g.SettingsTables.clear(); | ||||
| } | ||||
|  | ||||
| @@ -3302,9 +3303,9 @@ static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandle | ||||
| static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*) | ||||
| { | ||||
|     ImGuiContext& g = *ctx; | ||||
|     for (int i = 0; i != g.Tables.GetSize(); i++) | ||||
|     for (int i = 0; i != g.Tables.GetMapSize(); i++) | ||||
|         if (ImGuiTable* table = g.Tables.TryGetMapData(i)) | ||||
|         { | ||||
|         ImGuiTable* table = g.Tables.GetByIndex(i); | ||||
|             table->IsSettingsRequestLoad = true; | ||||
|             table->SettingsOffset = -1; | ||||
|         } | ||||
|   | ||||
| @@ -1543,7 +1543,9 @@ void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_exc | ||||
| //------------------------------------------------------------------------- | ||||
| // [SECTION] Widgets: ComboBox | ||||
| //------------------------------------------------------------------------- | ||||
| // - CalcMaxPopupHeightFromItemCount() [Internal] | ||||
| // - BeginCombo() | ||||
| // - BeginComboPopup() [Internal] | ||||
| // - EndCombo() | ||||
| // - Combo() | ||||
| //------------------------------------------------------------------------- | ||||
| @@ -1558,74 +1560,84 @@ static float CalcMaxPopupHeightFromItemCount(int items_count) | ||||
|  | ||||
| bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags) | ||||
| { | ||||
|     // Always consume the SetNextWindowSizeConstraint() call in our early return paths | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     bool has_window_size_constraint = (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) != 0; | ||||
|     g.NextWindowData.Flags &= ~ImGuiNextWindowDataFlags_HasSizeConstraint; | ||||
|  | ||||
|     ImGuiWindow* window = GetCurrentWindow(); | ||||
|  | ||||
|     ImGuiNextWindowDataFlags backup_next_window_data_flags = g.NextWindowData.Flags; | ||||
|     g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values | ||||
|     if (window->SkipItems) | ||||
|         return false; | ||||
|  | ||||
|     IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together | ||||
|  | ||||
|     const ImGuiStyle& style = g.Style; | ||||
|     const ImGuiID id = window->GetID(label); | ||||
|     IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together | ||||
|  | ||||
|     const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); | ||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||
|     const float expected_w = CalcItemWidth(); | ||||
|     const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; | ||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f)); | ||||
|     const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); | ||||
|     const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : CalcItemWidth(); | ||||
|     const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f)); | ||||
|     const ImRect total_bb(bb.Min, bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); | ||||
|     ItemSize(total_bb, style.FramePadding.y); | ||||
|     if (!ItemAdd(total_bb, id, &frame_bb)) | ||||
|     if (!ItemAdd(total_bb, id, &bb)) | ||||
|         return false; | ||||
|  | ||||
|     // Open on click | ||||
|     bool hovered, held; | ||||
|     bool pressed = ButtonBehavior(frame_bb, id, &hovered, &held); | ||||
|  | ||||
|     bool pressed = ButtonBehavior(bb, id, &hovered, &held); | ||||
|     const ImGuiID popup_id = ImHashStr("##ComboPopup", 0, id); | ||||
|     bool popup_open = IsPopupOpen(popup_id, ImGuiPopupFlags_None); | ||||
|  | ||||
|     const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); | ||||
|     const float value_x2 = ImMax(frame_bb.Min.x, frame_bb.Max.x - arrow_size); | ||||
|     RenderNavHighlight(frame_bb, id); | ||||
|     if (!(flags & ImGuiComboFlags_NoPreview)) | ||||
|         window->DrawList->AddRectFilled(frame_bb.Min, ImVec2(value_x2, frame_bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersLeft); | ||||
|     if (!(flags & ImGuiComboFlags_NoArrowButton)) | ||||
|     { | ||||
|         ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button); | ||||
|         ImU32 text_col = GetColorU32(ImGuiCol_Text); | ||||
|         window->DrawList->AddRectFilled(ImVec2(value_x2, frame_bb.Min.y), frame_bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersRight); | ||||
|         if (value_x2 + arrow_size - style.FramePadding.x <= frame_bb.Max.x) | ||||
|             RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f); | ||||
|     } | ||||
|     RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding); | ||||
|     if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview)) | ||||
|     { | ||||
|         ImVec2 preview_pos = frame_bb.Min + style.FramePadding; | ||||
|         if (g.LogEnabled) | ||||
|             LogSetNextTextDecoration("{", "}"); | ||||
|         RenderTextClipped(preview_pos, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f, 0.0f)); | ||||
|     } | ||||
|     if (label_size.x > 0) | ||||
|         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); | ||||
|  | ||||
|     if ((pressed || g.NavActivateId == id) && !popup_open) | ||||
|     { | ||||
|         if (window->DC.NavLayerCurrent == 0) | ||||
|             window->NavLastIds[0] = id; | ||||
|         OpenPopupEx(popup_id, ImGuiPopupFlags_None); | ||||
|         popup_open = true; | ||||
|     } | ||||
|  | ||||
|     // Render shape | ||||
|     const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg); | ||||
|     const float value_x2 = ImMax(bb.Min.x, bb.Max.x - arrow_size); | ||||
|     RenderNavHighlight(bb, id); | ||||
|     if (!(flags & ImGuiComboFlags_NoPreview)) | ||||
|         window->DrawList->AddRectFilled(bb.Min, ImVec2(value_x2, bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersLeft); | ||||
|     if (!(flags & ImGuiComboFlags_NoArrowButton)) | ||||
|     { | ||||
|         ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button); | ||||
|         ImU32 text_col = GetColorU32(ImGuiCol_Text); | ||||
|         window->DrawList->AddRectFilled(ImVec2(value_x2, bb.Min.y), bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersRight); | ||||
|         if (value_x2 + arrow_size - style.FramePadding.x <= bb.Max.x) | ||||
|             RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f); | ||||
|     } | ||||
|     RenderFrameBorder(bb.Min, bb.Max, style.FrameRounding); | ||||
|  | ||||
|     // Render preview and label | ||||
|     if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview)) | ||||
|     { | ||||
|         if (g.LogEnabled) | ||||
|             LogSetNextTextDecoration("{", "}"); | ||||
|         RenderTextClipped(bb.Min + style.FramePadding, ImVec2(value_x2, bb.Max.y), preview_value, NULL, NULL); | ||||
|     } | ||||
|     if (label_size.x > 0) | ||||
|         RenderText(ImVec2(bb.Max.x + style.ItemInnerSpacing.x, bb.Min.y + style.FramePadding.y), label); | ||||
|  | ||||
|     if (!popup_open) | ||||
|         return false; | ||||
|  | ||||
|     if (has_window_size_constraint) | ||||
|     g.NextWindowData.Flags = backup_next_window_data_flags; | ||||
|     return BeginComboPopup(popup_id, bb, flags); | ||||
| } | ||||
|  | ||||
| bool ImGui::BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     if (!IsPopupOpen(popup_id, ImGuiPopupFlags_None)) | ||||
|     { | ||||
|         g.NextWindowData.ClearFlags(); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     // Set popup size | ||||
|     float w = bb.GetWidth(); | ||||
|     if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint) | ||||
|     { | ||||
|         g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint; | ||||
|         g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w); | ||||
|     } | ||||
|     else | ||||
| @@ -1640,30 +1652,27 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF | ||||
|         SetNextWindowSizeConstraints(ImVec2(w, 0.0f), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items))); | ||||
|     } | ||||
|  | ||||
|     // This is essentially a specialized version of BeginPopupEx() | ||||
|     char name[16]; | ||||
|     ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth | ||||
|  | ||||
|     // Position the window given a custom constraint (peak into expected window size so we can position it) | ||||
|     // This might be easier to express with an hypothetical SetNextWindowPosConstraints() function. | ||||
|     // Set position given a custom constraint (peak into expected window size so we can position it) | ||||
|     // FIXME: This might be easier to express with an hypothetical SetNextWindowPosConstraints() function? | ||||
|     // FIXME: This might be moved to Begin() or at least around the same spot where Tooltips and other Popups are calling FindBestWindowPosForPopupEx()? | ||||
|     if (ImGuiWindow* popup_window = FindWindowByName(name)) | ||||
|         if (popup_window->WasActive) | ||||
|         { | ||||
|             // Always override 'AutoPosLastDirection' to not leave a chance for a past value to affect us. | ||||
|             ImVec2 size_expected = CalcWindowNextAutoFitSize(popup_window); | ||||
|             if (flags & ImGuiComboFlags_PopupAlignLeft) | ||||
|                 popup_window->AutoPosLastDirection = ImGuiDir_Left; // "Below, Toward Left" | ||||
|             else | ||||
|                 popup_window->AutoPosLastDirection = ImGuiDir_Down; // "Below, Toward Right (default)" | ||||
|             ImRect r_outer = GetWindowAllowedExtentRect(popup_window); | ||||
|             ImVec2 pos = FindBestWindowPosForPopupEx(frame_bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, frame_bb, ImGuiPopupPositionPolicy_ComboBox); | ||||
|             popup_window->AutoPosLastDirection = (flags & ImGuiComboFlags_PopupAlignLeft) ? ImGuiDir_Left : ImGuiDir_Down; // Left = "Below, Toward Left", Down = "Below, Toward Right (default)" | ||||
|             ImRect r_outer = GetPopupAllowedExtentRect(popup_window); | ||||
|             ImVec2 pos = FindBestWindowPosForPopupEx(bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, bb, ImGuiPopupPositionPolicy_ComboBox); | ||||
|             SetNextWindowPos(pos); | ||||
|         } | ||||
|  | ||||
|     // We don't use BeginPopupEx() solely because we have a custom name string, which we could make an argument to BeginPopupEx() | ||||
|     ImGuiWindowFlags window_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove; | ||||
|  | ||||
|     // Horizontally align ourselves with the framed text | ||||
|     PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(style.FramePadding.x, style.WindowPadding.y)); | ||||
|     PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(g.Style.FramePadding.x, g.Style.WindowPadding.y)); // Horizontally align ourselves with the framed text | ||||
|     bool ret = Begin(name, NULL, window_flags); | ||||
|     PopStyleVar(); | ||||
|     if (!ret) | ||||
| @@ -7837,7 +7846,7 @@ bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, | ||||
|     else | ||||
|     { | ||||
|         IM_ASSERT(tab->Window == NULL); | ||||
|         tab->NameOffset = (ImS16)tab_bar->TabsNames.size(); | ||||
|         tab->NameOffset = (ImS32)tab_bar->TabsNames.size(); | ||||
|         tab_bar->TabsNames.append(label, label + strlen(label) + 1); // Append name _with_ the zero-terminator. | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ocornut
					ocornut