mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Merge branch 'master' into viewport
This commit is contained in:
		| @@ -66,6 +66,8 @@ Other Changes: | |||||||
|   introduced in 1.50 and broken in 1.60. (#1698, #894, #713). |   introduced in 1.50 and broken in 1.60. (#1698, #894, #713). | ||||||
| - TextUnformatted(): Fixed a case where large-text path would read bytes past the text_end marker depending | - TextUnformatted(): Fixed a case where large-text path would read bytes past the text_end marker depending | ||||||
|   on the position of new lines in the buffer (it wasn't affecting the output but still not the right thing to do!)  |   on the position of new lines in the buffer (it wasn't affecting the output but still not the right thing to do!)  | ||||||
|  | - ListBox(): Fixed frame sizing when items_count==1 unnecessarily showing a scrollbar. (#2173) [@luk1337, @ocornut]   | ||||||
|  | - ListBox(): Tweaked frame sizing so list boxes will look more consistent when FramePadding is far from ItemSpacing.  | ||||||
| - RenderText(): Some optimization for very large text buffers, useful for non-optimized builds. | - RenderText(): Some optimization for very large text buffers, useful for non-optimized builds. | ||||||
| - BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f. | - BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f. | ||||||
| - ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different. | - ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different. | ||||||
| @@ -76,6 +78,7 @@ Other Changes: | |||||||
|   in particular, points_count==0 could lead to a memory stomp if the draw list was previously empty. |   in particular, points_count==0 could lead to a memory stomp if the draw list was previously empty. | ||||||
| - Examples: DirectX10, DirectX11: Removed seemingly unnecessary calls to invalidate and recreate device objects | - Examples: DirectX10, DirectX11: Removed seemingly unnecessary calls to invalidate and recreate device objects | ||||||
|   in the WM_SIZE handler. (#2088) [@ice1000] |   in the WM_SIZE handler. (#2088) [@ice1000] | ||||||
|  | - Examples: OpenGL3+GLFW: Fixed error condition when using the GLAD loader. (#2157) [@blackball] | ||||||
|  |  | ||||||
|  |  | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
| @@ -99,7 +102,7 @@ Other Changes: | |||||||
|   Although it is not perfect and will keep being improved, it is fairly functional and used by many. (#787) |   Although it is not perfect and will keep being improved, it is fairly functional and used by many. (#787) | ||||||
| - Fixed a build issue with non-Cygwin GCC under Windows. | - Fixed a build issue with non-Cygwin GCC under Windows. | ||||||
| - Demo: Added a "Configuration" block to make io.ConfigFlags/io.BackendFlags more prominent. | - Demo: Added a "Configuration" block to make io.ConfigFlags/io.BackendFlags more prominent. | ||||||
| - Examples: OpenGL3: Fixed error condition when using the GLAD loader. (#2059, #2002) [@jiri] | - Examples: OpenGL3+SDL2: Fixed error condition when using the GLAD loader. (#2059, #2002) [@jiri] | ||||||
|  |  | ||||||
|  |  | ||||||
| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ||||||
|   | |||||||
| @@ -12,6 +12,13 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <GLFW/glfw3.h> | #include <GLFW/glfw3.h> | ||||||
|  |  | ||||||
|  | // [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. | ||||||
|  | // To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma.  | ||||||
|  | // Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. | ||||||
|  | #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) | ||||||
|  | #pragma comment(lib, "legacy_stdio_definitions") | ||||||
|  | #endif | ||||||
|  |  | ||||||
| static void glfw_error_callback(int error, const char* description) | static void glfw_error_callback(int error, const char* description) | ||||||
| { | { | ||||||
|     fprintf(stderr, "Glfw Error %d: %s\n", error, description); |     fprintf(stderr, "Glfw Error %d: %s\n", error, description); | ||||||
|   | |||||||
| @@ -20,7 +20,15 @@ | |||||||
| #include IMGUI_IMPL_OPENGL_LOADER_CUSTOM | #include IMGUI_IMPL_OPENGL_LOADER_CUSTOM | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #include <GLFW/glfw3.h> // Include glfw3.h after our OpenGL definitions | // Include glfw3.h after our OpenGL definitions | ||||||
|  | #include <GLFW/glfw3.h>  | ||||||
|  |  | ||||||
|  | // [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. | ||||||
|  | // To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma.  | ||||||
|  | // Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. | ||||||
|  | #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) | ||||||
|  | #pragma comment(lib, "legacy_stdio_definitions") | ||||||
|  | #endif | ||||||
|  |  | ||||||
| static void glfw_error_callback(int error, const char* description) | static void glfw_error_callback(int error, const char* description) | ||||||
| { | { | ||||||
| @@ -64,7 +72,7 @@ int main(int, char**) | |||||||
| #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) | #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLEW) | ||||||
|     bool err = glewInit() != GLEW_OK; |     bool err = glewInit() != GLEW_OK; | ||||||
| #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) | #elif defined(IMGUI_IMPL_OPENGL_LOADER_GLAD) | ||||||
|     bool err = gladLoadGL() != 0; |     bool err = gladLoadGL() == 0; | ||||||
| #endif | #endif | ||||||
|     if (err) |     if (err) | ||||||
|     { |     { | ||||||
|   | |||||||
| @@ -11,6 +11,13 @@ | |||||||
| #include <GLFW/glfw3.h> | #include <GLFW/glfw3.h> | ||||||
| #include <vulkan/vulkan.h> | #include <vulkan/vulkan.h> | ||||||
|  |  | ||||||
|  | // [Win32] Our example includes a copy of glfw3.lib pre-compiled with VS2010 to maximize ease of testing and compatibility with old VS compilers. | ||||||
|  | // To link with VS2010-era libraries, VS2015+ requires linking with legacy_stdio_definitions.lib, which we do using this pragma.  | ||||||
|  | // Your own project should not be affected, as you are likely to link with a newer binary of GLFW that is adequate for your version of Visual Studio. | ||||||
|  | #if defined(_MSC_VER) && (_MSC_VER >= 1900) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) | ||||||
|  | #pragma comment(lib, "legacy_stdio_definitions") | ||||||
|  | #endif | ||||||
|  |  | ||||||
| //#define IMGUI_UNLIMITED_FRAME_RATE | //#define IMGUI_UNLIMITED_FRAME_RATE | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
| #define IMGUI_VULKAN_DEBUG_REPORT | #define IMGUI_VULKAN_DEBUG_REPORT | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| struct ID3D10Device; | struct ID3D10Device; | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplDX10_Init(ID3D10Device* device); | IMGUI_IMPL_API bool     ImGui_ImplDX10_Init(ID3D10Device* device); | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| struct ID3D11Device; | struct ID3D11Device; | ||||||
| struct ID3D11DeviceContext; | struct ID3D11DeviceContext; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,6 +10,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| enum DXGI_FORMAT; | enum DXGI_FORMAT; | ||||||
| struct ID3D12Device; | struct ID3D12Device; | ||||||
| struct ID3D12GraphicsCommandList; | struct ID3D12GraphicsCommandList; | ||||||
|   | |||||||
| @@ -8,6 +8,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| struct IDirect3DDevice9; | struct IDirect3DDevice9; | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplDX9_Init(IDirect3DDevice9* device); | IMGUI_IMPL_API bool     ImGui_ImplDX9_Init(IDirect3DDevice9* device); | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplFreeGLUT_Init(); | IMGUI_IMPL_API bool     ImGui_ImplFreeGLUT_Init(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplFreeGLUT_InstallFuncs(); | IMGUI_IMPL_API void     ImGui_ImplFreeGLUT_InstallFuncs(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplFreeGLUT_Shutdown(); | IMGUI_IMPL_API void     ImGui_ImplFreeGLUT_Shutdown(); | ||||||
|   | |||||||
| @@ -548,7 +548,7 @@ static void ImGui_ImplGlfw_SwapBuffers(ImGuiViewport* viewport, void*) | |||||||
| //-------------------------------------------------------------------------------------------------------- | //-------------------------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| // We provide a Win32 implementation because this is such a common issue for IME users | // We provide a Win32 implementation because this is such a common issue for IME users | ||||||
| #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(__GNUC__) | #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(__GNUC__) | ||||||
| #define HAS_WIN32_IME   1 | #define HAS_WIN32_IME   1 | ||||||
| #include <imm.h> | #include <imm.h> | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ | |||||||
| // The 'glsl_version' initialization parameter defaults to "#version 150" if NULL. | // The 'glsl_version' initialization parameter defaults to "#version 150" if NULL. | ||||||
| // Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure! | // Only override if your GL version doesn't handle this GLSL version. Keep NULL if unsure! | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| struct GLFWwindow; | struct GLFWwindow; | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks); | IMGUI_IMPL_API bool     ImGui_ImplGlfw_InitForOpenGL(GLFWwindow* window, bool install_callbacks); | ||||||
|   | |||||||
| @@ -8,6 +8,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_Marmalade_Init(bool install_callbacks); | IMGUI_IMPL_API bool     ImGui_Marmalade_Init(bool install_callbacks); | ||||||
| IMGUI_IMPL_API void     ImGui_Marmalade_Shutdown(); | IMGUI_IMPL_API void     ImGui_Marmalade_Shutdown(); | ||||||
| IMGUI_IMPL_API void     ImGui_Marmalade_NewFrame(); | IMGUI_IMPL_API void     ImGui_Marmalade_NewFrame(); | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ | |||||||
| // confuse your GPU driver.  | // confuse your GPU driver.  | ||||||
| // The GL2 code is unable to reset attributes or even call e.g. "glUseProgram(0)" because they don't exist in that API. | // The GL2 code is unable to reset attributes or even call e.g. "glUseProgram(0)" because they don't exist in that API. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplOpenGL2_Init(); | IMGUI_IMPL_API bool     ImGui_ImplOpenGL2_Init(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplOpenGL2_Shutdown(); | IMGUI_IMPL_API void     ImGui_ImplOpenGL2_Shutdown(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplOpenGL2_NewFrame(); | IMGUI_IMPL_API void     ImGui_ImplOpenGL2_NewFrame(); | ||||||
|   | |||||||
| @@ -20,6 +20,8 @@ | |||||||
| // On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" | // On computer platform the GLSL version default to "#version 130". On OpenGL ES 3 platform it defaults to "#version 300 es" | ||||||
| // Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. | // Only override if your GL version doesn't handle this GLSL version. See GLSL version table at the top of imgui_impl_opengl3.cpp. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| // Set default OpenGL loader to be gl3w | // Set default OpenGL loader to be gl3w | ||||||
| #if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)     \ | #if !defined(IMGUI_IMPL_OPENGL_LOADER_GL3W)     \ | ||||||
|  && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)     \ |  && !defined(IMGUI_IMPL_OPENGL_LOADER_GLEW)     \ | ||||||
|   | |||||||
| @@ -15,6 +15,8 @@ | |||||||
| // If you are new to dear imgui, read examples/README.txt and read the documentation at the top of imgui.cpp. | // 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 | // https://github.com/ocornut/imgui | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| struct SDL_Window; | struct SDL_Window; | ||||||
| typedef union SDL_Event SDL_Event; | typedef union SDL_Event SDL_Event; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -852,6 +852,7 @@ VkPresentModeKHR ImGui_ImplVulkanH_SelectPresentMode(VkPhysicalDevice physical_d | |||||||
| void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator) | void ImGui_ImplVulkanH_CreateWindowDataCommandBuffers(VkPhysicalDevice physical_device, VkDevice device, uint32_t queue_family, ImGui_ImplVulkanH_WindowData* wd, const VkAllocationCallbacks* allocator) | ||||||
| { | { | ||||||
|     IM_ASSERT(physical_device != VK_NULL_HANDLE && device != VK_NULL_HANDLE); |     IM_ASSERT(physical_device != VK_NULL_HANDLE && device != VK_NULL_HANDLE); | ||||||
|  |     (void)physical_device; | ||||||
|     (void)allocator; |     (void)allocator; | ||||||
|  |  | ||||||
|     // Create Command Buffers |     // Create Command Buffers | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ | |||||||
| // The aim of imgui_impl_vulkan.h/.cpp is to be usable in your engine without any modification.  | // The aim of imgui_impl_vulkan.h/.cpp is to be usable in your engine without any modification.  | ||||||
| // IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/ | // IF YOU FEEL YOU NEED TO MAKE ANY CHANGE TO THIS CODE, please share them and your feedback at https://github.com/ocornut/imgui/ | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| #include <vulkan/vulkan.h> | #include <vulkan/vulkan.h> | ||||||
|  |  | ||||||
| #define IMGUI_VK_QUEUED_FRAMES      2 | #define IMGUI_VK_QUEUED_FRAMES      2 | ||||||
|   | |||||||
| @@ -387,7 +387,7 @@ float ImGui_ImplWin32_GetDpiScaleForRect(int x1, int y1, int x2, int y2) | |||||||
| // IME (Input Method Editor) basic support for e.g. Asian language users | // IME (Input Method Editor) basic support for e.g. Asian language users | ||||||
| //-------------------------------------------------------------------------------------------------------- | //-------------------------------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(__GNUC__) | #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(__GNUC__) | ||||||
| #define HAS_WIN32_IME   1 | #define HAS_WIN32_IME   1 | ||||||
| #include <imm.h> | #include <imm.h> | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
|   | |||||||
| @@ -9,6 +9,8 @@ | |||||||
| // Missing features: | // Missing features: | ||||||
| //  [ ] Platform: Gamepad support (best leaving it to user application to fill io.NavInputs[] with gamepad inputs from their source of choice). | //  [ ] Platform: Gamepad support (best leaving it to user application to fill io.NavInputs[] with gamepad inputs from their source of choice). | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplWin32_Init(void* hwnd); | IMGUI_IMPL_API bool     ImGui_ImplWin32_Init(void* hwnd); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplWin32_Shutdown(); | IMGUI_IMPL_API void     ImGui_ImplWin32_Shutdown(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplWin32_NewFrame(); | IMGUI_IMPL_API void     ImGui_ImplWin32_NewFrame(); | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ | |||||||
| //---- Don't implement some functions to reduce linkage requirements. | //---- Don't implement some functions to reduce linkage requirements. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | //#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS   // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. | ||||||
| //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | //#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS         // [Win32] Don't implement default IME handler. Won't use and link with ImmGetContext/ImmSetCompositionWindow. | ||||||
|  | //#define IMGUI_DISABLE_WIN32_FUNCTIONS                     // [Win32] Won't use and link with any Win32 function. | ||||||
| //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf. | //#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS             // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself if you don't want to link with vsnprintf. | ||||||
| //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h. | //#define IMGUI_DISABLE_MATH_FUNCTIONS                      // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 wrapper so you can implement them yourself. Declare your prototypes in imconfig.h. | ||||||
| //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). | //#define IMGUI_DISABLE_DEFAULT_ALLOCATORS                  // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions(). | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -787,15 +787,15 @@ CODE | |||||||
|       config.OversampleV = 1; |       config.OversampleV = 1; | ||||||
|       config.GlyphOffset.y -= 2.0f;      // Move everything by 2 pixels up |       config.GlyphOffset.y -= 2.0f;      // Move everything by 2 pixels up | ||||||
|       config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters |       config.GlyphExtraSpacing.x = 1.0f; // Increase spacing between characters | ||||||
|       io.Fonts->LoadFromFileTTF("myfontfile.ttf", size_pixels, &config); |       io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, &config); | ||||||
|  |  | ||||||
|       // Combine multiple fonts into one (e.g. for icon fonts) |       // Combine multiple fonts into one (e.g. for icon fonts) | ||||||
|       static ImWchar ranges[] = { 0xf000, 0xf3ff, 0 }; |       static ImWchar ranges[] = { 0xf000, 0xf3ff, 0 }; | ||||||
|       ImFontConfig config; |       ImFontConfig config; | ||||||
|       config.MergeMode = true; |       config.MergeMode = true; | ||||||
|       io.Fonts->AddFontDefault(); |       io.Fonts->AddFontDefault(); | ||||||
|       io.Fonts->LoadFromFileTTF("fontawesome-webfont.ttf", 16.0f, &config, ranges); // Merge icon font |       io.Fonts->AddFontFromFileTTF("fontawesome-webfont.ttf", 16.0f, &config, ranges); // Merge icon font | ||||||
|       io.Fonts->LoadFromFileTTF("myfontfile.ttf", size_pixels, NULL, &config, io.Fonts->GetGlyphRangesJapanese()); // Merge japanese glyphs |       io.Fonts->AddFontFromFileTTF("myfontfile.ttf", size_pixels, NULL, &config, io.Fonts->GetGlyphRangesJapanese()); // Merge japanese glyphs | ||||||
|  |  | ||||||
|  Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic? |  Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic? | ||||||
|  A: When loading a font, pass custom Unicode ranges to specify the glyphs to load. |  A: When loading a font, pass custom Unicode ranges to specify the glyphs to load. | ||||||
| @@ -9769,7 +9769,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting | |||||||
| // [SECTION] PLATFORM DEPENDENT HELPERS | // [SECTION] PLATFORM DEPENDENT HELPERS | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| #if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)) | #if defined(_WIN32) && !defined(_WINDOWS_) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)) | ||||||
| #ifndef WIN32_LEAN_AND_MEAN | #ifndef WIN32_LEAN_AND_MEAN | ||||||
| #define WIN32_LEAN_AND_MEAN | #define WIN32_LEAN_AND_MEAN | ||||||
| #endif | #endif | ||||||
| @@ -9781,7 +9781,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Win32 API clipboard implementation | // Win32 API clipboard implementation | ||||||
| #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) | #if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| #pragma comment(lib, "user32") | #pragma comment(lib, "user32") | ||||||
|   | |||||||
| @@ -706,7 +706,7 @@ static void ShowDemoWindowWidgets() | |||||||
|             //   Instead we are encoding a few strings with hexadecimal constants. Don't do this in your application! |             //   Instead we are encoding a few strings with hexadecimal constants. Don't do this in your application! | ||||||
|             //   Please use u8"text in any language" in your application! |             //   Please use u8"text in any language" in your application! | ||||||
|             // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. |             // Note that characters values are preserved even by InputText() if the font cannot be displayed, so you can safely copy & paste garbled characters into another application. | ||||||
|             ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->LoadFromFileTTF() manually to load extra character ranges. Read misc/fonts/README.txt for details."); |             ImGui::TextWrapped("CJK text will only appears if the font was loaded with the appropriate CJK character ranges. Call io.Font->AddFontFromFileTTF() manually to load extra character ranges. Read misc/fonts/README.txt for details."); | ||||||
|             ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string. |             ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string. | ||||||
|             ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); |             ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)"); | ||||||
|             static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; |             static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"; | ||||||
|   | |||||||
| @@ -1881,7 +1881,10 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) |     if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) | ||||||
|  |     { | ||||||
|  |         FocusableItemUnregister(window); | ||||||
|         return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format); |         return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     // Actual drag behavior |     // Actual drag behavior | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
| @@ -2312,7 +2315,10 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) |     if (start_text_input || (g.ActiveId == id && g.ScalarAsInputTextId == id)) | ||||||
|  |     { | ||||||
|  |         FocusableItemUnregister(window); | ||||||
|         return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format); |         return InputScalarAsWidgetReplacement(frame_bb, id, label, data_type, v, format); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
|  |  | ||||||
| @@ -2583,8 +2589,8 @@ int ImParseFormatPrecision(const char* fmt, int default_precision) | |||||||
|     return (precision == INT_MAX) ? default_precision : precision; |     return (precision == INT_MAX) ? default_precision : precision; | ||||||
| } | } | ||||||
|  |  | ||||||
| // Create text input in place of a slider (when CTRL+Clicking on slider) | // Create text input in place of an active drag/slider (used when doing a CTRL+Click on drag/slider widgets) | ||||||
| // FIXME: Logic is messy and confusing. | // FIXME: Logic is awkward and confusing. This should be reworked to facilitate using in other situations. | ||||||
| bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format) | bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
| @@ -2593,9 +2599,8 @@ bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const c | |||||||
|     // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen) |     // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen) | ||||||
|     // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id |     // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id | ||||||
|     SetActiveID(g.ScalarAsInputTextId, window); |     SetActiveID(g.ScalarAsInputTextId, window); | ||||||
|     g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down); |  | ||||||
|     SetHoveredID(0); |     SetHoveredID(0); | ||||||
|     FocusableItemUnregister(window); |     g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down); | ||||||
|  |  | ||||||
|     char fmt_buf[32]; |     char fmt_buf[32]; | ||||||
|     char data_buf[32]; |     char data_buf[32]; | ||||||
| @@ -4969,7 +4974,7 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags | |||||||
| // - Selectable() | // - Selectable() | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| // Tip: pass an empty label (e.g. "##dummy") then you can use the space to draw other text or image. | // Tip: pass a non-visible label (e.g. "##dummy") then you can use the space to draw other text or image. | ||||||
| // But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id. | // But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id. | ||||||
| bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) | bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) | ||||||
| { | { | ||||||
| @@ -5080,9 +5085,9 @@ bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags | |||||||
| // - ListBoxFooter() | // - ListBoxFooter() | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
|  |  | ||||||
| // FIXME: Rename to BeginListBox() | // FIXME: In principle this function should be called BeginListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||||
| // Helper to calculate the size of a listbox and display a label on the right. | // Helper to calculate the size of a listbox and display a label on the right. | ||||||
| // Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an empty label "##empty" | // Tip: To have a list filling the entire window width, PushItemWidth(-1) and pass an non-visible label e.g. "##empty" | ||||||
| bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | ||||||
| { | { | ||||||
|     ImGuiWindow* window = GetCurrentWindow(); |     ImGuiWindow* window = GetCurrentWindow(); | ||||||
| @@ -5108,24 +5113,26 @@ bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) | |||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| // FIXME: Rename to BeginListBox() | // FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||||
| bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items) | bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items) | ||||||
| { | { | ||||||
|     // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. |     // Size default to hold ~7.25 items. | ||||||
|     // We don't add +0.40f if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size. |     // We add +25% worth of item height to allow the user to see at a glance if there are more items up/down, without looking at the scrollbar. | ||||||
|  |     // We don't add this extra bit if items_count <= height_in_items. It is slightly dodgy, because it means a dynamic list of items will make the widget resize occasionally when it crosses that size. | ||||||
|     // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution. |     // I am expecting that someone will come and complain about this behavior in a remote future, then we can advise on a better solution. | ||||||
|     if (height_in_items < 0) |     if (height_in_items < 0) | ||||||
|         height_in_items = ImMin(items_count, 7); |         height_in_items = ImMin(items_count, 7); | ||||||
|     float height_in_items_f = height_in_items < items_count ? (height_in_items + 0.40f) : (height_in_items + 0.00f); |     const ImGuiStyle& style = GetStyle(); | ||||||
|  |     float height_in_items_f = (height_in_items < items_count) ? (height_in_items + 0.25f) : (height_in_items + 0.00f); | ||||||
|  |  | ||||||
|     // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild(). |     // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild(). | ||||||
|     ImVec2 size; |     ImVec2 size; | ||||||
|     size.x = 0.0f; |     size.x = 0.0f; | ||||||
|     size.y = GetTextLineHeightWithSpacing() * height_in_items_f + GetStyle().ItemSpacing.y; |     size.y = GetTextLineHeightWithSpacing() * height_in_items_f + style.FramePadding.y * 2.0f; | ||||||
|     return ListBoxHeader(label, size); |     return ListBoxHeader(label, size); | ||||||
| } | } | ||||||
|  |  | ||||||
| // FIXME: Rename to EndListBox() | // FIXME: In principle this function should be called EndListBox(). We should rename it after re-evaluating if we want to keep the same signature. | ||||||
| void ImGui::ListBoxFooter() | void ImGui::ListBoxFooter() | ||||||
| { | { | ||||||
|     ImGuiWindow* parent_window = GetCurrentWindow()->ParentWindow; |     ImGuiWindow* parent_window = GetCurrentWindow()->ParentWindow; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user