mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Misc: Bunch of code formatting changes suggested by a pass running 'astyle'
This commit is contained in:
		| @@ -174,7 +174,7 @@ void ImGui_ImplAllegro5_RenderDrawData(ImDrawData* draw_data) | |||||||
| bool ImGui_ImplAllegro5_CreateDeviceObjects() | bool ImGui_ImplAllegro5_CreateDeviceObjects() | ||||||
| { | { | ||||||
|     // Build texture atlas |     // Build texture atlas | ||||||
|     ImGuiIO &io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     unsigned char* pixels; |     unsigned char* pixels; | ||||||
|     int width, height; |     int width, height; | ||||||
|     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); |     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); | ||||||
| @@ -182,7 +182,7 @@ bool ImGui_ImplAllegro5_CreateDeviceObjects() | |||||||
|     // Create texture |     // Create texture | ||||||
|     int flags = al_get_new_bitmap_flags(); |     int flags = al_get_new_bitmap_flags(); | ||||||
|     int fmt = al_get_new_bitmap_format(); |     int fmt = al_get_new_bitmap_format(); | ||||||
|     al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP|ALLEGRO_MIN_LINEAR|ALLEGRO_MAG_LINEAR); |     al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP | ALLEGRO_MIN_LINEAR | ALLEGRO_MAG_LINEAR); | ||||||
|     al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE); |     al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE); | ||||||
|     ALLEGRO_BITMAP* img = al_create_bitmap(width, height); |     ALLEGRO_BITMAP* img = al_create_bitmap(width, height); | ||||||
|     al_set_new_bitmap_flags(flags); |     al_set_new_bitmap_flags(flags); | ||||||
| @@ -190,13 +190,13 @@ bool ImGui_ImplAllegro5_CreateDeviceObjects() | |||||||
|     if (!img) |     if (!img) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|     ALLEGRO_LOCKED_REGION *locked_img = al_lock_bitmap(img, al_get_bitmap_format(img), ALLEGRO_LOCK_WRITEONLY); |     ALLEGRO_LOCKED_REGION* locked_img = al_lock_bitmap(img, al_get_bitmap_format(img), ALLEGRO_LOCK_WRITEONLY); | ||||||
|     if (!locked_img) |     if (!locked_img) | ||||||
|     { |     { | ||||||
|         al_destroy_bitmap(img); |         al_destroy_bitmap(img); | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|     memcpy(locked_img->data, pixels, sizeof(int)*width*height); |     memcpy(locked_img->data, pixels, sizeof(int) * width * height); | ||||||
|     al_unlock_bitmap(img); |     al_unlock_bitmap(img); | ||||||
|  |  | ||||||
|     // Convert software texture to hardware texture. |     // Convert software texture to hardware texture. | ||||||
| @@ -211,7 +211,7 @@ bool ImGui_ImplAllegro5_CreateDeviceObjects() | |||||||
|  |  | ||||||
|     // Create an invisible mouse cursor |     // Create an invisible mouse cursor | ||||||
|     // Because al_hide_mouse_cursor() seems to mess up with the actual inputs.. |     // Because al_hide_mouse_cursor() seems to mess up with the actual inputs.. | ||||||
|     ALLEGRO_BITMAP* mouse_cursor = al_create_bitmap(8,8); |     ALLEGRO_BITMAP* mouse_cursor = al_create_bitmap(8, 8); | ||||||
|     g_MouseCursorInvisible = al_create_mouse_cursor(mouse_cursor, 0, 0); |     g_MouseCursorInvisible = al_create_mouse_cursor(mouse_cursor, 0, 0); | ||||||
|     al_destroy_bitmap(mouse_cursor); |     al_destroy_bitmap(mouse_cursor); | ||||||
|  |  | ||||||
| @@ -322,7 +322,7 @@ void ImGui_ImplAllegro5_Shutdown() | |||||||
| // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. | // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. | ||||||
| // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. | // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. | ||||||
| // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. | // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. | ||||||
| bool ImGui_ImplAllegro5_ProcessEvent(ALLEGRO_EVENT *ev) | bool ImGui_ImplAllegro5_ProcessEvent(ALLEGRO_EVENT* ev) | ||||||
| { | { | ||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |  | ||||||
| @@ -403,7 +403,7 @@ void ImGui_ImplAllegro5_NewFrame() | |||||||
|     if (!g_Texture) |     if (!g_Texture) | ||||||
|         ImGui_ImplAllegro5_CreateDeviceObjects(); |         ImGui_ImplAllegro5_CreateDeviceObjects(); | ||||||
|  |  | ||||||
|     ImGuiIO &io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |  | ||||||
|     // Setup display size (every frame to accommodate for window resizing) |     // Setup display size (every frame to accommodate for window resizing) | ||||||
|     int w, h; |     int w, h; | ||||||
| @@ -413,7 +413,7 @@ void ImGui_ImplAllegro5_NewFrame() | |||||||
|  |  | ||||||
|     // Setup time step |     // Setup time step | ||||||
|     double current_time = al_get_time(); |     double current_time = al_get_time(); | ||||||
|     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); |     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f / 60.0f); | ||||||
|     g_Time = current_time; |     g_Time = current_time; | ||||||
|  |  | ||||||
|     // Setup inputs |     // Setup inputs | ||||||
|   | |||||||
| @@ -287,7 +287,7 @@ static void ImGui_ImplDX10_CreateFontsTexture() | |||||||
|         desc.BindFlags = D3D10_BIND_SHADER_RESOURCE; |         desc.BindFlags = D3D10_BIND_SHADER_RESOURCE; | ||||||
|         desc.CPUAccessFlags = 0; |         desc.CPUAccessFlags = 0; | ||||||
|  |  | ||||||
|         ID3D10Texture2D *pTexture = NULL; |         ID3D10Texture2D* pTexture = NULL; | ||||||
|         D3D10_SUBRESOURCE_DATA subResource; |         D3D10_SUBRESOURCE_DATA subResource; | ||||||
|         subResource.pSysMem = pixels; |         subResource.pSysMem = pixels; | ||||||
|         subResource.SysMemPitch = desc.Width * 4; |         subResource.SysMemPitch = desc.Width * 4; | ||||||
|   | |||||||
| @@ -299,7 +299,7 @@ static void ImGui_ImplDX11_CreateFontsTexture() | |||||||
|         desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; |         desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; | ||||||
|         desc.CPUAccessFlags = 0; |         desc.CPUAccessFlags = 0; | ||||||
|  |  | ||||||
|         ID3D11Texture2D *pTexture = NULL; |         ID3D11Texture2D* pTexture = NULL; | ||||||
|         D3D11_SUBRESOURCE_DATA subResource; |         D3D11_SUBRESOURCE_DATA subResource; | ||||||
|         subResource.pSysMem = pixels; |         subResource.pSysMem = pixels; | ||||||
|         subResource.SysMemPitch = desc.Width * 4; |         subResource.SysMemPitch = desc.Width * 4; | ||||||
|   | |||||||
| @@ -359,7 +359,7 @@ static void ImGui_ImplDX12_CreateFontsTexture() | |||||||
|         hr = cmdList->Close(); |         hr = cmdList->Close(); | ||||||
|         IM_ASSERT(SUCCEEDED(hr)); |         IM_ASSERT(SUCCEEDED(hr)); | ||||||
|  |  | ||||||
|         cmdQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*) &cmdList); |         cmdQueue->ExecuteCommandLists(1, (ID3D12CommandList* const*)&cmdList); | ||||||
|         hr = cmdQueue->Signal(fence, 1); |         hr = cmdQueue->Signal(fence, 1); | ||||||
|         IM_ASSERT(SUCCEEDED(hr)); |         IM_ASSERT(SUCCEEDED(hr)); | ||||||
|  |  | ||||||
| @@ -509,7 +509,8 @@ bool    ImGui_ImplDX12_CreateDeviceObjects() | |||||||
|         psoDesc.VS = { vertexShaderBlob->GetBufferPointer(), vertexShaderBlob->GetBufferSize() }; |         psoDesc.VS = { vertexShaderBlob->GetBufferPointer(), vertexShaderBlob->GetBufferSize() }; | ||||||
|  |  | ||||||
|         // Create the input layout |         // Create the input layout | ||||||
|         static D3D12_INPUT_ELEMENT_DESC local_layout[] = { |         static D3D12_INPUT_ELEMENT_DESC local_layout[] = | ||||||
|  |         { | ||||||
|             { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT,   0, (UINT)IM_OFFSETOF(ImDrawVert, pos), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, |             { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT,   0, (UINT)IM_OFFSETOF(ImDrawVert, pos), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||||||
|             { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT,   0, (UINT)IM_OFFSETOF(ImDrawVert, uv),  D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, |             { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT,   0, (UINT)IM_OFFSETOF(ImDrawVert, uv),  D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||||||
|             { "COLOR",    0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (UINT)IM_OFFSETOF(ImDrawVert, col), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, |             { "COLOR",    0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, (UINT)IM_OFFSETOF(ImDrawVert, col), D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, | ||||||
|   | |||||||
| @@ -199,7 +199,7 @@ void ImGui_ImplDX9_RenderDrawData(ImDrawData* draw_data) | |||||||
|                 const LPDIRECT3DTEXTURE9 texture = (LPDIRECT3DTEXTURE9)pcmd->TextureId; |                 const LPDIRECT3DTEXTURE9 texture = (LPDIRECT3DTEXTURE9)pcmd->TextureId; | ||||||
|                 g_pd3dDevice->SetTexture(0, texture); |                 g_pd3dDevice->SetTexture(0, texture); | ||||||
|                 g_pd3dDevice->SetScissorRect(&r); |                 g_pd3dDevice->SetScissorRect(&r); | ||||||
|                 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, pcmd->VtxOffset + global_vtx_offset, 0, (UINT)cmd_list->VtxBuffer.Size, pcmd->IdxOffset + global_idx_offset, pcmd->ElemCount/3); |                 g_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, pcmd->VtxOffset + global_vtx_offset, 0, (UINT)cmd_list->VtxBuffer.Size, pcmd->IdxOffset + global_idx_offset, pcmd->ElemCount / 3); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         global_idx_offset += cmd_list->IdxBuffer.Size; |         global_idx_offset += cmd_list->IdxBuffer.Size; | ||||||
| @@ -250,7 +250,7 @@ static bool ImGui_ImplDX9_CreateFontsTexture() | |||||||
|     if (g_FontTexture->LockRect(0, &tex_locked_rect, NULL, 0) != D3D_OK) |     if (g_FontTexture->LockRect(0, &tex_locked_rect, NULL, 0) != D3D_OK) | ||||||
|         return false; |         return false; | ||||||
|     for (int y = 0; y < height; y++) |     for (int y = 0; y < height; y++) | ||||||
|         memcpy((unsigned char *)tex_locked_rect.pBits + tex_locked_rect.Pitch * y, pixels + (width * bytes_per_pixel) * y, (width * bytes_per_pixel)); |         memcpy((unsigned char*)tex_locked_rect.pBits + tex_locked_rect.Pitch * y, pixels + (width * bytes_per_pixel) * y, (width * bytes_per_pixel)); | ||||||
|     g_FontTexture->UnlockRect(0); |     g_FontTexture->UnlockRect(0); | ||||||
|  |  | ||||||
|     // Store our identifier |     // Store our identifier | ||||||
|   | |||||||
| @@ -358,7 +358,7 @@ void ImGui_ImplGlfw_NewFrame() | |||||||
|  |  | ||||||
|     // Setup time step |     // Setup time step | ||||||
|     double current_time = glfwGetTime(); |     double current_time = glfwGetTime(); | ||||||
|     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); |     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f / 60.0f); | ||||||
|     g_Time = current_time; |     g_Time = current_time; | ||||||
|  |  | ||||||
|     ImGui_ImplGlfw_UpdateMousePosAndButtons(); |     ImGui_ImplGlfw_UpdateMousePosAndButtons(); | ||||||
|   | |||||||
| @@ -25,9 +25,9 @@ | |||||||
| #include "imgui.h" | #include "imgui.h" | ||||||
| #include "imgui_impl_glut.h" | #include "imgui_impl_glut.h" | ||||||
| #ifdef __APPLE__ | #ifdef __APPLE__ | ||||||
|     #include <GLUT/glut.h> | #include <GLUT/glut.h> | ||||||
| #else | #else | ||||||
|     #include <GL/freeglut.h> | #include <GL/freeglut.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| @@ -41,9 +41,9 @@ bool ImGui_ImplGLUT_Init() | |||||||
|     ImGuiIO& io = ImGui::GetIO(); |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|  |  | ||||||
| #ifdef FREEGLUT | #ifdef FREEGLUT | ||||||
|     io.BackendPlatformName ="imgui_impl_glut (freeglut)"; |     io.BackendPlatformName = "imgui_impl_glut (freeglut)"; | ||||||
| #else | #else | ||||||
|     io.BackendPlatformName ="imgui_impl_glut"; |     io.BackendPlatformName = "imgui_impl_glut"; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     g_Time = 0; |     g_Time = 0; | ||||||
|   | |||||||
| @@ -36,7 +36,7 @@ static char*        g_ClipboardText = NULL; | |||||||
| static bool         g_osdKeyboardEnabled = false; | static bool         g_osdKeyboardEnabled = false; | ||||||
|  |  | ||||||
| // use this setting to scale the interface - e.g. on device you could use 2 or 3 scale factor | // use this setting to scale the interface - e.g. on device you could use 2 or 3 scale factor | ||||||
| static ImVec2       g_RenderScale = ImVec2(1.0f,1.0f); | static ImVec2       g_RenderScale = ImVec2(1.0f, 1.0f); | ||||||
|  |  | ||||||
| // Render function. | // Render function. | ||||||
| // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) | // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) | ||||||
| @@ -272,18 +272,18 @@ void ImGui_Marmalade_NewFrame() | |||||||
|     // Setup display size (every frame to accommodate for window resizing) |     // Setup display size (every frame to accommodate for window resizing) | ||||||
|     int w = IwGxGetScreenWidth(), h = IwGxGetScreenHeight(); |     int w = IwGxGetScreenWidth(), h = IwGxGetScreenHeight(); | ||||||
|     io.DisplaySize = ImVec2((float)w, (float)h); |     io.DisplaySize = ImVec2((float)w, (float)h); | ||||||
|      // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. |     // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. | ||||||
|     io.DisplayFramebufferScale = g_scale; |     io.DisplayFramebufferScale = g_scale; | ||||||
|  |  | ||||||
|     // Setup time step |     // Setup time step | ||||||
|     double current_time = s3eTimerGetUST() / 1000.0f; |     double current_time = s3eTimerGetUST() / 1000.0f; | ||||||
|     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); |     io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f / 60.0f); | ||||||
|     g_Time = current_time; |     g_Time = current_time; | ||||||
|  |  | ||||||
|     double mouse_x, mouse_y; |     double mouse_x, mouse_y; | ||||||
|     mouse_x = s3ePointerGetX(); |     mouse_x = s3ePointerGetX(); | ||||||
|     mouse_y = s3ePointerGetY(); |     mouse_y = s3ePointerGetY(); | ||||||
|     io.MousePos = ImVec2((float)mouse_x/g_scale.x, (float)mouse_y/g_scale.y);   // Mouse position (set to -FLT_MAX,-FLT_MAX if no mouse / on another screen, etc.) |     io.MousePos = ImVec2((float)mouse_x / g_scale.x, (float)mouse_y / g_scale.y); // Mouse position (set to -FLT_MAX,-FLT_MAX if no mouse / on another screen, etc.) | ||||||
|  |  | ||||||
|     for (int i = 0; i < 3; i++) |     for (int i = 0; i < 3; i++) | ||||||
|     { |     { | ||||||
| @@ -294,7 +294,7 @@ void ImGui_Marmalade_NewFrame() | |||||||
|     // TODO: Hide OS mouse cursor if ImGui is drawing it |     // TODO: Hide OS mouse cursor if ImGui is drawing it | ||||||
|     // s3ePointerSetInt(S3E_POINTER_HIDE_CURSOR,(io.MouseDrawCursor ? 0 : 1)); |     // s3ePointerSetInt(S3E_POINTER_HIDE_CURSOR,(io.MouseDrawCursor ? 0 : 1)); | ||||||
|  |  | ||||||
|      // Show/hide OSD keyboard |     // Show/hide OSD keyboard | ||||||
|     if (io.WantTextInput) |     if (io.WantTextInput) | ||||||
|     { |     { | ||||||
|         // Some text input widget is active? |         // Some text input widget is active? | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ | |||||||
|  |  | ||||||
| IMGUI_IMPL_API bool ImGui_ImplMetal_Init(id<MTLDevice> device); | IMGUI_IMPL_API bool ImGui_ImplMetal_Init(id<MTLDevice> device); | ||||||
| IMGUI_IMPL_API void ImGui_ImplMetal_Shutdown(); | IMGUI_IMPL_API void ImGui_ImplMetal_Shutdown(); | ||||||
| IMGUI_IMPL_API void ImGui_ImplMetal_NewFrame(MTLRenderPassDescriptor *renderPassDescriptor); | IMGUI_IMPL_API void ImGui_ImplMetal_NewFrame(MTLRenderPassDescriptor* renderPassDescriptor); | ||||||
| IMGUI_IMPL_API void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data, | IMGUI_IMPL_API void ImGui_ImplMetal_RenderDrawData(ImDrawData* draw_data, | ||||||
|                                                    id<MTLCommandBuffer> commandBuffer, |                                                    id<MTLCommandBuffer> commandBuffer, | ||||||
|                                                    id<MTLRenderCommandEncoder> commandEncoder); |                                                    id<MTLRenderCommandEncoder> commandEncoder); | ||||||
|   | |||||||
| @@ -15,5 +15,5 @@ | |||||||
|  |  | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplOSX_Init(); | IMGUI_IMPL_API bool     ImGui_ImplOSX_Init(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplOSX_Shutdown(); | IMGUI_IMPL_API void     ImGui_ImplOSX_Shutdown(); | ||||||
| IMGUI_IMPL_API void     ImGui_ImplOSX_NewFrame(NSView *_Nullable view); | IMGUI_IMPL_API void     ImGui_ImplOSX_NewFrame(NSView* _Nullable view); | ||||||
| IMGUI_IMPL_API bool     ImGui_ImplOSX_HandleEvent(NSEvent *_Nonnull event, NSView *_Nullable view); | IMGUI_IMPL_API bool     ImGui_ImplOSX_HandleEvent(NSEvent* _Nonnull event, NSView* _Nullable view); | ||||||
|   | |||||||
| @@ -221,7 +221,7 @@ static uint32_t ImGui_ImplVulkan_MemoryType(VkMemoryPropertyFlags properties, ui | |||||||
|     VkPhysicalDeviceMemoryProperties prop; |     VkPhysicalDeviceMemoryProperties prop; | ||||||
|     vkGetPhysicalDeviceMemoryProperties(v->PhysicalDevice, &prop); |     vkGetPhysicalDeviceMemoryProperties(v->PhysicalDevice, &prop); | ||||||
|     for (uint32_t i = 0; i < prop.memoryTypeCount; i++) |     for (uint32_t i = 0; i < prop.memoryTypeCount; i++) | ||||||
|         if ((prop.memoryTypes[i].propertyFlags & properties) == properties && type_bits & (1<<i)) |         if ((prop.memoryTypes[i].propertyFlags & properties) == properties && type_bits & (1 << i)) | ||||||
|             return i; |             return i; | ||||||
|     return 0xFFFFFFFF; // Unable to find memoryType |     return 0xFFFFFFFF; // Unable to find memoryType | ||||||
| } | } | ||||||
| @@ -442,7 +442,7 @@ bool ImGui_ImplVulkan_CreateFontsTexture(VkCommandBuffer command_buffer) | |||||||
|     unsigned char* pixels; |     unsigned char* pixels; | ||||||
|     int width, height; |     int width, height; | ||||||
|     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); |     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); | ||||||
|     size_t upload_size = width*height*4*sizeof(char); |     size_t upload_size = width * height * 4 * sizeof(char); | ||||||
|  |  | ||||||
|     VkResult err; |     VkResult err; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -63,9 +63,9 @@ static bool                 g_WantUpdateHasGamepad = true; | |||||||
| // Functions | // Functions | ||||||
| bool    ImGui_ImplWin32_Init(void* hwnd) | bool    ImGui_ImplWin32_Init(void* hwnd) | ||||||
| { | { | ||||||
|     if (!::QueryPerformanceFrequency((LARGE_INTEGER *)&g_TicksPerSecond)) |     if (!::QueryPerformanceFrequency((LARGE_INTEGER*)&g_TicksPerSecond)) | ||||||
|         return false; |         return false; | ||||||
|     if (!::QueryPerformanceCounter((LARGE_INTEGER *)&g_Time)) |     if (!::QueryPerformanceCounter((LARGE_INTEGER*)&g_Time)) | ||||||
|         return false; |         return false; | ||||||
|  |  | ||||||
|     // Setup back-end capabilities flags |     // Setup back-end capabilities flags | ||||||
| @@ -223,7 +223,7 @@ void    ImGui_ImplWin32_NewFrame() | |||||||
|  |  | ||||||
|     // Setup time step |     // Setup time step | ||||||
|     INT64 current_time; |     INT64 current_time; | ||||||
|     ::QueryPerformanceCounter((LARGE_INTEGER *)¤t_time); |     ::QueryPerformanceCounter((LARGE_INTEGER*)¤t_time); | ||||||
|     io.DeltaTime = (float)(current_time - g_Time) / g_TicksPerSecond; |     io.DeltaTime = (float)(current_time - g_Time) / g_TicksPerSecond; | ||||||
|     g_Time = current_time; |     g_Time = current_time; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										116
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -981,7 +981,7 @@ ImGuiIO::ImGuiIO() | |||||||
|     ConfigFlags = ImGuiConfigFlags_None; |     ConfigFlags = ImGuiConfigFlags_None; | ||||||
|     BackendFlags = ImGuiBackendFlags_None; |     BackendFlags = ImGuiBackendFlags_None; | ||||||
|     DisplaySize = ImVec2(-1.0f, -1.0f); |     DisplaySize = ImVec2(-1.0f, -1.0f); | ||||||
|     DeltaTime = 1.0f/60.0f; |     DeltaTime = 1.0f / 60.0f; | ||||||
|     IniSavingRate = 5.0f; |     IniSavingRate = 5.0f; | ||||||
|     IniFilename = "imgui.ini"; |     IniFilename = "imgui.ini"; | ||||||
|     LogFilename = "imgui_log.txt"; |     LogFilename = "imgui_log.txt"; | ||||||
| @@ -1122,7 +1122,7 @@ static void BezierClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, | |||||||
|     float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); |     float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); | ||||||
|     d2 = (d2 >= 0) ? d2 : -d2; |     d2 = (d2 >= 0) ? d2 : -d2; | ||||||
|     d3 = (d3 >= 0) ? d3 : -d3; |     d3 = (d3 >= 0) ? d3 : -d3; | ||||||
|     if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy)) |     if ((d2 + d3) * (d2 + d3) < tess_tol * (dx * dx + dy * dy)) | ||||||
|     { |     { | ||||||
|         ImVec2 p_current(x4, y4); |         ImVec2 p_current(x4, y4); | ||||||
|         ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p); |         ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p); | ||||||
| @@ -1136,12 +1136,12 @@ static void BezierClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, | |||||||
|     } |     } | ||||||
|     else if (level < 10) |     else if (level < 10) | ||||||
|     { |     { | ||||||
|         float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f; |         float x12 = (x1 + x2)*0.5f,       y12 = (y1 + y2)*0.5f; | ||||||
|         float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f; |         float x23 = (x2 + x3)*0.5f,       y23 = (y2 + y3)*0.5f; | ||||||
|         float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f; |         float x34 = (x3 + x4)*0.5f,       y34 = (y3 + y4)*0.5f; | ||||||
|         float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f; |         float x123 = (x12 + x23)*0.5f,    y123 = (y12 + y23)*0.5f; | ||||||
|         float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f; |         float x234 = (x23 + x34)*0.5f,    y234 = (y23 + y34)*0.5f; | ||||||
|         float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f; |         float x1234 = (x123 + x234)*0.5f, y1234 = (y123 + y234)*0.5f; | ||||||
|         BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1); |         BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1); | ||||||
|         BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1); |         BezierClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1); | ||||||
|     } |     } | ||||||
| @@ -1595,7 +1595,7 @@ int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const cha | |||||||
| { | { | ||||||
|     ImWchar* buf_out = buf; |     ImWchar* buf_out = buf; | ||||||
|     ImWchar* buf_end = buf + buf_size; |     ImWchar* buf_end = buf + buf_size; | ||||||
|     while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) |     while (buf_out < buf_end - 1 && (!in_text_end || in_text < in_text_end) && *in_text) | ||||||
|     { |     { | ||||||
|         unsigned int c; |         unsigned int c; | ||||||
|         in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); |         in_text += ImTextCharFromUtf8(&c, in_text, in_text_end); | ||||||
| @@ -1642,7 +1642,7 @@ static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c) | |||||||
|     { |     { | ||||||
|         if (buf_size < 3) return 0; |         if (buf_size < 3) return 0; | ||||||
|         buf[0] = (char)(0xe0 + (c >> 12)); |         buf[0] = (char)(0xe0 + (c >> 12)); | ||||||
|         buf[1] = (char)(0x80 + ((c>> 6) & 0x3f)); |         buf[1] = (char)(0x80 + ((c >> 6) & 0x3f)); | ||||||
|         buf[2] = (char)(0x80 + ((c ) & 0x3f)); |         buf[2] = (char)(0x80 + ((c ) & 0x3f)); | ||||||
|         return 3; |         return 3; | ||||||
|     } |     } | ||||||
| @@ -1679,13 +1679,13 @@ int ImTextStrToUtf8(char* buf, int buf_size, const ImWchar* in_text, const ImWch | |||||||
| { | { | ||||||
|     char* buf_out = buf; |     char* buf_out = buf; | ||||||
|     const char* buf_end = buf + buf_size; |     const char* buf_end = buf + buf_size; | ||||||
|     while (buf_out < buf_end-1 && (!in_text_end || in_text < in_text_end) && *in_text) |     while (buf_out < buf_end - 1 && (!in_text_end || in_text < in_text_end) && *in_text) | ||||||
|     { |     { | ||||||
|         unsigned int c = (unsigned int)(*in_text++); |         unsigned int c = (unsigned int)(*in_text++); | ||||||
|         if (c < 0x80) |         if (c < 0x80) | ||||||
|             *buf_out++ = (char)c; |             *buf_out++ = (char)c; | ||||||
|         else |         else | ||||||
|             buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end-buf_out-1), c); |             buf_out += ImTextCharToUtf8(buf_out, (int)(buf_end - buf_out - 1), c); | ||||||
|     } |     } | ||||||
|     *buf_out = 0; |     *buf_out = 0; | ||||||
|     return (int)(buf_out - buf); |     return (int)(buf_out - buf); | ||||||
| @@ -1721,7 +1721,7 @@ IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b) | |||||||
|  |  | ||||||
| ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in) | ||||||
| { | { | ||||||
|     float s = 1.0f/255.0f; |     float s = 1.0f / 255.0f; | ||||||
|     return ImVec4( |     return ImVec4( | ||||||
|         ((in >> IM_COL32_R_SHIFT) & 0xFF) * s, |         ((in >> IM_COL32_R_SHIFT) & 0xFF) * s, | ||||||
|         ((in >> IM_COL32_G_SHIFT) & 0xFF) * s, |         ((in >> IM_COL32_G_SHIFT) & 0xFF) * s, | ||||||
| @@ -1772,7 +1772,7 @@ void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     h = ImFmod(h, 1.0f) / (60.0f/360.0f); |     h = ImFmod(h, 1.0f) / (60.0f / 360.0f); | ||||||
|     int   i = (int)h; |     int   i = (int)h; | ||||||
|     float f = h - (float)i; |     float f = h - (float)i; | ||||||
|     float p = v * (1.0f - s); |     float p = v * (1.0f - s); | ||||||
| @@ -1989,7 +1989,7 @@ void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRa | |||||||
| void ImGuiTextFilter::Build() | void ImGuiTextFilter::Build() | ||||||
| { | { | ||||||
|     Filters.resize(0); |     Filters.resize(0); | ||||||
|     ImGuiTextRange input_range(InputBuf, InputBuf+strlen(InputBuf)); |     ImGuiTextRange input_range(InputBuf, InputBuf + strlen(InputBuf)); | ||||||
|     input_range.split(',', &Filters); |     input_range.split(',', &Filters); | ||||||
|  |  | ||||||
|     CountGrep = 0; |     CountGrep = 0; | ||||||
| @@ -2663,7 +2663,7 @@ void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, | |||||||
|     const float border_size = g.Style.FrameBorderSize; |     const float border_size = g.Style.FrameBorderSize; | ||||||
|     if (border && border_size > 0.0f) |     if (border && border_size > 0.0f) | ||||||
|     { |     { | ||||||
|         window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); |         window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); | ||||||
|         window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); |         window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -2675,7 +2675,7 @@ void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding) | |||||||
|     const float border_size = g.Style.FrameBorderSize; |     const float border_size = g.Style.FrameBorderSize; | ||||||
|     if (border_size > 0.0f) |     if (border_size > 0.0f) | ||||||
|     { |     { | ||||||
|         window->DrawList->AddRect(p_min+ImVec2(1,1), p_max+ImVec2(1,1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); |         window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), GetColorU32(ImGuiCol_BorderShadow), rounding, ImDrawCornerFlags_All, border_size); | ||||||
|         window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); |         window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, ImDrawCornerFlags_All, border_size); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -2698,11 +2698,11 @@ void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFl | |||||||
|     { |     { | ||||||
|         const float THICKNESS = 2.0f; |         const float THICKNESS = 2.0f; | ||||||
|         const float DISTANCE = 3.0f + THICKNESS * 0.5f; |         const float DISTANCE = 3.0f + THICKNESS * 0.5f; | ||||||
|         display_rect.Expand(ImVec2(DISTANCE,DISTANCE)); |         display_rect.Expand(ImVec2(DISTANCE, DISTANCE)); | ||||||
|         bool fully_visible = window->ClipRect.Contains(display_rect); |         bool fully_visible = window->ClipRect.Contains(display_rect); | ||||||
|         if (!fully_visible) |         if (!fully_visible) | ||||||
|             window->DrawList->PushClipRect(display_rect.Min, display_rect.Max); |             window->DrawList->PushClipRect(display_rect.Min, display_rect.Max); | ||||||
|         window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), display_rect.Max - ImVec2(THICKNESS*0.5f,THICKNESS*0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, ImDrawCornerFlags_All, THICKNESS); |         window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS * 0.5f, THICKNESS * 0.5f), display_rect.Max - ImVec2(THICKNESS * 0.5f, THICKNESS * 0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, ImDrawCornerFlags_All, THICKNESS); | ||||||
|         if (!fully_visible) |         if (!fully_visible) | ||||||
|             window->DrawList->PopClipRect(); |             window->DrawList->PopClipRect(); | ||||||
|     } |     } | ||||||
| @@ -3820,7 +3820,7 @@ void ImGui::NewFrame() | |||||||
|     // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags. |     // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags. | ||||||
|     // This fallback is particularly important as it avoid ImGui:: calls from crashing. |     // This fallback is particularly important as it avoid ImGui:: calls from crashing. | ||||||
|     g.WithinFrameScopeWithImplicitWindow = true; |     g.WithinFrameScopeWithImplicitWindow = true; | ||||||
|     SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver); |     SetNextWindowSize(ImVec2(400, 400), ImGuiCond_FirstUseEver); | ||||||
|     Begin("Debug##Default"); |     Begin("Debug##Default"); | ||||||
|     IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true); |     IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true); | ||||||
|  |  | ||||||
| @@ -4460,7 +4460,7 @@ ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup() | |||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     if (g.BeginPopupStack.Size > 0) |     if (g.BeginPopupStack.Size > 0) | ||||||
|         return g.OpenPopupStack[g.BeginPopupStack.Size-1].OpenMousePos; |         return g.OpenPopupStack[g.BeginPopupStack.Size - 1].OpenMousePos; | ||||||
|     return g.IO.MousePos; |     return g.IO.MousePos; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -4662,7 +4662,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiWindow* parent_window = g.CurrentWindow; |     ImGuiWindow* parent_window = g.CurrentWindow; | ||||||
|  |  | ||||||
|     flags |= ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow; |     flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_ChildWindow; | ||||||
|     flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove);  // Inherit the NoMove flag |     flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove);  // Inherit the NoMove flag | ||||||
|  |  | ||||||
|     // Size |     // Size | ||||||
| @@ -4702,7 +4702,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b | |||||||
|     { |     { | ||||||
|         FocusWindow(child_window); |         FocusWindow(child_window); | ||||||
|         NavInitWindow(child_window, false); |         NavInitWindow(child_window, false); | ||||||
|         SetActiveID(id+1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item |         SetActiveID(id + 1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item | ||||||
|         g.ActiveIdSource = ImGuiInputSource_Nav; |         g.ActiveIdSource = ImGuiInputSource_Nav; | ||||||
|     } |     } | ||||||
|     return ret; |     return ret; | ||||||
| @@ -4752,7 +4752,7 @@ void ImGui::EndChild() | |||||||
|  |  | ||||||
|             // When browsing a window that has no activable items (scroll only) we keep a highlight on the child |             // When browsing a window that has no activable items (scroll only) we keep a highlight on the child | ||||||
|             if (window->DC.NavLayerActiveMask == 0 && window == g.NavWindow) |             if (window->DC.NavLayerActiveMask == 0 && window == g.NavWindow) | ||||||
|                 RenderNavHighlight(ImRect(bb.Min - ImVec2(2,2), bb.Max + ImVec2(2,2)), g.NavId, ImGuiNavHighlightFlags_TypeThin); |                 RenderNavHighlight(ImRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2)), g.NavId, ImGuiNavHighlightFlags_TypeThin); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
| @@ -4978,10 +4978,10 @@ struct ImGuiResizeGripDef | |||||||
|  |  | ||||||
| static const ImGuiResizeGripDef resize_grip_def[4] = | static const ImGuiResizeGripDef resize_grip_def[4] = | ||||||
| { | { | ||||||
|     { ImVec2(1,1), ImVec2(-1,-1), 0, 3 }, // Lower-right |     { ImVec2(1, 1), ImVec2(-1, -1), 0, 3 }, // Lower-right | ||||||
|     { ImVec2(0,1), ImVec2(+1,-1), 3, 6 }, // Lower-left |     { ImVec2(0, 1), ImVec2(+1, -1), 3, 6 }, // Lower-left | ||||||
|     { ImVec2(0,0), ImVec2(+1,+1), 6, 9 }, // Upper-left (Unused) |     { ImVec2(0, 0), ImVec2(+1, +1), 6, 9 }, // Upper-left (Unused) | ||||||
|     { ImVec2(1,0), ImVec2(-1,+1), 9,12 }, // Upper-right (Unused) |     { ImVec2(1, 0), ImVec2(-1, +1), 9, 12 }, // Upper-right (Unused) | ||||||
| }; | }; | ||||||
|  |  | ||||||
| struct ImGuiResizeBorderDef | struct ImGuiResizeBorderDef | ||||||
| @@ -4993,16 +4993,16 @@ struct ImGuiResizeBorderDef | |||||||
|  |  | ||||||
| static const ImGuiResizeBorderDef resize_border_def[4] = | static const ImGuiResizeBorderDef resize_border_def[4] = | ||||||
| { | { | ||||||
|     { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top |     { ImVec2(0, +1), ImVec2(0, 0), ImVec2(1, 0), IM_PI * 1.50f }, // Top | ||||||
|     { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right |     { ImVec2(-1, 0), ImVec2(1, 0), ImVec2(1, 1), IM_PI * 0.00f }, // Right | ||||||
|     { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom |     { ImVec2(0, -1), ImVec2(1, 1), ImVec2(0, 1), IM_PI * 0.50f }, // Bottom | ||||||
|     { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f }  // Left |     { ImVec2(+1, 0), ImVec2(0, 1), ImVec2(0, 0), IM_PI * 1.00f } // Left | ||||||
| }; | }; | ||||||
|  |  | ||||||
| static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness) | static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness) | ||||||
| { | { | ||||||
|     ImRect rect = window->Rect(); |     ImRect rect = window->Rect(); | ||||||
|     if (thickness == 0.0f) rect.Max -= ImVec2(1,1); |     if (thickness == 0.0f) rect.Max -= ImVec2(1, 1); | ||||||
|     if (border_n == 0) { return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness,    rect.Max.x - perp_padding, rect.Min.y + thickness);    } // Top |     if (border_n == 0) { return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness,    rect.Max.x - perp_padding, rect.Min.y + thickness);    } // Top | ||||||
|     if (border_n == 1) { return ImRect(rect.Max.x - thickness,    rect.Min.y + perp_padding, rect.Max.x + thickness,    rect.Max.y - perp_padding); } // Right |     if (border_n == 1) { return ImRect(rect.Max.x - thickness,    rect.Min.y + perp_padding, rect.Max.x + thickness,    rect.Max.y - perp_padding); } // Right | ||||||
|     if (border_n == 2) { return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness,    rect.Max.x - perp_padding, rect.Max.y + thickness);    } // Bottom |     if (border_n == 2) { return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness,    rect.Max.x - perp_padding, rect.Max.y + thickness);    } // Bottom | ||||||
| @@ -5175,8 +5175,8 @@ static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window) | |||||||
|     { |     { | ||||||
|         const ImGuiResizeBorderDef& def = resize_border_def[border_held]; |         const ImGuiResizeBorderDef& def = resize_border_def[border_held]; | ||||||
|         ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f); |         ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f); | ||||||
|         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle); |         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI * 0.25f, def.OuterAngle); | ||||||
|         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI*0.25f); |         window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI * 0.25f); | ||||||
|         window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual |         window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), false, ImMax(2.0f, border_size)); // Thicker than usual | ||||||
|     } |     } | ||||||
|     if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) |     if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar)) | ||||||
| @@ -5515,7 +5515,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | |||||||
|         const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345) |         const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345) | ||||||
|         window->Active = true; |         window->Active = true; | ||||||
|         window->HasCloseButton = (p_open != NULL); |         window->HasCloseButton = (p_open != NULL); | ||||||
|         window->ClipRect = ImVec4(-FLT_MAX,-FLT_MAX,+FLT_MAX,+FLT_MAX); |         window->ClipRect = ImVec4(-FLT_MAX, -FLT_MAX, +FLT_MAX, +FLT_MAX); | ||||||
|         window->IDStack.resize(1); |         window->IDStack.resize(1); | ||||||
|         window->DrawList->_ResetForNewFrame(); |         window->DrawList->_ResetForNewFrame(); | ||||||
|  |  | ||||||
| @@ -7067,10 +7067,10 @@ void ImGui::PushMultiItemsWidths(int components, float w_full) | |||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     ImGuiWindow* window = g.CurrentWindow; |     ImGuiWindow* window = g.CurrentWindow; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); |     const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components)); | ||||||
|     const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); |     const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components - 1))); | ||||||
|     window->DC.ItemWidthStack.push_back(w_item_last); |     window->DC.ItemWidthStack.push_back(w_item_last); | ||||||
|     for (int i = 0; i < components-1; i++) |     for (int i = 0; i < components - 1; i++) | ||||||
|         window->DC.ItemWidthStack.push_back(w_item_one); |         window->DC.ItemWidthStack.push_back(w_item_one); | ||||||
|     window->DC.ItemWidth = window->DC.ItemWidthStack.back(); |     window->DC.ItemWidth = window->DC.ItemWidthStack.back(); | ||||||
|     g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; |     g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth; | ||||||
| @@ -7491,7 +7491,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags toolt | |||||||
|                 window->HiddenFramesCanSkipItems = 1; |                 window->HiddenFramesCanSkipItems = 1; | ||||||
|                 ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); |                 ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount); | ||||||
|             } |             } | ||||||
|     ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize; |     ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize; | ||||||
|     Begin(window_name, NULL, flags | extra_flags); |     Begin(window_name, NULL, flags | extra_flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -7564,7 +7564,7 @@ bool ImGui::IsPopupOpen(const char* str_id, ImGuiPopupFlags popup_flags) | |||||||
| ImGuiWindow* ImGui::GetTopMostPopupModal() | ImGuiWindow* ImGui::GetTopMostPopupModal() | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     for (int n = g.OpenPopupStack.Size-1; n >= 0; n--) |     for (int n = g.OpenPopupStack.Size - 1; n >= 0; n--) | ||||||
|         if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window) |         if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window) | ||||||
|             if (popup->Flags & ImGuiWindowFlags_Modal) |             if (popup->Flags & ImGuiWindowFlags_Modal) | ||||||
|                 return popup; |                 return popup; | ||||||
| @@ -7838,7 +7838,7 @@ bool ImGui::BeginPopupContextItem(const char* str_id, ImGuiPopupFlags popup_flag | |||||||
|     int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_); |     int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_); | ||||||
|     if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) |     if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) | ||||||
|         OpenPopupEx(id, popup_flags); |         OpenPopupEx(id, popup_flags); | ||||||
|     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); |     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiPopupFlags popup_flags) | bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiPopupFlags popup_flags) | ||||||
| @@ -7851,7 +7851,7 @@ bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiPopupFlags popup_fl | |||||||
|     if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) |     if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup)) | ||||||
|         if (!(popup_flags & ImGuiPopupFlags_NoOpenOverItems) || !IsAnyItemHovered()) |         if (!(popup_flags & ImGuiPopupFlags_NoOpenOverItems) || !IsAnyItemHovered()) | ||||||
|             OpenPopupEx(id, popup_flags); |             OpenPopupEx(id, popup_flags); | ||||||
|     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); |     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiPopupFlags popup_flags) | bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiPopupFlags popup_flags) | ||||||
| @@ -7864,7 +7864,7 @@ bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiPopupFlags popup_flag | |||||||
|     if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow)) |     if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow)) | ||||||
|         if (GetTopMostPopupModal() == NULL) |         if (GetTopMostPopupModal() == NULL) | ||||||
|             OpenPopupEx(id, popup_flags); |             OpenPopupEx(id, popup_flags); | ||||||
|     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings); |     return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings); | ||||||
| } | } | ||||||
|  |  | ||||||
| // r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.) | // r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.) | ||||||
| @@ -8083,7 +8083,7 @@ static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand) | |||||||
|     float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x); |     float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x); | ||||||
|     float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items |     float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items | ||||||
|     if (dby != 0.0f && dbx != 0.0f) |     if (dby != 0.0f && dbx != 0.0f) | ||||||
|        dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f); |         dbx = (dbx / 1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f); | ||||||
|     float dist_box = ImFabs(dbx) + ImFabs(dby); |     float dist_box = ImFabs(dbx) + ImFabs(dby); | ||||||
|  |  | ||||||
|     // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter) |     // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter) | ||||||
| @@ -8124,7 +8124,7 @@ static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand) | |||||||
|         ImDrawList* draw_list = GetForegroundDrawList(window); |         ImDrawList* draw_list = GetForegroundDrawList(window); | ||||||
|         draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100)); |         draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100)); | ||||||
|         draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200)); |         draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200)); | ||||||
|         draw_list->AddRectFilled(cand.Max - ImVec2(4,4), cand.Max + CalcTextSize(buf) + ImVec2(4,4), IM_COL32(40,0,0,150)); |         draw_list->AddRectFilled(cand.Max - ImVec2(4, 4), cand.Max + CalcTextSize(buf) + ImVec2(4, 4), IM_COL32(40,0,0,150)); | ||||||
|         draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf); |         draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Max, ~0U, buf); | ||||||
|     } |     } | ||||||
|     else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate. |     else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate. | ||||||
| @@ -8138,7 +8138,7 @@ static bool ImGui::NavScoreItem(ImGuiNavMoveResult* result, ImRect cand) | |||||||
|             draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf); |             draw_list->AddText(g.IO.FontDefault, 13.0f, cand.Min, IM_COL32(255, 255, 255, 255), buf); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  #endif | #endif | ||||||
|  |  | ||||||
|     // Is it in the quadrant we're interesting in moving to? |     // Is it in the quadrant we're interesting in moving to? | ||||||
|     bool new_best = false; |     bool new_best = false; | ||||||
| @@ -8214,7 +8214,7 @@ static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, con | |||||||
|  |  | ||||||
|     // Process Move Request (scoring for navigation) |     // Process Move Request (scoring for navigation) | ||||||
|     // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy) |     // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRectScreen + scoring from a rect wrapped according to current wrapping policy) | ||||||
|     if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled|ImGuiItemFlags_NoNav))) |     if ((g.NavId != id || (g.NavMoveRequestFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNav))) | ||||||
|     { |     { | ||||||
|         ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther; |         ImGuiNavMoveResult* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther; | ||||||
| #if IMGUI_DEBUG_NAV_SCORING | #if IMGUI_DEBUG_NAV_SCORING | ||||||
| @@ -8649,7 +8649,7 @@ static void ImGui::NavUpdate() | |||||||
|  |  | ||||||
|         // *Normal* Manual scroll with NavScrollXXX keys |         // *Normal* Manual scroll with NavScrollXXX keys | ||||||
|         // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds. |         // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds. | ||||||
|         ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f/10.0f, 10.0f); |         ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiInputReadMode_Down, 1.0f / 10.0f, 10.0f); | ||||||
|         if (scroll_dir.x != 0.0f && window->ScrollbarX) |         if (scroll_dir.x != 0.0f && window->ScrollbarX) | ||||||
|         { |         { | ||||||
|             SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed)); |             SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed)); | ||||||
| @@ -8671,7 +8671,7 @@ static void ImGui::NavUpdate() | |||||||
|     if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == ImGuiNavLayer_Main) |     if (g.NavMoveRequest && g.NavMoveFromClampedRefRect && g.NavLayer == ImGuiNavLayer_Main) | ||||||
|     { |     { | ||||||
|         ImGuiWindow* window = g.NavWindow; |         ImGuiWindow* window = g.NavWindow; | ||||||
|         ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1,1), window->InnerRect.Max - window->Pos + ImVec2(1,1)); |         ImRect window_rect_rel(window->InnerRect.Min - window->Pos - ImVec2(1, 1), window->InnerRect.Max - window->Pos + ImVec2(1, 1)); | ||||||
|         if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer])) |         if (!window_rect_rel.Contains(window->NavRectRel[g.NavLayer])) | ||||||
|         { |         { | ||||||
|             float pad = window->CalcFontSize() * 0.5f; |             float pad = window->CalcFontSize() * 0.5f; | ||||||
| @@ -8683,7 +8683,7 @@ static void ImGui::NavUpdate() | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items) |     // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items) | ||||||
|     ImRect nav_rect_rel = (g.NavWindow && !g.NavWindow->NavRectRel[g.NavLayer].IsInverted()) ? g.NavWindow->NavRectRel[g.NavLayer] : ImRect(0,0,0,0); |     ImRect nav_rect_rel = (g.NavWindow && !g.NavWindow->NavRectRel[g.NavLayer].IsInverted()) ? g.NavWindow->NavRectRel[g.NavLayer] : ImRect(0, 0, 0, 0); | ||||||
|     g.NavScoringRect = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect(); |     g.NavScoringRect = g.NavWindow ? ImRect(g.NavWindow->Pos + nav_rect_rel.Min, g.NavWindow->Pos + nav_rect_rel.Max) : GetViewportRect(); | ||||||
|     g.NavScoringRect.TranslateY(nav_scoring_rect_offset_y); |     g.NavScoringRect.TranslateY(nav_scoring_rect_offset_y); | ||||||
|     g.NavScoringRect.Min.x = ImMin(g.NavScoringRect.Min.x + 1.0f, g.NavScoringRect.Max.x); |     g.NavScoringRect.Min.x = ImMin(g.NavScoringRect.Min.x + 1.0f, g.NavScoringRect.Max.x); | ||||||
| @@ -8901,7 +8901,7 @@ static void ImGui::NavEndFrame() | |||||||
| static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N) | static int ImGui::FindWindowFocusIndex(ImGuiWindow* window) // FIXME-OPT O(N) | ||||||
| { | { | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     for (int i = g.WindowsFocusOrder.Size-1; i >= 0; i--) |     for (int i = g.WindowsFocusOrder.Size - 1; i >= 0; i--) | ||||||
|         if (g.WindowsFocusOrder[i] == window) |         if (g.WindowsFocusOrder[i] == window) | ||||||
|             return i; |             return i; | ||||||
|     return -1; |     return -1; | ||||||
| @@ -9385,7 +9385,7 @@ const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDrop | |||||||
|         // FIXME-DRAG: Settle on a proper default visuals for drop target. |         // FIXME-DRAG: Settle on a proper default visuals for drop target. | ||||||
|         r.Expand(3.5f); |         r.Expand(3.5f); | ||||||
|         bool push_clip_rect = !window->ClipRect.Contains(r); |         bool push_clip_rect = !window->ClipRect.Contains(r); | ||||||
|         if (push_clip_rect) window->DrawList->PushClipRect(r.Min-ImVec2(1,1), r.Max+ImVec2(1,1)); |         if (push_clip_rect) window->DrawList->PushClipRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1)); | ||||||
|         window->DrawList->AddRect(r.Min, r.Max, GetColorU32(ImGuiCol_DragDropTarget), 0.0f, ~0, 2.0f); |         window->DrawList->AddRect(r.Min, r.Max, GetColorU32(ImGuiCol_DragDropTarget), 0.0f, ~0, 2.0f); | ||||||
|         if (push_clip_rect) window->DrawList->PopClipRect(); |         if (push_clip_rect) window->DrawList->PopClipRect(); | ||||||
|     } |     } | ||||||
| @@ -10222,7 +10222,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|             if (draw_list == ImGui::GetWindowDrawList()) |             if (draw_list == ImGui::GetWindowDrawList()) | ||||||
|             { |             { | ||||||
|                 ImGui::SameLine(); |                 ImGui::SameLine(); | ||||||
|                 ImGui::TextColored(ImVec4(1.0f,0.4f,0.4f,1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered) |                 ImGui::TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered) | ||||||
|                 if (node_open) ImGui::TreePop(); |                 if (node_open) ImGui::TreePop(); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| @@ -10250,7 +10250,7 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|                 ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL; |                 ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL; | ||||||
|                 char buf[300]; |                 char buf[300]; | ||||||
|                 ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd:%5d triangles, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", |                 ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd:%5d triangles, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)", | ||||||
|                     pcmd->ElemCount/3, (void*)(intptr_t)pcmd->TextureId, |                     pcmd->ElemCount / 3, (void*)(intptr_t)pcmd->TextureId, | ||||||
|                     pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w); |                     pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w); | ||||||
|                 bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf); |                 bool pcmd_node_open = ImGui::TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf); | ||||||
|                 if (ImGui::IsItemHovered() && (show_drawcmd_mesh || show_drawcmd_aabb) && fg_draw_list) |                 if (ImGui::IsItemHovered() && (show_drawcmd_mesh || show_drawcmd_aabb) && fg_draw_list) | ||||||
| @@ -10276,11 +10276,11 @@ void ImGui::ShowMetricsWindow(bool* p_open) | |||||||
|                     NodeDrawCmdShowMeshAndBoundingBox(window, draw_list, pcmd, elem_offset, true, false); |                     NodeDrawCmdShowMeshAndBoundingBox(window, draw_list, pcmd, elem_offset, true, false); | ||||||
|  |  | ||||||
|                 // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted. |                 // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted. | ||||||
|                 ImGuiListClipper clipper(pcmd->ElemCount/3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible. |                 ImGuiListClipper clipper(pcmd->ElemCount / 3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible. | ||||||
|                 while (clipper.Step()) |                 while (clipper.Step()) | ||||||
|                     for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++) |                     for (int prim = clipper.DisplayStart, idx_i = elem_offset + clipper.DisplayStart * 3; prim < clipper.DisplayEnd; prim++) | ||||||
|                     { |                     { | ||||||
|                         char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf); |                         char* buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf); | ||||||
|                         ImVec2 triangle[3]; |                         ImVec2 triangle[3]; | ||||||
|                         for (int n = 0; n < 3; n++, idx_i++) |                         for (int n = 0; n < 3; n++, idx_i++) | ||||||
|                         { |                         { | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -173,7 +173,7 @@ typedef int ImGuiWindowFlags;       // -> enum ImGuiWindowFlags_     // Flags: f | |||||||
| typedef void* ImTextureID;          // User data for rendering back-end to identify a texture. This is whatever to you want it to be! read the FAQ about ImTextureID for details. | typedef void* ImTextureID;          // User data for rendering back-end to identify a texture. This is whatever to you want it to be! read the FAQ about ImTextureID for details. | ||||||
| #endif | #endif | ||||||
| typedef unsigned int ImGuiID;       // A unique ID used by widgets, typically hashed from a stack of string. | typedef unsigned int ImGuiID;       // A unique ID used by widgets, typically hashed from a stack of string. | ||||||
| typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData *data); | typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData* data); | ||||||
| typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); | typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); | ||||||
|  |  | ||||||
| // Decoded character types | // Decoded character types | ||||||
| @@ -1254,13 +1254,13 @@ enum ImGuiColorEditFlags_ | |||||||
|  |  | ||||||
|     // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to |     // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to | ||||||
|     // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup. |     // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup. | ||||||
|     ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_PickerHueBar, |     ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar, | ||||||
|  |  | ||||||
|     // [Internal] Masks |     // [Internal] Masks | ||||||
|     ImGuiColorEditFlags__DisplayMask    = ImGuiColorEditFlags_DisplayRGB|ImGuiColorEditFlags_DisplayHSV|ImGuiColorEditFlags_DisplayHex, |     ImGuiColorEditFlags__DisplayMask    = ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex, | ||||||
|     ImGuiColorEditFlags__DataTypeMask   = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float, |     ImGuiColorEditFlags__DataTypeMask   = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float, | ||||||
|     ImGuiColorEditFlags__PickerMask     = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar, |     ImGuiColorEditFlags__PickerMask     = ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar, | ||||||
|     ImGuiColorEditFlags__InputMask      = ImGuiColorEditFlags_InputRGB|ImGuiColorEditFlags_InputHSV |     ImGuiColorEditFlags__InputMask      = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV | ||||||
|  |  | ||||||
|     // Obsolete names (will be removed) |     // Obsolete names (will be removed) | ||||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||||
| @@ -1375,7 +1375,7 @@ struct ImVector | |||||||
|     inline const T&     back() const                        { IM_ASSERT(Size > 0); return Data[Size - 1]; } |     inline const T&     back() const                        { IM_ASSERT(Size > 0); return Data[Size - 1]; } | ||||||
|     inline void         swap(ImVector<T>& rhs)              { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } |     inline void         swap(ImVector<T>& rhs)              { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; } | ||||||
|  |  | ||||||
|     inline int          _grow_capacity(int sz) const        { int new_capacity = Capacity ? (Capacity + Capacity/2) : 8; return new_capacity > sz ? new_capacity : sz; } |     inline int          _grow_capacity(int sz) const        { int new_capacity = Capacity ? (Capacity + Capacity / 2) : 8; return new_capacity > sz ? new_capacity : sz; } | ||||||
|     inline void         resize(int new_size)                { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } |     inline void         resize(int new_size)                { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; } | ||||||
|     inline void         resize(int new_size, const T& v)    { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; } |     inline void         resize(int new_size, const T& v)    { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; } | ||||||
|     inline void         shrink(int new_size)                { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation |     inline void         shrink(int new_size)                { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation | ||||||
| @@ -1385,10 +1385,10 @@ struct ImVector | |||||||
|     inline void         push_back(const T& v)               { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; } |     inline void         push_back(const T& v)               { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; } | ||||||
|     inline void         pop_back()                          { IM_ASSERT(Size > 0); Size--; } |     inline void         pop_back()                          { IM_ASSERT(Size > 0); Size--; } | ||||||
|     inline void         push_front(const T& v)              { if (Size == 0) push_back(v); else insert(Data, v); } |     inline void         push_front(const T& v)              { if (Size == 0) push_back(v); else insert(Data, v); } | ||||||
|     inline T*           erase(const T* it)                  { IM_ASSERT(it >= Data && it < Data+Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; } |     inline T*           erase(const T* it)                  { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; } | ||||||
|     inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data+Size && it_last > it && it_last <= Data+Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; } |     inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data + Size && it_last > it && it_last <= Data + Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - count) * sizeof(T)); Size -= (int)count; return Data + off; } | ||||||
|     inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >= Data && it < Data+Size);  const ptrdiff_t off = it - Data; if (it < Data+Size-1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; } |     inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >= Data && it < Data + Size);  const ptrdiff_t off = it - Data; if (it < Data + Size - 1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; } | ||||||
|     inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >= Data && it <= Data+Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; } |     inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >= Data && it <= Data + Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; } | ||||||
|     inline bool         contains(const T& v) const          { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } |     inline bool         contains(const T& v) const          { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; } | ||||||
|     inline T*           find(const T& v)                    { T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } |     inline T*           find(const T& v)                    { T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } | ||||||
|     inline const T*     find(const T& v) const              { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } |     inline const T*     find(const T& v) const              { const T* data = Data;  const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; } | ||||||
| @@ -1651,7 +1651,7 @@ struct ImGuiPayload | |||||||
|     ImGuiID         SourceId;           // Source item id |     ImGuiID         SourceId;           // Source item id | ||||||
|     ImGuiID         SourceParentId;     // Source parent id (if available) |     ImGuiID         SourceParentId;     // Source parent id (if available) | ||||||
|     int             DataFrameCount;     // Data timestamp |     int             DataFrameCount;     // Data timestamp | ||||||
|     char            DataType[32+1];     // Data type tag (short user-supplied string, 32 characters max) |     char            DataType[32 + 1];   // Data type tag (short user-supplied string, 32 characters max) | ||||||
|     bool            Preview;            // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) |     bool            Preview;            // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) | ||||||
|     bool            Delivery;           // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. |     bool            Delivery;           // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. | ||||||
|  |  | ||||||
| @@ -1879,8 +1879,8 @@ struct ImColor | |||||||
|     ImVec4              Value; |     ImVec4              Value; | ||||||
|  |  | ||||||
|     ImColor()                                                       { Value.x = Value.y = Value.z = Value.w = 0.0f; } |     ImColor()                                                       { Value.x = Value.y = Value.z = Value.w = 0.0f; } | ||||||
|     ImColor(int r, int g, int b, int a = 255)                       { float sc = 1.0f/255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } |     ImColor(int r, int g, int b, int a = 255)                       { float sc = 1.0f / 255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; } | ||||||
|     ImColor(ImU32 rgba)                                             { float sc = 1.0f/255.0f; Value.x = (float)((rgba>>IM_COL32_R_SHIFT)&0xFF) * sc; Value.y = (float)((rgba>>IM_COL32_G_SHIFT)&0xFF) * sc; Value.z = (float)((rgba>>IM_COL32_B_SHIFT)&0xFF) * sc; Value.w = (float)((rgba>>IM_COL32_A_SHIFT)&0xFF) * sc; } |     ImColor(ImU32 rgba)                                             { float sc = 1.0f / 255.0f; Value.x = (float)((rgba >> IM_COL32_R_SHIFT) & 0xFF) * sc; Value.y = (float)((rgba >> IM_COL32_G_SHIFT) & 0xFF) * sc; Value.z = (float)((rgba >> IM_COL32_B_SHIFT) & 0xFF) * sc; Value.w = (float)((rgba >> IM_COL32_A_SHIFT) & 0xFF) * sc; } | ||||||
|     ImColor(float r, float g, float b, float a = 1.0f)              { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } |     ImColor(float r, float g, float b, float a = 1.0f)              { Value.x = r; Value.y = g; Value.z = b; Value.w = a; } | ||||||
|     ImColor(const ImVec4& col)                                      { Value = col; } |     ImColor(const ImVec4& col)                                      { Value = col; } | ||||||
|     inline operator ImU32() const                                   { return ImGui::ColorConvertFloat4ToU32(Value); } |     inline operator ImU32() const                                   { return ImGui::ColorConvertFloat4ToU32(Value); } | ||||||
| @@ -1888,7 +1888,7 @@ struct ImColor | |||||||
|  |  | ||||||
|     // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. |     // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers. | ||||||
|     inline void    SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } |     inline void    SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; } | ||||||
|     static ImColor HSV(float h, float s, float v, float a = 1.0f)   { float r,g,b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r,g,b,a); } |     static ImColor HSV(float h, float s, float v, float a = 1.0f)   { float r, g, b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r, g, b, a); } | ||||||
| }; | }; | ||||||
|  |  | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| @@ -2074,7 +2074,7 @@ struct ImDrawList | |||||||
|     // Stateful path API, add points then finish with PathFillConvex() or PathStroke() |     // Stateful path API, add points then finish with PathFillConvex() or PathStroke() | ||||||
|     inline    void  PathClear()                                                 { _Path.Size = 0; } |     inline    void  PathClear()                                                 { _Path.Size = 0; } | ||||||
|     inline    void  PathLineTo(const ImVec2& pos)                               { _Path.push_back(pos); } |     inline    void  PathLineTo(const ImVec2& pos)                               { _Path.push_back(pos); } | ||||||
|     inline    void  PathLineToMergeDuplicate(const ImVec2& pos)                 { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size-1], &pos, 8) != 0) _Path.push_back(pos); } |     inline    void  PathLineToMergeDuplicate(const ImVec2& pos)                 { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); } | ||||||
|     inline    void  PathFillConvex(ImU32 col)                                   { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }  // Note: Anti-aliased filling requires points to be in clockwise order. |     inline    void  PathFillConvex(ImU32 col)                                   { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }  // Note: Anti-aliased filling requires points to be in clockwise order. | ||||||
|     inline    void  PathStroke(ImU32 col, bool closed, float thickness = 1.0f)  { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; } |     inline    void  PathStroke(ImU32 col, bool closed, float thickness = 1.0f)  { AddPolyline(_Path.Data, _Path.Size, col, closed, thickness); _Path.Size = 0; } | ||||||
|     IMGUI_API void  PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10); |     IMGUI_API void  PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 10); | ||||||
|   | |||||||
							
								
								
									
										128
									
								
								imgui_demo.cpp
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								imgui_demo.cpp
									
									
									
									
									
								
							| @@ -378,12 +378,12 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|  |  | ||||||
|         if (ImGui::TreeNode("Configuration##2")) |         if (ImGui::TreeNode("Configuration##2")) | ||||||
|         { |         { | ||||||
|             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard",    (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard); |             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard",    (unsigned int*)&io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard); | ||||||
|             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad",     (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad); |             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad",     (unsigned int*)&io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad); | ||||||
|             ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details."); |             ImGui::SameLine(); HelpMarker("Required back-end to feed in gamepad inputs in io.NavInputs[] and set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details."); | ||||||
|             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos); |             ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", (unsigned int*)&io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos); | ||||||
|             ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos."); |             ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos."); | ||||||
|             ImGui::CheckboxFlags("io.ConfigFlags: NoMouse",              (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouse); |             ImGui::CheckboxFlags("io.ConfigFlags: NoMouse",              (unsigned int*)&io.ConfigFlags, ImGuiConfigFlags_NoMouse); | ||||||
|  |  | ||||||
|             // The "NoMouse" option above can get us stuck with a disable mouse! Provide an alternative way to fix it: |             // The "NoMouse" option above can get us stuck with a disable mouse! Provide an alternative way to fix it: | ||||||
|             if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) |             if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) | ||||||
| @@ -396,7 +396,7 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|                 if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space))) |                 if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Space))) | ||||||
|                     io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse; |                     io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse; | ||||||
|             } |             } | ||||||
|             ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int *)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange); |             ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", (unsigned int*)&io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange); | ||||||
|             ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility."); |             ImGui::SameLine(); HelpMarker("Instruct back-end to not alter mouse cursor shape and visibility."); | ||||||
|             ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); |             ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink); | ||||||
|             ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting"); |             ImGui::SameLine(); HelpMarker("Set to false to disable blinking cursor, for users who consider it distracting"); | ||||||
| @@ -417,10 +417,10 @@ void ImGui::ShowDemoWindow(bool* p_open) | |||||||
|  |  | ||||||
|             // Make a local copy to avoid modifying actual back-end flags. |             // Make a local copy to avoid modifying actual back-end flags. | ||||||
|             ImGuiBackendFlags backend_flags = io.BackendFlags; |             ImGuiBackendFlags backend_flags = io.BackendFlags; | ||||||
|             ImGui::CheckboxFlags("io.BackendFlags: HasGamepad",           (unsigned int *)&backend_flags, ImGuiBackendFlags_HasGamepad); |             ImGui::CheckboxFlags("io.BackendFlags: HasGamepad",           (unsigned int*)&backend_flags, ImGuiBackendFlags_HasGamepad); | ||||||
|             ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors",      (unsigned int *)&backend_flags, ImGuiBackendFlags_HasMouseCursors); |             ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors",      (unsigned int*)&backend_flags, ImGuiBackendFlags_HasMouseCursors); | ||||||
|             ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos",       (unsigned int *)&backend_flags, ImGuiBackendFlags_HasSetMousePos); |             ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos",       (unsigned int*)&backend_flags, ImGuiBackendFlags_HasSetMousePos); | ||||||
|             ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int *)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset); |             ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", (unsigned int*)&backend_flags, ImGuiBackendFlags_RendererHasVtxOffset); | ||||||
|             ImGui::TreePop(); |             ImGui::TreePop(); | ||||||
|             ImGui::Separator(); |             ImGui::Separator(); | ||||||
|         } |         } | ||||||
| @@ -507,9 +507,9 @@ static void ShowDemoWindowWidgets() | |||||||
|             if (i > 0) |             if (i > 0) | ||||||
|                 ImGui::SameLine(); |                 ImGui::SameLine(); | ||||||
|             ImGui::PushID(i); |             ImGui::PushID(i); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.6f)); |             ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.6f)); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.7f)); |             ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.7f)); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i/7.0f, 0.8f, 0.8f)); |             ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.8f, 0.8f)); | ||||||
|             ImGui::Button("Click"); |             ImGui::Button("Click"); | ||||||
|             ImGui::PopStyleColor(3); |             ImGui::PopStyleColor(3); | ||||||
|             ImGui::PopID(); |             ImGui::PopID(); | ||||||
| @@ -615,17 +615,17 @@ static void ShowDemoWindowWidgets() | |||||||
|  |  | ||||||
|             ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%"); |             ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%"); | ||||||
|  |  | ||||||
|             static float f1=1.00f, f2=0.0067f; |             static float f1 = 1.00f, f2 = 0.0067f; | ||||||
|             ImGui::DragFloat("drag float", &f1, 0.005f); |             ImGui::DragFloat("drag float", &f1, 0.005f); | ||||||
|             ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns"); |             ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         { |         { | ||||||
|             static int i1=0; |             static int i1 = 0; | ||||||
|             ImGui::SliderInt("slider int", &i1, -1, 3); |             ImGui::SliderInt("slider int", &i1, -1, 3); | ||||||
|             ImGui::SameLine(); HelpMarker("CTRL+click to input value."); |             ImGui::SameLine(); HelpMarker("CTRL+click to input value."); | ||||||
|  |  | ||||||
|             static float f1=0.123f, f2=0.0f; |             static float f1 = 0.123f, f2 = 0.0f; | ||||||
|             ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f"); |             ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f"); | ||||||
|             ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f); |             ImGui::SliderFloat("slider float (curve)", &f2, -10.0f, 10.0f, "%.4f", 2.0f); | ||||||
|  |  | ||||||
| @@ -644,8 +644,8 @@ static void ShowDemoWindowWidgets() | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         { |         { | ||||||
|             static float col1[3] = { 1.0f,0.0f,0.2f }; |             static float col1[3] = { 1.0f, 0.0f, 0.2f }; | ||||||
|             static float col2[4] = { 0.4f,0.7f,0.0f,0.5f }; |             static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f }; | ||||||
|             ImGui::ColorEdit3("color 1", col1); |             ImGui::ColorEdit3("color 1", col1); | ||||||
|             ImGui::SameLine(); HelpMarker( |             ImGui::SameLine(); HelpMarker( | ||||||
|                 "Click on the colored square to open a color picker.\n" |                 "Click on the colored square to open a color picker.\n" | ||||||
| @@ -822,8 +822,8 @@ static void ShowDemoWindowWidgets() | |||||||
|         if (ImGui::TreeNode("Colored Text")) |         if (ImGui::TreeNode("Colored Text")) | ||||||
|         { |         { | ||||||
|             // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. |             // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility. | ||||||
|             ImGui::TextColored(ImVec4(1.0f,0.0f,1.0f,1.0f), "Pink"); |             ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink"); | ||||||
|             ImGui::TextColored(ImVec4(1.0f,1.0f,0.0f,1.0f), "Yellow"); |             ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow"); | ||||||
|             ImGui::TextDisabled("Disabled"); |             ImGui::TextDisabled("Disabled"); | ||||||
|             ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle."); |             ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle."); | ||||||
|             ImGui::TreePop(); |             ImGui::TreePop(); | ||||||
| @@ -1079,11 +1079,11 @@ static void ShowDemoWindowWidgets() | |||||||
|         } |         } | ||||||
|         if (ImGui::TreeNode("Grid")) |         if (ImGui::TreeNode("Grid")) | ||||||
|         { |         { | ||||||
|             static int selected[4*4] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; |             static int selected[4 * 4] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; | ||||||
|             for (int i = 0; i < 4*4; i++) |             for (int i = 0; i < 4 * 4; i++) | ||||||
|             { |             { | ||||||
|                 ImGui::PushID(i); |                 ImGui::PushID(i); | ||||||
|                 if (ImGui::Selectable("Sailor", selected[i] != 0, 0, ImVec2(50,50))) |                 if (ImGui::Selectable("Sailor", selected[i] != 0, 0, ImVec2(50, 50))) | ||||||
|                 { |                 { | ||||||
|                     // Toggle |                     // Toggle | ||||||
|                     selected[i] = !selected[i]; |                     selected[i] = !selected[i]; | ||||||
| @@ -1118,7 +1118,7 @@ static void ShowDemoWindowWidgets() | |||||||
|                     sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y); |                     sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y); | ||||||
|                     if (x > 0) ImGui::SameLine(); |                     if (x > 0) ImGui::SameLine(); | ||||||
|                     ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment); |                     ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment); | ||||||
|                     ImGui::Selectable(name, &selected[3*y+x], ImGuiSelectableFlags_None, ImVec2(80,80)); |                     ImGui::Selectable(name, &selected[3 * y + x], ImGuiSelectableFlags_None, ImVec2(80, 80)); | ||||||
|                     ImGui::PopStyleVar(); |                     ImGui::PopStyleVar(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -1253,9 +1253,9 @@ static void ShowDemoWindowWidgets() | |||||||
|         { |         { | ||||||
|             static float phase = 0.0f; |             static float phase = 0.0f; | ||||||
|             values[values_offset] = cosf(phase); |             values[values_offset] = cosf(phase); | ||||||
|             values_offset = (values_offset+1) % IM_ARRAYSIZE(values); |             values_offset = (values_offset + 1) % IM_ARRAYSIZE(values); | ||||||
|             phase += 0.10f*values_offset; |             phase += 0.10f * values_offset; | ||||||
|             refresh_time += 1.0f/60.0f; |             refresh_time += 1.0f / 60.0f; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Plots can display overlay texts |         // Plots can display overlay texts | ||||||
| @@ -1286,8 +1286,8 @@ static void ShowDemoWindowWidgets() | |||||||
|         ImGui::SameLine(); |         ImGui::SameLine(); | ||||||
|         ImGui::SliderInt("Sample count", &display_count, 1, 400); |         ImGui::SliderInt("Sample count", &display_count, 1, 400); | ||||||
|         float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw; |         float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw; | ||||||
|         ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); |         ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0, 80)); | ||||||
|         ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0,80)); |         ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0, 80)); | ||||||
|         ImGui::Separator(); |         ImGui::Separator(); | ||||||
|  |  | ||||||
|         // Animate a simple progress bar |         // Animate a simple progress bar | ||||||
| @@ -1301,20 +1301,20 @@ static void ShowDemoWindowWidgets() | |||||||
|  |  | ||||||
|         // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width, |         // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width, | ||||||
|         // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth. |         // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth. | ||||||
|         ImGui::ProgressBar(progress, ImVec2(0.0f,0.0f)); |         ImGui::ProgressBar(progress, ImVec2(0.0f, 0.0f)); | ||||||
|         ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); |         ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x); | ||||||
|         ImGui::Text("Progress Bar"); |         ImGui::Text("Progress Bar"); | ||||||
|  |  | ||||||
|         float progress_saturated = IM_CLAMP(progress, 0.0f, 1.0f); |         float progress_saturated = IM_CLAMP(progress, 0.0f, 1.0f); | ||||||
|         char buf[32]; |         char buf[32]; | ||||||
|         sprintf(buf, "%d/%d", (int)(progress_saturated*1753), 1753); |         sprintf(buf, "%d/%d", (int)(progress_saturated * 1753), 1753); | ||||||
|         ImGui::ProgressBar(progress, ImVec2(0.f,0.f), buf); |         ImGui::ProgressBar(progress, ImVec2(0.f, 0.f), buf); | ||||||
|         ImGui::TreePop(); |         ImGui::TreePop(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (ImGui::TreeNode("Color/Picker Widgets")) |     if (ImGui::TreeNode("Color/Picker Widgets")) | ||||||
|     { |     { | ||||||
|         static ImVec4 color = ImVec4(114.0f/255.0f, 144.0f/255.0f, 154.0f/255.0f, 200.0f/255.0f); |         static ImVec4 color = ImVec4(114.0f / 255.0f, 144.0f / 255.0f, 154.0f / 255.0f, 200.0f / 255.0f); | ||||||
|  |  | ||||||
|         static bool alpha_preview = true; |         static bool alpha_preview = true; | ||||||
|         static bool alpha_half_preview = false; |         static bool alpha_half_preview = false; | ||||||
| @@ -1381,9 +1381,9 @@ static void ShowDemoWindowWidgets() | |||||||
|  |  | ||||||
|             ImGui::BeginGroup(); // Lock X position |             ImGui::BeginGroup(); // Lock X position | ||||||
|             ImGui::Text("Current"); |             ImGui::Text("Current"); | ||||||
|             ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40)); |             ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60, 40)); | ||||||
|             ImGui::Text("Previous"); |             ImGui::Text("Previous"); | ||||||
|             if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60,40))) |             if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60, 40))) | ||||||
|                 color = backup_color; |                 color = backup_color; | ||||||
|             ImGui::Separator(); |             ImGui::Separator(); | ||||||
|             ImGui::Text("Palette"); |             ImGui::Text("Palette"); | ||||||
| @@ -1394,7 +1394,7 @@ static void ShowDemoWindowWidgets() | |||||||
|                     ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y); |                     ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y); | ||||||
|  |  | ||||||
|                 ImGuiColorEditFlags palette_button_flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip; |                 ImGuiColorEditFlags palette_button_flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip; | ||||||
|                 if (ImGui::ColorButton("##palette", saved_palette[n], palette_button_flags, ImVec2(20,20))) |                 if (ImGui::ColorButton("##palette", saved_palette[n], palette_button_flags, ImVec2(20, 20))) | ||||||
|                     color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha! |                     color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha! | ||||||
|  |  | ||||||
|                 // Allow user to drop colors into each palette entry. Note that ColorButton() is already a |                 // Allow user to drop colors into each palette entry. Note that ColorButton() is already a | ||||||
| @@ -1417,14 +1417,14 @@ static void ShowDemoWindowWidgets() | |||||||
|         ImGui::Text("Color button only:"); |         ImGui::Text("Color button only:"); | ||||||
|         static bool no_border = false; |         static bool no_border = false; | ||||||
|         ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border); |         ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border); | ||||||
|         ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80,80)); |         ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80, 80)); | ||||||
|  |  | ||||||
|         ImGui::Text("Color picker:"); |         ImGui::Text("Color picker:"); | ||||||
|         static bool alpha = true; |         static bool alpha = true; | ||||||
|         static bool alpha_bar = true; |         static bool alpha_bar = true; | ||||||
|         static bool side_preview = true; |         static bool side_preview = true; | ||||||
|         static bool ref_color = false; |         static bool ref_color = false; | ||||||
|         static ImVec4 ref_color_v(1.0f,0.0f,1.0f,0.5f); |         static ImVec4 ref_color_v(1.0f, 0.0f, 1.0f, 0.5f); | ||||||
|         static int display_mode = 0; |         static int display_mode = 0; | ||||||
|         static int picker_mode = 0; |         static int picker_mode = 0; | ||||||
|         ImGui::Checkbox("With Alpha", &alpha); |         ImGui::Checkbox("With Alpha", &alpha); | ||||||
| @@ -1639,7 +1639,7 @@ static void ShowDemoWindowWidgets() | |||||||
|         ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing)); |         ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing)); | ||||||
|  |  | ||||||
|         static int int_value = 0; |         static int int_value = 0; | ||||||
|         ImGui::VSliderInt("##int", ImVec2(18,160), &int_value, 0, 5); |         ImGui::VSliderInt("##int", ImVec2(18, 160), &int_value, 0, 5); | ||||||
|         ImGui::SameLine(); |         ImGui::SameLine(); | ||||||
|  |  | ||||||
|         static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f }; |         static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f }; | ||||||
| @@ -1648,11 +1648,11 @@ static void ShowDemoWindowWidgets() | |||||||
|         { |         { | ||||||
|             if (i > 0) ImGui::SameLine(); |             if (i > 0) ImGui::SameLine(); | ||||||
|             ImGui::PushID(i); |             ImGui::PushID(i); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i/7.0f, 0.5f, 0.5f)); |             ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i / 7.0f, 0.5f, 0.5f)); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i/7.0f, 0.6f, 0.5f)); |             ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.5f)); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i/7.0f, 0.7f, 0.5f)); |             ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.5f)); | ||||||
|             ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i/7.0f, 0.9f, 0.9f)); |             ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i / 7.0f, 0.9f, 0.9f)); | ||||||
|             ImGui::VSliderFloat("##v", ImVec2(18,160), &values[i], 0.0f, 1.0f, ""); |             ImGui::VSliderFloat("##v", ImVec2(18, 160), &values[i], 0.0f, 1.0f, ""); | ||||||
|             if (ImGui::IsItemActive() || ImGui::IsItemHovered()) |             if (ImGui::IsItemActive() || ImGui::IsItemHovered()) | ||||||
|                 ImGui::SetTooltip("%.3f", values[i]); |                 ImGui::SetTooltip("%.3f", values[i]); | ||||||
|             ImGui::PopStyleColor(4); |             ImGui::PopStyleColor(4); | ||||||
| @@ -1671,7 +1671,7 @@ static void ShowDemoWindowWidgets() | |||||||
|             ImGui::BeginGroup(); |             ImGui::BeginGroup(); | ||||||
|             for (int ny = 0; ny < rows; ny++) |             for (int ny = 0; ny < rows; ny++) | ||||||
|             { |             { | ||||||
|                 ImGui::PushID(nx*rows+ny); |                 ImGui::PushID(nx * rows + ny); | ||||||
|                 ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, ""); |                 ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, ""); | ||||||
|                 if (ImGui::IsItemActive() || ImGui::IsItemHovered()) |                 if (ImGui::IsItemActive() || ImGui::IsItemHovered()) | ||||||
|                     ImGui::SetTooltip("%.3f", values2[nx]); |                     ImGui::SetTooltip("%.3f", values2[nx]); | ||||||
| @@ -1688,7 +1688,7 @@ static void ShowDemoWindowWidgets() | |||||||
|             if (i > 0) ImGui::SameLine(); |             if (i > 0) ImGui::SameLine(); | ||||||
|             ImGui::PushID(i); |             ImGui::PushID(i); | ||||||
|             ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40); |             ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40); | ||||||
|             ImGui::VSliderFloat("##v", ImVec2(40,160), &values[i], 0.0f, 1.0f, "%.2f\nsec"); |             ImGui::VSliderFloat("##v", ImVec2(40, 160), &values[i], 0.0f, 1.0f, "%.2f\nsec"); | ||||||
|             ImGui::PopStyleVar(); |             ImGui::PopStyleVar(); | ||||||
|             ImGui::PopID(); |             ImGui::PopID(); | ||||||
|         } |         } | ||||||
| @@ -1736,7 +1736,7 @@ static void ShowDemoWindowWidgets() | |||||||
|                 ImGui::PushID(n); |                 ImGui::PushID(n); | ||||||
|                 if ((n % 3) != 0) |                 if ((n % 3) != 0) | ||||||
|                     ImGui::SameLine(); |                     ImGui::SameLine(); | ||||||
|                 ImGui::Button(names[n], ImVec2(60,60)); |                 ImGui::Button(names[n], ImVec2(60, 60)); | ||||||
|  |  | ||||||
|                 // Our buttons are both drag sources and drag targets here! |                 // Our buttons are both drag sources and drag targets here! | ||||||
|                 if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) |                 if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) | ||||||
| @@ -2560,8 +2560,8 @@ static void ShowDemoWindowLayout() | |||||||
|                 ImGui::PushID(n + line * 1000); |                 ImGui::PushID(n + line * 1000); | ||||||
|                 char num_buf[16]; |                 char num_buf[16]; | ||||||
|                 sprintf(num_buf, "%d", n); |                 sprintf(num_buf, "%d", n); | ||||||
|                 const char* label = (!(n%15)) ? "FizzBuzz" : (!(n%3)) ? "Fizz" : (!(n%5)) ? "Buzz" : num_buf; |                 const char* label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf; | ||||||
|                 float hue = n*0.05f; |                 float hue = n * 0.05f; | ||||||
|                 ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f)); |                 ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f)); | ||||||
|                 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f)); |                 ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f)); | ||||||
|                 ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f)); |                 ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f)); | ||||||
| @@ -2906,7 +2906,7 @@ static void ShowDemoWindowPopups() | |||||||
|  |  | ||||||
|             // Testing behavior of widgets stacking their own regular popups over the modal. |             // Testing behavior of widgets stacking their own regular popups over the modal. | ||||||
|             static int item = 1; |             static int item = 1; | ||||||
|             static float color[4] = { 0.4f,0.7f,0.0f,0.5f }; |             static float color[4] = { 0.4f, 0.7f, 0.0f, 0.5f }; | ||||||
|             ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); |             ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0"); | ||||||
|             ImGui::ColorEdit4("color", color); |             ImGui::ColorEdit4("color", color); | ||||||
|  |  | ||||||
| @@ -3933,7 +3933,7 @@ static void ShowExampleMenuFile() | |||||||
|         { |         { | ||||||
|             const char* name = ImGui::GetStyleColorName((ImGuiCol)i); |             const char* name = ImGui::GetStyleColorName((ImGuiCol)i); | ||||||
|             ImVec2 p = ImGui::GetCursorScreenPos(); |             ImVec2 p = ImGui::GetCursorScreenPos(); | ||||||
|             ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x+sz, p.y+sz), ImGui::GetColorU32((ImGuiCol)i)); |             ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + sz, p.y + sz), ImGui::GetColorU32((ImGuiCol)i)); | ||||||
|             ImGui::Dummy(ImVec2(sz, sz)); |             ImGui::Dummy(ImVec2(sz, sz)); | ||||||
|             ImGui::SameLine(); |             ImGui::SameLine(); | ||||||
|             ImGui::MenuItem(name); |             ImGui::MenuItem(name); | ||||||
| @@ -4025,7 +4025,7 @@ struct ExampleAppConsole | |||||||
|  |  | ||||||
|     void    Draw(const char* title, bool* p_open) |     void    Draw(const char* title, bool* p_open) | ||||||
|     { |     { | ||||||
|         ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver); |         ImGui::SetNextWindowSize(ImVec2(520, 600), ImGuiCond_FirstUseEver); | ||||||
|         if (!ImGui::Begin(title, p_open)) |         if (!ImGui::Begin(title, p_open)) | ||||||
|         { |         { | ||||||
|             ImGui::End(); |             ImGui::End(); | ||||||
| @@ -4103,7 +4103,7 @@ struct ExampleAppConsole | |||||||
|         // If your items are of variable height: |         // If your items are of variable height: | ||||||
|         // - Split them into same height items would be simpler and facilitate random-seeking into your list. |         // - Split them into same height items would be simpler and facilitate random-seeking into your list. | ||||||
|         // - Consider using manual call to IsRectVisible() and skipping extraneous decoration from your items. |         // - Consider using manual call to IsRectVisible() and skipping extraneous decoration from your items. | ||||||
|         ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4,1)); // Tighten spacing |         ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4, 1)); // Tighten spacing | ||||||
|         if (copy_to_clipboard) |         if (copy_to_clipboard) | ||||||
|             ImGui::LogToClipboard(); |             ImGui::LogToClipboard(); | ||||||
|         for (int i = 0; i < Items.Size; i++) |         for (int i = 0; i < Items.Size; i++) | ||||||
| @@ -4163,7 +4163,7 @@ struct ExampleAppConsole | |||||||
|         // Insert into history. First find match and delete it so it can be pushed to the back. |         // Insert into history. First find match and delete it so it can be pushed to the back. | ||||||
|         // This isn't trying to be smart or optimal. |         // This isn't trying to be smart or optimal. | ||||||
|         HistoryPos = -1; |         HistoryPos = -1; | ||||||
|         for (int i = History.Size-1; i >= 0; i--) |         for (int i = History.Size - 1; i >= 0; i--) | ||||||
|             if (Stricmp(History[i], command_line) == 0) |             if (Stricmp(History[i], command_line) == 0) | ||||||
|             { |             { | ||||||
|                 free(History[i]); |                 free(History[i]); | ||||||
| @@ -4228,18 +4228,18 @@ struct ExampleAppConsole | |||||||
|                 // Build a list of candidates |                 // Build a list of candidates | ||||||
|                 ImVector<const char*> candidates; |                 ImVector<const char*> candidates; | ||||||
|                 for (int i = 0; i < Commands.Size; i++) |                 for (int i = 0; i < Commands.Size; i++) | ||||||
|                     if (Strnicmp(Commands[i], word_start, (int)(word_end-word_start)) == 0) |                     if (Strnicmp(Commands[i], word_start, (int)(word_end - word_start)) == 0) | ||||||
|                         candidates.push_back(Commands[i]); |                         candidates.push_back(Commands[i]); | ||||||
|  |  | ||||||
|                 if (candidates.Size == 0) |                 if (candidates.Size == 0) | ||||||
|                 { |                 { | ||||||
|                     // No match |                     // No match | ||||||
|                     AddLog("No match for \"%.*s\"!\n", (int)(word_end-word_start), word_start); |                     AddLog("No match for \"%.*s\"!\n", (int)(word_end - word_start), word_start); | ||||||
|                 } |                 } | ||||||
|                 else if (candidates.Size == 1) |                 else if (candidates.Size == 1) | ||||||
|                 { |                 { | ||||||
|                     // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing. |                     // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing. | ||||||
|                     data->DeleteChars((int)(word_start-data->Buf), (int)(word_end-word_start)); |                     data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start)); | ||||||
|                     data->InsertChars(data->CursorPos, candidates[0]); |                     data->InsertChars(data->CursorPos, candidates[0]); | ||||||
|                     data->InsertChars(data->CursorPos, " "); |                     data->InsertChars(data->CursorPos, " "); | ||||||
|                 } |                 } | ||||||
| @@ -4264,7 +4264,7 @@ struct ExampleAppConsole | |||||||
|  |  | ||||||
|                     if (match_len > 0) |                     if (match_len > 0) | ||||||
|                     { |                     { | ||||||
|                         data->DeleteChars((int)(word_start - data->Buf), (int)(word_end-word_start)); |                         data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start)); | ||||||
|                         data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); |                         data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
| @@ -4552,7 +4552,7 @@ static void ShowDummyObject(const char* prefix, int uid) | |||||||
|     ImGui::NextColumn(); |     ImGui::NextColumn(); | ||||||
|     if (node_open) |     if (node_open) | ||||||
|     { |     { | ||||||
|         static float dummy_members[8] = { 0.0f,0.0f,1.0f,3.1416f,100.0f,999.0f }; |         static float dummy_members[8] = { 0.0f, 0.0f, 1.0f, 3.1416f, 100.0f, 999.0f }; | ||||||
|         for (int i = 0; i < 8; i++) |         for (int i = 0; i < 8; i++) | ||||||
|         { |         { | ||||||
|             ImGui::PushID(i); // Use field index as identifier. |             ImGui::PushID(i); // Use field index as identifier. | ||||||
| @@ -4584,7 +4584,7 @@ static void ShowDummyObject(const char* prefix, int uid) | |||||||
| // Demonstrate create a simple property editor. | // Demonstrate create a simple property editor. | ||||||
| static void ShowExampleAppPropertyEditor(bool* p_open) | static void ShowExampleAppPropertyEditor(bool* p_open) | ||||||
| { | { | ||||||
|     ImGui::SetNextWindowSize(ImVec2(430,450), ImGuiCond_FirstUseEver); |     ImGui::SetNextWindowSize(ImVec2(430, 450), ImGuiCond_FirstUseEver); | ||||||
|     if (!ImGui::Begin("Example: Property editor", p_open)) |     if (!ImGui::Begin("Example: Property editor", p_open)) | ||||||
|     { |     { | ||||||
|         ImGui::End(); |         ImGui::End(); | ||||||
| @@ -4597,7 +4597,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open) | |||||||
|         "Remember that in many simple cases, you can use ImGui::SameLine(xxx) to position\n" |         "Remember that in many simple cases, you can use ImGui::SameLine(xxx) to position\n" | ||||||
|         "your cursor horizontally instead of using the Columns() API."); |         "your cursor horizontally instead of using the Columns() API."); | ||||||
|  |  | ||||||
|     ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2,2)); |     ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2)); | ||||||
|     ImGui::Columns(2); |     ImGui::Columns(2); | ||||||
|     ImGui::Separator(); |     ImGui::Separator(); | ||||||
|  |  | ||||||
| @@ -4618,7 +4618,7 @@ static void ShowExampleAppPropertyEditor(bool* p_open) | |||||||
| // Demonstrate/test rendering huge amount of text, and the incidence of clipping. | // Demonstrate/test rendering huge amount of text, and the incidence of clipping. | ||||||
| static void ShowExampleAppLongText(bool* p_open) | static void ShowExampleAppLongText(bool* p_open) | ||||||
| { | { | ||||||
|     ImGui::SetNextWindowSize(ImVec2(520,600), ImGuiCond_FirstUseEver); |     ImGui::SetNextWindowSize(ImVec2(520, 600), ImGuiCond_FirstUseEver); | ||||||
|     if (!ImGui::Begin("Example: Long text display", p_open)) |     if (!ImGui::Begin("Example: Long text display", p_open)) | ||||||
|     { |     { | ||||||
|         ImGui::End(); |         ImGui::End(); | ||||||
| @@ -4639,7 +4639,7 @@ static void ShowExampleAppLongText(bool* p_open) | |||||||
|     if (ImGui::Button("Add 1000 lines")) |     if (ImGui::Button("Add 1000 lines")) | ||||||
|     { |     { | ||||||
|         for (int i = 0; i < 1000; i++) |         for (int i = 0; i < 1000; i++) | ||||||
|             log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines+i); |             log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines + i); | ||||||
|         lines += 1000; |         lines += 1000; | ||||||
|     } |     } | ||||||
|     ImGui::BeginChild("Log"); |     ImGui::BeginChild("Log"); | ||||||
| @@ -4996,7 +4996,7 @@ static void ShowExampleAppCustomRendering(bool* p_open) | |||||||
|             ImVec2 window_size = ImGui::GetWindowSize(); |             ImVec2 window_size = ImGui::GetWindowSize(); | ||||||
|             ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f); |             ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f); | ||||||
|             if (draw_bg) |             if (draw_bg) | ||||||
|                 ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10+4); |                 ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10 + 4); | ||||||
|             if (draw_fg) |             if (draw_fg) | ||||||
|                 ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10); |                 ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10); | ||||||
|             ImGui::EndTabItem(); |             ImGui::EndTabItem(); | ||||||
| @@ -5022,7 +5022,7 @@ struct MyDocument | |||||||
|     bool        WantClose;  // Set when the document |     bool        WantClose;  // Set when the document | ||||||
|     ImVec4      Color;      // An arbitrary variable associated to the document |     ImVec4      Color;      // An arbitrary variable associated to the document | ||||||
|  |  | ||||||
|     MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f,1.0f,1.0f,1.0f)) |     MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f, 1.0f, 1.0f, 1.0f)) | ||||||
|     { |     { | ||||||
|         Name = name; |         Name = name; | ||||||
|         Open = OpenPrev = open; |         Open = OpenPrev = open; | ||||||
|   | |||||||
| @@ -668,7 +668,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|     const ImVec2 opaque_uv = _Data->TexUvWhitePixel; |     const ImVec2 opaque_uv = _Data->TexUvWhitePixel; | ||||||
|     int count = points_count; |     int count = points_count; | ||||||
|     if (!closed) |     if (!closed) | ||||||
|         count = points_count-1; |         count = points_count - 1; | ||||||
|  |  | ||||||
|     const bool thick_line = (thickness > 1.0f); |     const bool thick_line = (thickness > 1.0f); | ||||||
|     if (Flags & ImDrawListFlags_AntiAliasedLines) |     if (Flags & ImDrawListFlags_AntiAliasedLines) | ||||||
| @@ -677,8 +677,8 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|         const float AA_SIZE = 1.0f; |         const float AA_SIZE = 1.0f; | ||||||
|         const ImU32 col_trans = col & ~IM_COL32_A_MASK; |         const ImU32 col_trans = col & ~IM_COL32_A_MASK; | ||||||
|  |  | ||||||
|         const int idx_count = thick_line ? count*18 : count*12; |         const int idx_count = thick_line ? count * 18 : count * 12; | ||||||
|         const int vtx_count = thick_line ? points_count*4 : points_count*3; |         const int vtx_count = thick_line ? points_count * 4 : points_count * 3; | ||||||
|         PrimReserve(idx_count, vtx_count); |         PrimReserve(idx_count, vtx_count); | ||||||
|  |  | ||||||
|         // Temporary buffer |         // Temporary buffer | ||||||
| @@ -687,7 +687,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|  |  | ||||||
|         for (int i1 = 0; i1 < count; i1++) |         for (int i1 = 0; i1 < count; i1++) | ||||||
|         { |         { | ||||||
|             const int i2 = (i1+1) == points_count ? 0 : i1+1; |             const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1; | ||||||
|             float dx = points[i2].x - points[i1].x; |             float dx = points[i2].x - points[i1].x; | ||||||
|             float dy = points[i2].y - points[i1].y; |             float dy = points[i2].y - points[i1].y; | ||||||
|             IM_NORMALIZE2F_OVER_ZERO(dx, dy); |             IM_NORMALIZE2F_OVER_ZERO(dx, dy); | ||||||
| @@ -695,7 +695,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|             temp_normals[i1].y = -dx; |             temp_normals[i1].y = -dx; | ||||||
|         } |         } | ||||||
|         if (!closed) |         if (!closed) | ||||||
|             temp_normals[points_count-1] = temp_normals[points_count-2]; |             temp_normals[points_count - 1] = temp_normals[points_count - 2]; | ||||||
|  |  | ||||||
|         if (!thick_line) |         if (!thick_line) | ||||||
|         { |         { | ||||||
| @@ -711,8 +711,8 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|             unsigned int idx1 = _VtxCurrentIdx; |             unsigned int idx1 = _VtxCurrentIdx; | ||||||
|             for (int i1 = 0; i1 < count; i1++) |             for (int i1 = 0; i1 < count; i1++) | ||||||
|             { |             { | ||||||
|                 const int i2 = (i1+1) == points_count ? 0 : i1+1; |                 const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1; | ||||||
|                 unsigned int idx2 = (i1+1) == points_count ? _VtxCurrentIdx : idx1+3; |                 unsigned int idx2 = (i1 + 1) == points_count ? _VtxCurrentIdx : idx1 + 3; | ||||||
|  |  | ||||||
|                 // Average normals |                 // Average normals | ||||||
|                 float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f; |                 float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f; | ||||||
| @@ -722,7 +722,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|                 dm_y *= AA_SIZE; |                 dm_y *= AA_SIZE; | ||||||
|  |  | ||||||
|                 // Add temporary vertices |                 // Add temporary vertices | ||||||
|                 ImVec2* out_vtx = &temp_points[i2*2]; |                 ImVec2* out_vtx = &temp_points[i2 * 2]; | ||||||
|                 out_vtx[0].x = points[i2].x + dm_x; |                 out_vtx[0].x = points[i2].x + dm_x; | ||||||
|                 out_vtx[0].y = points[i2].y + dm_y; |                 out_vtx[0].y = points[i2].y + dm_y; | ||||||
|                 out_vtx[1].x = points[i2].x - dm_x; |                 out_vtx[1].x = points[i2].x - dm_x; | ||||||
| @@ -780,7 +780,7 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|                 float dm_in_y = dm_y * half_inner_thickness; |                 float dm_in_y = dm_y * half_inner_thickness; | ||||||
|  |  | ||||||
|                 // Add temporary vertices |                 // Add temporary vertices | ||||||
|                 ImVec2* out_vtx = &temp_points[i2*4]; |                 ImVec2* out_vtx = &temp_points[i2 * 4]; | ||||||
|                 out_vtx[0].x = points[i2].x + dm_out_x; |                 out_vtx[0].x = points[i2].x + dm_out_x; | ||||||
|                 out_vtx[0].y = points[i2].y + dm_out_y; |                 out_vtx[0].y = points[i2].y + dm_out_y; | ||||||
|                 out_vtx[1].x = points[i2].x + dm_in_x; |                 out_vtx[1].x = points[i2].x + dm_in_x; | ||||||
| @@ -817,13 +817,13 @@ void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 | |||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         // Non Anti-aliased Stroke |         // Non Anti-aliased Stroke | ||||||
|         const int idx_count = count*6; |         const int idx_count = count * 6; | ||||||
|         const int vtx_count = count*4;      // FIXME-OPT: Not sharing edges |         const int vtx_count = count * 4;    // FIXME-OPT: Not sharing edges | ||||||
|         PrimReserve(idx_count, vtx_count); |         PrimReserve(idx_count, vtx_count); | ||||||
|  |  | ||||||
|         for (int i1 = 0; i1 < count; i1++) |         for (int i1 = 0; i1 < count; i1++) | ||||||
|         { |         { | ||||||
|             const int i2 = (i1+1) == points_count ? 0 : i1+1; |             const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1; | ||||||
|             const ImVec2& p1 = points[i1]; |             const ImVec2& p1 = points[i1]; | ||||||
|             const ImVec2& p2 = points[i2]; |             const ImVec2& p2 = points[i2]; | ||||||
|  |  | ||||||
| @@ -860,22 +860,22 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun | |||||||
|         // Anti-aliased Fill |         // Anti-aliased Fill | ||||||
|         const float AA_SIZE = 1.0f; |         const float AA_SIZE = 1.0f; | ||||||
|         const ImU32 col_trans = col & ~IM_COL32_A_MASK; |         const ImU32 col_trans = col & ~IM_COL32_A_MASK; | ||||||
|         const int idx_count = (points_count-2)*3 + points_count*6; |         const int idx_count = (points_count - 2)*3 + points_count * 6; | ||||||
|         const int vtx_count = (points_count*2); |         const int vtx_count = (points_count * 2); | ||||||
|         PrimReserve(idx_count, vtx_count); |         PrimReserve(idx_count, vtx_count); | ||||||
|  |  | ||||||
|         // Add indexes for fill |         // Add indexes for fill | ||||||
|         unsigned int vtx_inner_idx = _VtxCurrentIdx; |         unsigned int vtx_inner_idx = _VtxCurrentIdx; | ||||||
|         unsigned int vtx_outer_idx = _VtxCurrentIdx+1; |         unsigned int vtx_outer_idx = _VtxCurrentIdx + 1; | ||||||
|         for (int i = 2; i < points_count; i++) |         for (int i = 2; i < points_count; i++) | ||||||
|         { |         { | ||||||
|             _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+((i-1)<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx+(i<<1)); |             _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx + ((i - 1) << 1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx + (i << 1)); | ||||||
|             _IdxWritePtr += 3; |             _IdxWritePtr += 3; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Compute normals |         // Compute normals | ||||||
|         ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630 |         ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630 | ||||||
|         for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) |         for (int i0 = points_count - 1, i1 = 0; i1 < points_count; i0 = i1++) | ||||||
|         { |         { | ||||||
|             const ImVec2& p0 = points[i0]; |             const ImVec2& p0 = points[i0]; | ||||||
|             const ImVec2& p1 = points[i1]; |             const ImVec2& p1 = points[i1]; | ||||||
| @@ -886,7 +886,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun | |||||||
|             temp_normals[i0].y = -dx; |             temp_normals[i0].y = -dx; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         for (int i0 = points_count-1, i1 = 0; i1 < points_count; i0 = i1++) |         for (int i0 = points_count - 1, i1 = 0; i1 < points_count; i0 = i1++) | ||||||
|         { |         { | ||||||
|             // Average normals |             // Average normals | ||||||
|             const ImVec2& n0 = temp_normals[i0]; |             const ImVec2& n0 = temp_normals[i0]; | ||||||
| @@ -903,8 +903,8 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun | |||||||
|             _VtxWritePtr += 2; |             _VtxWritePtr += 2; | ||||||
|  |  | ||||||
|             // Add indexes for fringes |             // Add indexes for fringes | ||||||
|             _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx+(i0<<1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); |             _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx + (i1 << 1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx + (i0 << 1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx + (i0 << 1)); | ||||||
|             _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx+(i0<<1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx+(i1<<1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx+(i1<<1)); |             _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx + (i0 << 1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx + (i1 << 1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx + (i1 << 1)); | ||||||
|             _IdxWritePtr += 6; |             _IdxWritePtr += 6; | ||||||
|         } |         } | ||||||
|         _VtxCurrentIdx += (ImDrawIdx)vtx_count; |         _VtxCurrentIdx += (ImDrawIdx)vtx_count; | ||||||
| @@ -912,7 +912,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun | |||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         // Non Anti-aliased Fill |         // Non Anti-aliased Fill | ||||||
|         const int idx_count = (points_count-2)*3; |         const int idx_count = (points_count - 2)*3; | ||||||
|         const int vtx_count = points_count; |         const int vtx_count = points_count; | ||||||
|         PrimReserve(idx_count, vtx_count); |         PrimReserve(idx_count, vtx_count); | ||||||
|         for (int i = 0; i < vtx_count; i++) |         for (int i = 0; i < vtx_count; i++) | ||||||
| @@ -922,7 +922,7 @@ void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_coun | |||||||
|         } |         } | ||||||
|         for (int i = 2; i < points_count; i++) |         for (int i = 2; i < points_count; i++) | ||||||
|         { |         { | ||||||
|             _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx+i-1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx+i); |             _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx + i - 1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx + i); | ||||||
|             _IdxWritePtr += 3; |             _IdxWritePtr += 3; | ||||||
|         } |         } | ||||||
|         _VtxCurrentIdx += (ImDrawIdx)vtx_count; |         _VtxCurrentIdx += (ImDrawIdx)vtx_count; | ||||||
| @@ -989,20 +989,20 @@ static void PathBezierToCasteljau(ImVector<ImVec2>* path, float x1, float y1, fl | |||||||
|     float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); |     float d3 = ((x3 - x4) * dy - (y3 - y4) * dx); | ||||||
|     d2 = (d2 >= 0) ? d2 : -d2; |     d2 = (d2 >= 0) ? d2 : -d2; | ||||||
|     d3 = (d3 >= 0) ? d3 : -d3; |     d3 = (d3 >= 0) ? d3 : -d3; | ||||||
|     if ((d2+d3) * (d2+d3) < tess_tol * (dx*dx + dy*dy)) |     if ((d2 + d3) * (d2 + d3) < tess_tol * (dx * dx + dy * dy)) | ||||||
|     { |     { | ||||||
|         path->push_back(ImVec2(x4, y4)); |         path->push_back(ImVec2(x4, y4)); | ||||||
|     } |     } | ||||||
|     else if (level < 10) |     else if (level < 10) | ||||||
|     { |     { | ||||||
|         float x12 = (x1+x2)*0.5f,       y12 = (y1+y2)*0.5f; |         float x12 = (x1 + x2)*0.5f,       y12 = (y1 + y2)*0.5f; | ||||||
|         float x23 = (x2+x3)*0.5f,       y23 = (y2+y3)*0.5f; |         float x23 = (x2 + x3)*0.5f,       y23 = (y2 + y3)*0.5f; | ||||||
|         float x34 = (x3+x4)*0.5f,       y34 = (y3+y4)*0.5f; |         float x34 = (x3 + x4)*0.5f,       y34 = (y3 + y4)*0.5f; | ||||||
|         float x123 = (x12+x23)*0.5f,    y123 = (y12+y23)*0.5f; |         float x123 = (x12 + x23)*0.5f,    y123 = (y12 + y23)*0.5f; | ||||||
|         float x234 = (x23+x34)*0.5f,    y234 = (y23+y34)*0.5f; |         float x234 = (x23 + x34)*0.5f,    y234 = (y23 + y34)*0.5f; | ||||||
|         float x1234 = (x123+x234)*0.5f, y1234 = (y123+y234)*0.5f; |         float x1234 = (x123 + x234)*0.5f, y1234 = (y123 + y234)*0.5f; | ||||||
|         PathBezierToCasteljau(path, x1,y1,        x12,y12,    x123,y123,  x1234,y1234, tess_tol, level+1); |         PathBezierToCasteljau(path, x1, y1,        x12, y12,    x123, y123,  x1234, y1234, tess_tol, level + 1); | ||||||
|         PathBezierToCasteljau(path, x1234,y1234,  x234,y234,  x34,y34,    x4,y4,       tess_tol, level+1); |         PathBezierToCasteljau(path, x1234, y1234,  x234, y234,  x34, y34,    x4, y4,       tess_tol, level + 1); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1062,9 +1062,9 @@ void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, fl | |||||||
|     if ((col & IM_COL32_A_MASK) == 0) |     if ((col & IM_COL32_A_MASK) == 0) | ||||||
|         return; |         return; | ||||||
|     if (Flags & ImDrawListFlags_AntiAliasedLines) |     if (Flags & ImDrawListFlags_AntiAliasedLines) | ||||||
|         PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.50f,0.50f), rounding, rounding_corners); |         PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.50f, 0.50f), rounding, rounding_corners); | ||||||
|     else |     else | ||||||
|         PathRect(p_min + ImVec2(0.50f,0.50f), p_max - ImVec2(0.49f,0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes. |         PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.49f, 0.49f), rounding, rounding_corners); // Better looking lower-right corner and rounded non-AA shapes. | ||||||
|     PathStroke(col, true, thickness); |     PathStroke(col, true, thickness); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1092,8 +1092,8 @@ void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_ma | |||||||
|  |  | ||||||
|     const ImVec2 uv = _Data->TexUvWhitePixel; |     const ImVec2 uv = _Data->TexUvWhitePixel; | ||||||
|     PrimReserve(6, 4); |     PrimReserve(6, 4); | ||||||
|     PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); |     PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); | ||||||
|     PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx+3)); |     PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3)); | ||||||
|     PrimWriteVtx(p_min, uv, col_upr_left); |     PrimWriteVtx(p_min, uv, col_upr_left); | ||||||
|     PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right); |     PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right); | ||||||
|     PrimWriteVtx(p_max, uv, col_bot_right); |     PrimWriteVtx(p_max, uv, col_bot_right); | ||||||
| @@ -1787,15 +1787,15 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg) | |||||||
| } | } | ||||||
|  |  | ||||||
| // Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder) | // Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder) | ||||||
| static unsigned int stb_decompress_length(const unsigned char *input); | static unsigned int stb_decompress_length(const unsigned char* input); | ||||||
| static unsigned int stb_decompress(unsigned char *output, const unsigned char *input, unsigned int length); | static unsigned int stb_decompress(unsigned char* output, const unsigned char* input, unsigned int length); | ||||||
| static const char*  GetDefaultCompressedFontDataTTFBase85(); | static const char*  GetDefaultCompressedFontDataTTFBase85(); | ||||||
| static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; } | static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; } | ||||||
| static void         Decode85(const unsigned char* src, unsigned char* dst) | static void         Decode85(const unsigned char* src, unsigned char* dst) | ||||||
| { | { | ||||||
|     while (*src) |     while (*src) | ||||||
|     { |     { | ||||||
|         unsigned int tmp = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4])))); |         unsigned int tmp = Decode85Byte(src[0]) + 85 * (Decode85Byte(src[1]) + 85 * (Decode85Byte(src[2]) + 85 * (Decode85Byte(src[3]) + 85 * Decode85Byte(src[4])))); | ||||||
|         dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF);   // We can't assume little-endianness. |         dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF);   // We can't assume little-endianness. | ||||||
|         src += 5; |         src += 5; | ||||||
|         dst += 4; |         dst += 4; | ||||||
| @@ -1862,7 +1862,7 @@ ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float si | |||||||
| ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges) | ||||||
| { | { | ||||||
|     const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data); |     const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data); | ||||||
|     unsigned char* buf_decompressed_data = (unsigned char *)IM_ALLOC(buf_decompressed_size); |     unsigned char* buf_decompressed_data = (unsigned char*)IM_ALLOC(buf_decompressed_size); | ||||||
|     stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); |     stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size); | ||||||
|  |  | ||||||
|     ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); |     ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig(); | ||||||
| @@ -2149,7 +2149,7 @@ bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas) | |||||||
|     if (atlas->TexDesiredWidth > 0) |     if (atlas->TexDesiredWidth > 0) | ||||||
|         atlas->TexWidth = atlas->TexDesiredWidth; |         atlas->TexWidth = atlas->TexDesiredWidth; | ||||||
|     else |     else | ||||||
|         atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512; |         atlas->TexWidth = (surface_sqrt >= 4096 * 0.7f) ? 4096 : (surface_sqrt >= 2048 * 0.7f) ? 2048 : (surface_sqrt >= 1024 * 0.7f) ? 1024 : 512; | ||||||
|  |  | ||||||
|     // 5. Start packing |     // 5. Start packing | ||||||
|     // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). |     // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). | ||||||
| @@ -2262,7 +2262,7 @@ void ImFontAtlasBuildInit(ImFontAtlas* atlas) | |||||||
|     if (atlas->CustomRectIds[0] >= 0) |     if (atlas->CustomRectIds[0] >= 0) | ||||||
|         return; |         return; | ||||||
|     if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors)) |     if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors)) | ||||||
|         atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF*2+1, FONT_ATLAS_DEFAULT_TEX_DATA_H); |         atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_W_HALF * 2 + 1, FONT_ATLAS_DEFAULT_TEX_DATA_H); | ||||||
|     else |     else | ||||||
|         atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(2, 2); |         atlas->CustomRectIds[0] = atlas->AddCustomRectRegular(2, 2); | ||||||
| } | } | ||||||
| @@ -2712,7 +2712,7 @@ void ImFont::BuildLookupTable() | |||||||
|         tab_glyph.Codepoint = '\t'; |         tab_glyph.Codepoint = '\t'; | ||||||
|         tab_glyph.AdvanceX *= IM_TABSIZE; |         tab_glyph.AdvanceX *= IM_TABSIZE; | ||||||
|         IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX; |         IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX; | ||||||
|         IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size-1); |         IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size - 1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons) |     // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons) | ||||||
| @@ -3207,7 +3207,7 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col | |||||||
|     // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action. |     // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action. | ||||||
|     draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink() |     draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink() | ||||||
|     draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data); |     draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data); | ||||||
|     draw_list->CmdBuffer[draw_list->CmdBuffer.Size-1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size); |     draw_list->CmdBuffer[draw_list->CmdBuffer.Size - 1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size); | ||||||
|     draw_list->_VtxWritePtr = vtx_write; |     draw_list->_VtxWritePtr = vtx_write; | ||||||
|     draw_list->_IdxWritePtr = idx_write; |     draw_list->_IdxWritePtr = idx_write; | ||||||
|     draw_list->_VtxCurrentIdx = vtx_current_idx; |     draw_list->_VtxCurrentIdx = vtx_current_idx; | ||||||
| @@ -3293,10 +3293,10 @@ void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, Im | |||||||
|         pos -= offset; |         pos -= offset; | ||||||
|         const ImTextureID tex_id = font_atlas->TexID; |         const ImTextureID tex_id = font_atlas->TexID; | ||||||
|         draw_list->PushTextureID(tex_id); |         draw_list->PushTextureID(tex_id); | ||||||
|         draw_list->AddImage(tex_id, pos + ImVec2(1,0)*scale, pos + ImVec2(1,0)*scale + size*scale, uv[2], uv[3], col_shadow); |         draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale,    uv[2], uv[3], col_shadow); | ||||||
|         draw_list->AddImage(tex_id, pos + ImVec2(2,0)*scale, pos + ImVec2(2,0)*scale + size*scale, uv[2], uv[3], col_shadow); |         draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale,    uv[2], uv[3], col_shadow); | ||||||
|         draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[2], uv[3], col_border); |         draw_list->AddImage(tex_id, pos,                        pos + size * scale,                     uv[2], uv[3], col_border); | ||||||
|         draw_list->AddImage(tex_id, pos,                     pos + size*scale,                     uv[0], uv[1], col_fill); |         draw_list->AddImage(tex_id, pos,                        pos + size * scale,                     uv[0], uv[1], col_fill); | ||||||
|         draw_list->PopTextureID(); |         draw_list->PopTextureID(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -3551,7 +3551,7 @@ static unsigned int stb_decompress(unsigned char *output, const unsigned char *i | |||||||
| // Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding). | // Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding). | ||||||
| // The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size. | // The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size. | ||||||
| //----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||||
| static const char proggy_clean_ttf_compressed_data_base85[11980+1] = | static const char proggy_clean_ttf_compressed_data_base85[11980 + 1] = | ||||||
|     "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/" |     "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/" | ||||||
|     "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#" |     "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#" | ||||||
|     "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL" |     "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL" | ||||||
|   | |||||||
| @@ -290,21 +290,21 @@ IMGUI_API int           ImTextCountUtf8BytesFromStr(const ImWchar* in_text, cons | |||||||
| // We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.) | // We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.) | ||||||
| // We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself. | // We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself. | ||||||
| #ifdef IMGUI_DEFINE_MATH_OPERATORS | #ifdef IMGUI_DEFINE_MATH_OPERATORS | ||||||
| static inline ImVec2 operator*(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x*rhs, lhs.y*rhs); } | static inline ImVec2 operator*(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x * rhs, lhs.y * rhs); } | ||||||
| static inline ImVec2 operator/(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x/rhs, lhs.y/rhs); } | static inline ImVec2 operator/(const ImVec2& lhs, const float rhs)              { return ImVec2(lhs.x / rhs, lhs.y / rhs); } | ||||||
| static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x+rhs.x, lhs.y+rhs.y); } | static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x + rhs.x, lhs.y + rhs.y); } | ||||||
| static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x-rhs.x, lhs.y-rhs.y); } | static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x - rhs.x, lhs.y - rhs.y); } | ||||||
| static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x*rhs.x, lhs.y*rhs.y); } | static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); } | ||||||
| static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x/rhs.x, lhs.y/rhs.y); } | static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs)            { return ImVec2(lhs.x / rhs.x, lhs.y / rhs.y); } | ||||||
| static inline ImVec2& operator*=(ImVec2& lhs, const float rhs)                  { lhs.x *= rhs; lhs.y *= rhs; return lhs; } | static inline ImVec2& operator*=(ImVec2& lhs, const float rhs)                  { lhs.x *= rhs; lhs.y *= rhs; return lhs; } | ||||||
| static inline ImVec2& operator/=(ImVec2& lhs, const float rhs)                  { lhs.x /= rhs; lhs.y /= rhs; return lhs; } | static inline ImVec2& operator/=(ImVec2& lhs, const float rhs)                  { lhs.x /= rhs; lhs.y /= rhs; return lhs; } | ||||||
| static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; } | static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; } | ||||||
| static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; } | static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; } | ||||||
| static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; } | static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; } | ||||||
| static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; } | static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs)                { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; } | ||||||
| static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x+rhs.x, lhs.y+rhs.y, lhs.z+rhs.z, lhs.w+rhs.w); } | static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z, lhs.w + rhs.w); } | ||||||
| static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x-rhs.x, lhs.y-rhs.y, lhs.z-rhs.z, lhs.w-rhs.w); } | static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z, lhs.w - rhs.w); } | ||||||
| static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x*rhs.x, lhs.y*rhs.y, lhs.z*rhs.z, lhs.w*rhs.w); } | static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs)            { return ImVec4(lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z, lhs.w * rhs.w); } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Helpers: File System | // Helpers: File System | ||||||
| @@ -362,9 +362,9 @@ static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) | |||||||
| static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t)  { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); } | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t)  { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); } | ||||||
| static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)          { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); } | static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)          { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); } | ||||||
| static inline float  ImSaturate(float f)                                        { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; } | static inline float  ImSaturate(float f)                                        { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; } | ||||||
| static inline float  ImLengthSqr(const ImVec2& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y; } | static inline float  ImLengthSqr(const ImVec2& lhs)                             { return (lhs.x * lhs.x) + (lhs.y * lhs.y); } | ||||||
| static inline float  ImLengthSqr(const ImVec4& lhs)                             { return lhs.x*lhs.x + lhs.y*lhs.y + lhs.z*lhs.z + lhs.w*lhs.w; } | static inline float  ImLengthSqr(const ImVec4& lhs)                             { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); } | ||||||
| static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; } | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return 1.0f / ImSqrt(d); return fail_value; } | ||||||
| static inline float  ImFloor(float f)                                           { return (float)(int)(f); } | static inline float  ImFloor(float f)                                           { return (float)(int)(f); } | ||||||
| static inline ImVec2 ImFloor(const ImVec2& v)                                   { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); } | static inline ImVec2 ImFloor(const ImVec2& v)                                   { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); } | ||||||
| static inline int    ImModPositive(int a, int b)                                { return (a + b) % b; } | static inline int    ImModPositive(int a, int b)                                { return (a + b) % b; } | ||||||
| @@ -1315,7 +1315,7 @@ struct ImGuiContext | |||||||
|     int                     WantCaptureMouseNextFrame;          // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags |     int                     WantCaptureMouseNextFrame;          // Explicit capture via CaptureKeyboardFromApp()/CaptureMouseFromApp() sets those flags | ||||||
|     int                     WantCaptureKeyboardNextFrame; |     int                     WantCaptureKeyboardNextFrame; | ||||||
|     int                     WantTextInputNextFrame; |     int                     WantTextInputNextFrame; | ||||||
|     char                    TempBuffer[1024*3+1];               // Temporary text buffer |     char                    TempBuffer[1024 * 3 + 1];           // Temporary text buffer | ||||||
|  |  | ||||||
|     ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData) |     ImGuiContext(ImFontAtlas* shared_font_atlas) : BackgroundDrawList(&DrawListSharedData), ForegroundDrawList(&DrawListSharedData) | ||||||
|     { |     { | ||||||
| @@ -1355,7 +1355,7 @@ struct ImGuiContext | |||||||
|         ActiveIdUsingNavDirMask = 0x00; |         ActiveIdUsingNavDirMask = 0x00; | ||||||
|         ActiveIdUsingNavInputMask = 0x00; |         ActiveIdUsingNavInputMask = 0x00; | ||||||
|         ActiveIdUsingKeyInputMask = 0x00; |         ActiveIdUsingKeyInputMask = 0x00; | ||||||
|         ActiveIdClickOffset = ImVec2(-1,-1); |         ActiveIdClickOffset = ImVec2(-1, -1); | ||||||
|         ActiveIdWindow = NULL; |         ActiveIdWindow = NULL; | ||||||
|         ActiveIdSource = ImGuiInputSource_None; |         ActiveIdSource = ImGuiInputSource_None; | ||||||
|         ActiveIdMouseButton = 0; |         ActiveIdMouseButton = 0; | ||||||
| @@ -1650,7 +1650,7 @@ public: | |||||||
|     ImGuiID     GetIDFromRectangle(const ImRect& r_abs); |     ImGuiID     GetIDFromRectangle(const ImRect& r_abs); | ||||||
|  |  | ||||||
|     // We don't use g.FontSize because the window may be != g.CurrentWidow. |     // We don't use g.FontSize because the window may be != g.CurrentWidow. | ||||||
|     ImRect      Rect() const            { return ImRect(Pos.x, Pos.y, Pos.x+Size.x, Pos.y+Size.y); } |     ImRect      Rect() const            { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); } | ||||||
|     float       CalcFontSize() const    { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; } |     float       CalcFontSize() const    { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; } | ||||||
|     float       TitleBarHeight() const  { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; } |     float       TitleBarHeight() const  { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; } | ||||||
|     ImRect      TitleBarRect() const    { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); } |     ImRect      TitleBarRect() const    { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); } | ||||||
|   | |||||||
| @@ -160,7 +160,7 @@ void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags) | |||||||
|         // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop. |         // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop. | ||||||
|         const char* line = text; |         const char* line = text; | ||||||
|         const float line_height = GetTextLineHeight(); |         const float line_height = GetTextLineHeight(); | ||||||
|         ImVec2 text_size(0,0); |         ImVec2 text_size(0, 0); | ||||||
|  |  | ||||||
|         // Lines to skip (can't skip when logging text) |         // Lines to skip (can't skip when logging text) | ||||||
|         ImVec2 pos = text_pos; |         ImVec2 pos = text_pos; | ||||||
| @@ -332,8 +332,8 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) | |||||||
|     const float w = CalcItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2)); |     const ImRect value_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2)); | ||||||
|     const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y*2) + label_size); |     const ImRect total_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x : 0.0f), style.FramePadding.y * 2) + label_size); | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
|     if (!ItemAdd(total_bb, 0)) |     if (!ItemAdd(total_bb, 0)) | ||||||
|         return; |         return; | ||||||
| @@ -341,7 +341,7 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args) | |||||||
|     // Render |     // Render | ||||||
|     const char* value_text_begin = &g.TempBuffer[0]; |     const char* value_text_begin = &g.TempBuffer[0]; | ||||||
|     const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); |     const char* value_text_end = value_text_begin + ImFormatStringV(g.TempBuffer, IM_ARRAYSIZE(g.TempBuffer), fmt, args); | ||||||
|     RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f,0.5f)); |     RenderTextClipped(value_bb.Min, value_bb.Max, value_text_begin, value_text_end, NULL, ImVec2(0.0f, 0.5f)); | ||||||
|     if (label_size.x > 0.0f) |     if (label_size.x > 0.0f) | ||||||
|         RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label); |         RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label); | ||||||
| } | } | ||||||
| @@ -377,7 +377,7 @@ void ImGui::BulletTextV(const char* fmt, va_list args) | |||||||
|  |  | ||||||
|     // Render |     // Render | ||||||
|     ImU32 text_col = GetColorU32(ImGuiCol_Text); |     ImU32 text_col = GetColorU32(ImGuiCol_Text); | ||||||
|     RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, g.FontSize*0.5f), text_col); |     RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize * 0.5f, g.FontSize * 0.5f), text_col); | ||||||
|     RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false); |     RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -781,8 +781,8 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size) | |||||||
|     float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f; |     float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f; | ||||||
|     ImU32 cross_col = GetColorU32(ImGuiCol_Text); |     ImU32 cross_col = GetColorU32(ImGuiCol_Text); | ||||||
|     center -= ImVec2(0.5f, 0.5f); |     center -= ImVec2(0.5f, 0.5f); | ||||||
|     window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), cross_col, 1.0f); |     window->DrawList->AddLine(center + ImVec2(+cross_extent, +cross_extent), center + ImVec2(-cross_extent, -cross_extent), cross_col, 1.0f); | ||||||
|     window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), cross_col, 1.0f); |     window->DrawList->AddLine(center + ImVec2(+cross_extent, -cross_extent), center + ImVec2(-cross_extent, +cross_extent), cross_col, 1.0f); | ||||||
|  |  | ||||||
|     return pressed; |     return pressed; | ||||||
| } | } | ||||||
| @@ -1067,7 +1067,7 @@ bool ImGui::Checkbox(const char* label, bool* v) | |||||||
|     else if (*v) |     else if (*v) | ||||||
|     { |     { | ||||||
|         const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); |         const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f)); | ||||||
|         RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad*2.0f); |         RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (g.LogEnabled) |     if (g.LogEnabled) | ||||||
| @@ -1133,7 +1133,7 @@ bool ImGui::RadioButton(const char* label, bool active) | |||||||
|  |  | ||||||
|     if (style.FrameBorderSize > 0.0f) |     if (style.FrameBorderSize > 0.0f) | ||||||
|     { |     { | ||||||
|         window->DrawList->AddCircle(center + ImVec2(1,1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize); |         window->DrawList->AddCircle(center + ImVec2(1, 1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize); | ||||||
|         window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize); |         window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1166,7 +1166,7 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over | |||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|  |  | ||||||
|     ImVec2 pos = window->DC.CursorPos; |     ImVec2 pos = window->DC.CursorPos; | ||||||
|     ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y*2.0f); |     ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y * 2.0f); | ||||||
|     ImRect bb(pos, pos + size); |     ImRect bb(pos, pos + size); | ||||||
|     ItemSize(size, style.FramePadding.y); |     ItemSize(size, style.FramePadding.y); | ||||||
|     if (!ItemAdd(bb, 0)) |     if (!ItemAdd(bb, 0)) | ||||||
| @@ -1183,13 +1183,13 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over | |||||||
|     char overlay_buf[32]; |     char overlay_buf[32]; | ||||||
|     if (!overlay) |     if (!overlay) | ||||||
|     { |     { | ||||||
|         ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction*100+0.01f); |         ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction * 100 + 0.01f); | ||||||
|         overlay = overlay_buf; |         overlay = overlay_buf; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ImVec2 overlay_size = CalcTextSize(overlay, NULL); |     ImVec2 overlay_size = CalcTextSize(overlay, NULL); | ||||||
|     if (overlay_size.x > 0.0f) |     if (overlay_size.x > 0.0f) | ||||||
|         RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f,0.5f), &bb); |         RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f, 0.5f), &bb); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui::Bullet() | void ImGui::Bullet() | ||||||
| @@ -1200,18 +1200,18 @@ void ImGui::Bullet() | |||||||
|  |  | ||||||
|     ImGuiContext& g = *GImGui; |     ImGuiContext& g = *GImGui; | ||||||
|     const ImGuiStyle& style = g.Style; |     const ImGuiStyle& style = g.Style; | ||||||
|     const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y*2), g.FontSize); |     const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2), g.FontSize); | ||||||
|     const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height)); |     const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height)); | ||||||
|     ItemSize(bb); |     ItemSize(bb); | ||||||
|     if (!ItemAdd(bb, 0)) |     if (!ItemAdd(bb, 0)) | ||||||
|     { |     { | ||||||
|         SameLine(0, style.FramePadding.x*2); |         SameLine(0, style.FramePadding.x * 2); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Render and stay on same line |     // Render and stay on same line | ||||||
|     ImU32 text_col = GetColorU32(ImGuiCol_Text); |     ImU32 text_col = GetColorU32(ImGuiCol_Text); | ||||||
|     RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize*0.5f, line_height*0.5f), text_col); |     RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize * 0.5f, line_height * 0.5f), text_col); | ||||||
|     SameLine(0, style.FramePadding.x * 2.0f); |     SameLine(0, style.FramePadding.x * 2.0f); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1484,7 +1484,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF | |||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const float expected_w = CalcItemWidth(); |     const float expected_w = CalcItemWidth(); | ||||||
|     const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : expected_w; |     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 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 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)); | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
|     if (!ItemAdd(total_bb, id, &frame_bb)) |     if (!ItemAdd(total_bb, id, &frame_bb)) | ||||||
| @@ -1509,7 +1509,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF | |||||||
|     } |     } | ||||||
|     RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding); |     RenderFrameBorder(frame_bb.Min, frame_bb.Max, style.FrameRounding); | ||||||
|     if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview)) |     if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview)) | ||||||
|         RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f,0.0f)); |         RenderTextClipped(frame_bb.Min + style.FramePadding, ImVec2(value_x2, frame_bb.Max.y), preview_value, NULL, NULL, ImVec2(0.0f, 0.0f)); | ||||||
|     if (label_size.x > 0) |     if (label_size.x > 0) | ||||||
|         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); |         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); | ||||||
|  |  | ||||||
| @@ -2011,7 +2011,7 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const | |||||||
|  |  | ||||||
|     // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings |     // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings | ||||||
|     float adjust_delta = 0.0f; |     float adjust_delta = 0.0f; | ||||||
|     if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && g.IO.MouseDragMaxDistanceSqr[0] > 1.0f*1.0f) |     if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && g.IO.MouseDragMaxDistanceSqr[0] > 1.0f * 1.0f) | ||||||
|     { |     { | ||||||
|         adjust_delta = g.IO.MouseDelta[axis]; |         adjust_delta = g.IO.MouseDelta[axis]; | ||||||
|         if (g.IO.KeyAlt) |         if (g.IO.KeyAlt) | ||||||
| @@ -2148,7 +2148,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, | |||||||
|     const ImGuiID id = window->GetID(label); |     const ImGuiID id = window->GetID(label); | ||||||
|     const float w = CalcItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); |     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 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)); | ||||||
|  |  | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
| @@ -2369,12 +2369,12 @@ float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_m | |||||||
|         if (v_clamped < 0.0f) |         if (v_clamped < 0.0f) | ||||||
|         { |         { | ||||||
|             const float f = 1.0f - (float)((v_clamped - v_min) / (ImMin((TYPE)0, v_max) - v_min)); |             const float f = 1.0f - (float)((v_clamped - v_min) / (ImMin((TYPE)0, v_max) - v_min)); | ||||||
|             return (1.0f - ImPow(f, 1.0f/power)) * linear_zero_pos; |             return (1.0f - ImPow(f, 1.0f / power)) * linear_zero_pos; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             const float f = (float)((v_clamped - ImMax((TYPE)0, v_min)) / (v_max - ImMax((TYPE)0, v_min))); |             const float f = (float)((v_clamped - ImMax((TYPE)0, v_min)) / (v_max - ImMax((TYPE)0, v_min))); | ||||||
|             return linear_zero_pos + ImPow(f, 1.0f/power) * (1.0f - linear_zero_pos); |             return linear_zero_pos + ImPow(f, 1.0f / power) * (1.0f - linear_zero_pos); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -2450,7 +2450,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ | |||||||
|             } |             } | ||||||
|             else if (delta != 0.0f) |             else if (delta != 0.0f) | ||||||
|             { |             { | ||||||
|                 clicked_t = SliderCalcRatioFromValueT<TYPE,FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos); |                 clicked_t = SliderCalcRatioFromValueT<TYPE, FLOATTYPE>(data_type, *v, v_min, v_max, power, linear_zero_pos); | ||||||
|                 const int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0; |                 const int decimal_precision = is_decimal ? ImParseFormatPrecision(format, 3) : 0; | ||||||
|                 if ((decimal_precision > 0) || is_power) |                 if ((decimal_precision > 0) || is_power) | ||||||
|                 { |                 { | ||||||
| @@ -2522,7 +2522,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             // Round to user desired precision based on format string |             // Round to user desired precision based on format string | ||||||
|             v_new = RoundScalarWithFormatT<TYPE,SIGNEDTYPE>(format, data_type, v_new); |             v_new = RoundScalarWithFormatT<TYPE, SIGNEDTYPE>(format, data_type, v_new); | ||||||
|  |  | ||||||
|             // Apply result |             // Apply result | ||||||
|             if (*v != v_new) |             if (*v != v_new) | ||||||
| @@ -2565,23 +2565,23 @@ bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type | |||||||
|     case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; } |     case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; } | ||||||
|     case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; } |     case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, power, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; } | ||||||
|     case ImGuiDataType_S32: |     case ImGuiDataType_S32: | ||||||
|         IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN/2 && *(const ImS32*)p_max <= IM_S32_MAX/2); |         IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN / 2 && *(const ImS32*)p_max <= IM_S32_MAX / 2); | ||||||
|         return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)p_v,  *(const ImS32*)p_min,  *(const ImS32*)p_max,  format, power, flags, out_grab_bb); |         return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)p_v,  *(const ImS32*)p_min,  *(const ImS32*)p_max,  format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_U32: |     case ImGuiDataType_U32: | ||||||
|         IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX/2); |         IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX / 2); | ||||||
|         return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)p_v,  *(const ImU32*)p_min,  *(const ImU32*)p_max,  format, power, flags, out_grab_bb); |         return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)p_v,  *(const ImU32*)p_min,  *(const ImU32*)p_max,  format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_S64: |     case ImGuiDataType_S64: | ||||||
|         IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN/2 && *(const ImS64*)p_max <= IM_S64_MAX/2); |         IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN / 2 && *(const ImS64*)p_max <= IM_S64_MAX / 2); | ||||||
|         return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)p_v,  *(const ImS64*)p_min,  *(const ImS64*)p_max,  format, power, flags, out_grab_bb); |         return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)p_v,  *(const ImS64*)p_min,  *(const ImS64*)p_max,  format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_U64: |     case ImGuiDataType_U64: | ||||||
|         IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX/2); |         IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX / 2); | ||||||
|         return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)p_v,  *(const ImU64*)p_min,  *(const ImU64*)p_max,  format, power, flags, out_grab_bb); |         return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)p_v,  *(const ImU64*)p_min,  *(const ImU64*)p_max,  format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_Float: |     case ImGuiDataType_Float: | ||||||
|         IM_ASSERT(*(const float*)p_min >= -FLT_MAX/2.0f && *(const float*)p_max <= FLT_MAX/2.0f); |         IM_ASSERT(*(const float*)p_min >= -FLT_MAX / 2.0f && *(const float*)p_max <= FLT_MAX / 2.0f); | ||||||
|         return SliderBehaviorT<float, float, float >(bb, id, data_type, (float*)p_v,  *(const float*)p_min,  *(const float*)p_max,  format, power, flags, out_grab_bb); |         return SliderBehaviorT<float, float, float >(bb, id, data_type, (float*)p_v,  *(const float*)p_min,  *(const float*)p_max,  format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_Double: |     case ImGuiDataType_Double: | ||||||
|         IM_ASSERT(*(const double*)p_min >= -DBL_MAX/2.0f && *(const double*)p_max <= DBL_MAX/2.0f); |         IM_ASSERT(*(const double*)p_min >= -DBL_MAX / 2.0f && *(const double*)p_max <= DBL_MAX / 2.0f); | ||||||
|         return SliderBehaviorT<double,double,double>(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, power, flags, out_grab_bb); |         return SliderBehaviorT<double, double, double>(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, power, flags, out_grab_bb); | ||||||
|     case ImGuiDataType_COUNT: break; |     case ImGuiDataType_COUNT: break; | ||||||
|     } |     } | ||||||
|     IM_ASSERT(0); |     IM_ASSERT(0); | ||||||
| @@ -2602,7 +2602,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat | |||||||
|     const float w = CalcItemWidth(); |     const float w = CalcItemWidth(); | ||||||
|  |  | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y*2.0f)); |     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 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)); | ||||||
|  |  | ||||||
|     ItemSize(total_bb, style.FramePadding.y); |     ItemSize(total_bb, style.FramePadding.y); | ||||||
| @@ -2659,7 +2659,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat | |||||||
|     // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. |     // Display value using user-provided display format so user can add prefix/suffix/decorations to the value. | ||||||
|     char value_buf[64]; |     char value_buf[64]; | ||||||
|     const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); |     const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); | ||||||
|     RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.5f)); |     RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f)); | ||||||
|  |  | ||||||
|     if (label_size.x > 0.0f) |     if (label_size.x > 0.0f) | ||||||
|         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); |         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); | ||||||
| @@ -2728,9 +2728,9 @@ bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, fl | |||||||
| { | { | ||||||
|     if (format == NULL) |     if (format == NULL) | ||||||
|         format = "%.0f deg"; |         format = "%.0f deg"; | ||||||
|     float v_deg = (*v_rad) * 360.0f / (2*IM_PI); |     float v_deg = (*v_rad) * 360.0f / (2 * IM_PI); | ||||||
|     bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, 1.0f); |     bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, 1.0f); | ||||||
|     *v_rad = v_deg * (2*IM_PI) / 360.0f; |     *v_rad = v_deg * (2 * IM_PI) / 360.0f; | ||||||
|     return value_changed; |     return value_changed; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -2806,7 +2806,7 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d | |||||||
|     // For the vertical slider we allow centered text to overlap the frame padding |     // For the vertical slider we allow centered text to overlap the frame padding | ||||||
|     char value_buf[64]; |     char value_buf[64]; | ||||||
|     const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); |     const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format); | ||||||
|     RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f,0.0f)); |     RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.0f)); | ||||||
|     if (label_size.x > 0.0f) |     if (label_size.x > 0.0f) | ||||||
|         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); |         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); | ||||||
|  |  | ||||||
| @@ -3097,7 +3097,7 @@ bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_dat | |||||||
| bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags) | bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags) | ||||||
| { | { | ||||||
|     flags |= ImGuiInputTextFlags_CharsScientific; |     flags |= ImGuiInputTextFlags_CharsScientific; | ||||||
|     return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step>0.0f ? &step : NULL), (void*)(step_fast>0.0f ? &step_fast : NULL), format, flags); |     return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step > 0.0f ? &step : NULL), (void*)(step_fast > 0.0f ? &step_fast : NULL), format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags) | bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags) | ||||||
| @@ -3154,7 +3154,7 @@ bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiIn | |||||||
| { | { | ||||||
|     // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes. |     // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes. | ||||||
|     const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d"; |     const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d"; | ||||||
|     return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, flags); |     return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step > 0 ? &step : NULL), (void*)(step_fast > 0 ? &step_fast : NULL), format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags) | bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags) | ||||||
| @@ -3175,7 +3175,7 @@ bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags) | |||||||
| bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags) | bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags) | ||||||
| { | { | ||||||
|     flags |= ImGuiInputTextFlags_CharsScientific; |     flags |= ImGuiInputTextFlags_CharsScientific; | ||||||
|     return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step>0.0 ? &step : NULL), (void*)(step_fast>0.0 ? &step_fast : NULL), format, flags); |     return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step > 0.0 ? &step : NULL), (void*)(step_fast > 0.0 ? &step_fast : NULL), format, flags); | ||||||
| } | } | ||||||
|  |  | ||||||
| //------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||||||
| @@ -3286,10 +3286,10 @@ static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* ob | |||||||
| } | } | ||||||
|  |  | ||||||
| static bool is_separator(unsigned int c)                                        { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; } | static bool is_separator(unsigned int c)                                        { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|'; } | ||||||
| static int  is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx)      { return idx > 0 ? (is_separator( obj->TextW[idx-1] ) && !is_separator( obj->TextW[idx] ) ) : 1; } | static int  is_word_boundary_from_right(STB_TEXTEDIT_STRING* obj, int idx)      { return idx > 0 ? (is_separator(obj->TextW[idx - 1]) && !is_separator(obj->TextW[idx]) ) : 1; } | ||||||
| static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)   { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; } | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)   { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; } | ||||||
| #ifdef __APPLE__    // FIXME: Move setting to IO structure | #ifdef __APPLE__    // FIXME: Move setting to IO structure | ||||||
| static int  is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx)       { return idx > 0 ? (!is_separator( obj->TextW[idx-1] ) && is_separator( obj->TextW[idx] ) ) : 1; } | static int  is_word_boundary_from_left(STB_TEXTEDIT_STRING* obj, int idx)       { return idx > 0 ? (!is_separator(obj->TextW[idx - 1]) && is_separator(obj->TextW[idx]) ) : 1; } | ||||||
| static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; } | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; } | ||||||
| #else | #else | ||||||
| static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(STB_TEXTEDIT_STRING* obj, int idx)  { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; } | ||||||
| @@ -3495,7 +3495,7 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f | |||||||
|         // Turn a-z into A-Z |         // Turn a-z into A-Z | ||||||
|         if (flags & ImGuiInputTextFlags_CharsUppercase) |         if (flags & ImGuiInputTextFlags_CharsUppercase) | ||||||
|             if (c >= 'a' && c <= 'z') |             if (c >= 'a' && c <= 'z') | ||||||
|                 *p_char = (c += (unsigned int)('A'-'a')); |                 *p_char = (c += (unsigned int)('A' - 'a')); | ||||||
|  |  | ||||||
|         if (flags & ImGuiInputTextFlags_CharsNoBlank) |         if (flags & ImGuiInputTextFlags_CharsNoBlank) | ||||||
|             if (ImCharIsBlankW(c)) |             if (ImCharIsBlankW(c)) | ||||||
| @@ -3556,7 +3556,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|         BeginGroup(); |         BeginGroup(); | ||||||
|     const ImGuiID id = window->GetID(label); |     const ImGuiID id = window->GetID(label); | ||||||
|     const ImVec2 label_size = CalcTextSize(label, NULL, true); |     const ImVec2 label_size = CalcTextSize(label, NULL, true); | ||||||
|     const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line |     const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y * 2.0f); // Arbitrary default of 8 lines high for multi-line | ||||||
|     const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y); |     const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y); | ||||||
|  |  | ||||||
|     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); |     const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); | ||||||
| @@ -3746,7 +3746,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|  |  | ||||||
|         // Edit in progress |         // Edit in progress | ||||||
|         const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX; |         const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX; | ||||||
|         const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f)); |         const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize * 0.5f)); | ||||||
|  |  | ||||||
|         const bool is_osx = io.ConfigMacOSXBehaviors; |         const bool is_osx = io.ConfigMacOSXBehaviors; | ||||||
|         if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0])) |         if (select_all || (hovered && !is_osx && io.MouseDoubleClicked[0])) | ||||||
| @@ -3842,9 +3842,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|             if (!state->HasSelection()) |             if (!state->HasSelection()) | ||||||
|             { |             { | ||||||
|                 if (is_wordmove_key_down) |                 if (is_wordmove_key_down) | ||||||
|                     state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT); |                     state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT); | ||||||
|                 else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) |                 else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl) | ||||||
|                     state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART|STB_TEXTEDIT_K_SHIFT); |                     state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT); | ||||||
|             } |             } | ||||||
|             state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); |             state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); | ||||||
|         } |         } | ||||||
| @@ -3903,7 +3903,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|             { |             { | ||||||
|                 // Filter pasted buffer |                 // Filter pasted buffer | ||||||
|                 const int clipboard_len = (int)strlen(clipboard); |                 const int clipboard_len = (int)strlen(clipboard); | ||||||
|                 ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len+1) * sizeof(ImWchar)); |                 ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len + 1) * sizeof(ImWchar)); | ||||||
|                 int clipboard_filtered_len = 0; |                 int clipboard_filtered_len = 0; | ||||||
|                 for (const char* s = clipboard; *s; ) |                 for (const char* s = clipboard; *s; ) | ||||||
|                 { |                 { | ||||||
| @@ -4235,7 +4235,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_ | |||||||
|                 { |                 { | ||||||
|                     ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true); |                     ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true); | ||||||
|                     if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines |                     if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines | ||||||
|                     ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos +ImVec2(rect_size.x, bg_offy_dn)); |                     ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos + ImVec2(rect_size.x, bg_offy_dn)); | ||||||
|                     rect.ClipWith(clip_rect); |                     rect.ClipWith(clip_rect); | ||||||
|                     if (rect.Overlaps(clip_rect)) |                     if (rect.Overlaps(clip_rect)) | ||||||
|                         draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color); |                         draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color); | ||||||
| @@ -4406,8 +4406,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|     if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0) |     if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0) | ||||||
|     { |     { | ||||||
|         // RGB/HSV 0..255 Sliders |         // RGB/HSV 0..255 Sliders | ||||||
|         const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components-1)) / (float)components)); |         const float w_item_one  = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components)); | ||||||
|         const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components-1))); |         const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components - 1))); | ||||||
|  |  | ||||||
|         const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x); |         const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x); | ||||||
|         static const char* ids[4] = { "##X", "##Y", "##Z", "##W" }; |         static const char* ids[4] = { "##X", "##Y", "##Z", "##W" }; | ||||||
| @@ -4434,7 +4434,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|             // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0. |             // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0. | ||||||
|             if (flags & ImGuiColorEditFlags_Float) |             if (flags & ImGuiColorEditFlags_Float) | ||||||
|             { |             { | ||||||
|                 value_changed |= DragFloat(ids[n], &f[n], 1.0f/255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]); |                 value_changed |= DragFloat(ids[n], &f[n], 1.0f / 255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]); | ||||||
|                 value_changed_as_float |= value_changed; |                 value_changed_as_float |= value_changed; | ||||||
|             } |             } | ||||||
|             else |             else | ||||||
| @@ -4450,9 +4450,9 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|         // RGB Hexadecimal Input |         // RGB Hexadecimal Input | ||||||
|         char buf[64]; |         char buf[64]; | ||||||
|         if (alpha) |         if (alpha) | ||||||
|             ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255), ImClamp(i[3],0,255)); |             ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0], 0, 255), ImClamp(i[1], 0, 255), ImClamp(i[2], 0, 255), ImClamp(i[3], 0, 255)); | ||||||
|         else |         else | ||||||
|             ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0],0,255), ImClamp(i[1],0,255), ImClamp(i[2],0,255)); |             ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0], 0, 255), ImClamp(i[1], 0, 255), ImClamp(i[2], 0, 255)); | ||||||
|         SetNextItemWidth(w_inputs); |         SetNextItemWidth(w_inputs); | ||||||
|         if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) |         if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) | ||||||
|         { |         { | ||||||
| @@ -4484,7 +4484,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|                 // Store current color and open a picker |                 // Store current color and open a picker | ||||||
|                 g.ColorPickerRef = col_v4; |                 g.ColorPickerRef = col_v4; | ||||||
|                 OpenPopup("picker"); |                 OpenPopup("picker"); | ||||||
|                 SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1,style.ItemSpacing.y)); |                 SetNextWindowPos(window->DC.LastItemRect.GetBL() + ImVec2(-1, style.ItemSpacing.y)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!(flags & ImGuiColorEditFlags_NoOptions)) |         if (!(flags & ImGuiColorEditFlags_NoOptions)) | ||||||
| @@ -4645,7 +4645,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|     float wheel_thickness = sv_picker_size * 0.08f; |     float wheel_thickness = sv_picker_size * 0.08f; | ||||||
|     float wheel_r_outer = sv_picker_size * 0.50f; |     float wheel_r_outer = sv_picker_size * 0.50f; | ||||||
|     float wheel_r_inner = wheel_r_outer - wheel_thickness; |     float wheel_r_inner = wheel_r_outer - wheel_thickness; | ||||||
|     ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size*0.5f); |     ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size * 0.5f); | ||||||
|  |  | ||||||
|     // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic. |     // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic. | ||||||
|     float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f); |     float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f); | ||||||
| @@ -4684,10 +4684,10 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|             ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center; |             ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center; | ||||||
|             ImVec2 current_off = g.IO.MousePos - wheel_center; |             ImVec2 current_off = g.IO.MousePos - wheel_center; | ||||||
|             float initial_dist2 = ImLengthSqr(initial_off); |             float initial_dist2 = ImLengthSqr(initial_off); | ||||||
|             if (initial_dist2 >= (wheel_r_inner-1)*(wheel_r_inner-1) && initial_dist2 <= (wheel_r_outer+1)*(wheel_r_outer+1)) |             if (initial_dist2 >= (wheel_r_inner - 1) * (wheel_r_inner - 1) && initial_dist2 <= (wheel_r_outer + 1) * (wheel_r_outer + 1)) | ||||||
|             { |             { | ||||||
|                 // Interactive with Hue wheel |                 // Interactive with Hue wheel | ||||||
|                 H = ImAtan2(current_off.y, current_off.x) / IM_PI*0.5f; |                 H = ImAtan2(current_off.y, current_off.x) / IM_PI * 0.5f; | ||||||
|                 if (H < 0.0f) |                 if (H < 0.0f) | ||||||
|                     H += 1.0f; |                     H += 1.0f; | ||||||
|                 value_changed = value_changed_h = true; |                 value_changed = value_changed_h = true; | ||||||
| @@ -4716,8 +4716,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|         InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size)); |         InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size)); | ||||||
|         if (IsItemActive()) |         if (IsItemActive()) | ||||||
|         { |         { | ||||||
|             S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size-1)); |             S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size - 1)); | ||||||
|             V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); |             V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1)); | ||||||
|             value_changed = value_changed_sv = true; |             value_changed = value_changed_sv = true; | ||||||
|         } |         } | ||||||
|         if (!(flags & ImGuiColorEditFlags_NoOptions)) |         if (!(flags & ImGuiColorEditFlags_NoOptions)) | ||||||
| @@ -4728,7 +4728,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|         InvisibleButton("hue", ImVec2(bars_width, sv_picker_size)); |         InvisibleButton("hue", ImVec2(bars_width, sv_picker_size)); | ||||||
|         if (IsItemActive()) |         if (IsItemActive()) | ||||||
|         { |         { | ||||||
|             H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); |             H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1)); | ||||||
|             value_changed = value_changed_h = true; |             value_changed = value_changed_h = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -4740,7 +4740,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|         InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size)); |         InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size)); | ||||||
|         if (IsItemActive()) |         if (IsItemActive()) | ||||||
|         { |         { | ||||||
|             col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size-1)); |             col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1)); | ||||||
|             value_changed = true; |             value_changed = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -4791,7 +4791,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|     { |     { | ||||||
|         if (flags & ImGuiColorEditFlags_InputRGB) |         if (flags & ImGuiColorEditFlags_InputRGB) | ||||||
|         { |         { | ||||||
|             ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]); |             ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10 * 1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]); | ||||||
|             g.ColorEditLastHue = H; |             g.ColorEditLastHue = H; | ||||||
|             g.ColorEditLastSat = S; |             g.ColorEditLastSat = S; | ||||||
|             memcpy(g.ColorEditLastColor, col, sizeof(float) * 3); |             memcpy(g.ColorEditLastColor, col, sizeof(float) * 3); | ||||||
| @@ -4894,17 +4894,17 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|             // Paint colors over existing vertices |             // Paint colors over existing vertices | ||||||
|             ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner); |             ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner); | ||||||
|             ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner); |             ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner); | ||||||
|             ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n+1]); |             ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n + 1]); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Render Cursor + preview on Hue Wheel |         // Render Cursor + preview on Hue Wheel | ||||||
|         float cos_hue_angle = ImCos(H * 2.0f * IM_PI); |         float cos_hue_angle = ImCos(H * 2.0f * IM_PI); | ||||||
|         float sin_hue_angle = ImSin(H * 2.0f * IM_PI); |         float sin_hue_angle = ImSin(H * 2.0f * IM_PI); | ||||||
|         ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner+wheel_r_outer)*0.5f); |         ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner + wheel_r_outer) * 0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner + wheel_r_outer) * 0.5f); | ||||||
|         float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f; |         float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f; | ||||||
|         int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32); |         int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32); | ||||||
|         draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments); |         draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments); | ||||||
|         draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad+1, col_midgrey, hue_cursor_segments); |         draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad + 1, col_midgrey, hue_cursor_segments); | ||||||
|         draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments); |         draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments); | ||||||
|  |  | ||||||
|         // Render SV triangle (rotated according to hue) |         // Render SV triangle (rotated according to hue) | ||||||
| @@ -4942,7 +4942,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl | |||||||
|     // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range) |     // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range) | ||||||
|     float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f; |     float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f; | ||||||
|     draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12); |     draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12); | ||||||
|     draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad+1, col_midgrey, 12); |     draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad + 1, col_midgrey, 12); | ||||||
|     draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12); |     draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12); | ||||||
|  |  | ||||||
|     // Render alpha bar |     // Render alpha bar | ||||||
| @@ -5014,8 +5014,8 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl | |||||||
|     if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f) |     if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f) | ||||||
|     { |     { | ||||||
|         float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f); |         float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f); | ||||||
|         RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight); |         RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight); | ||||||
|         window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft); |         window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft); | ||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
| @@ -5133,7 +5133,7 @@ void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags) | |||||||
|  |  | ||||||
|     if (allow_opt_inputs || allow_opt_datatype) |     if (allow_opt_inputs || allow_opt_datatype) | ||||||
|         Separator(); |         Separator(); | ||||||
|     if (Button("Copy as..", ImVec2(-1,0))) |     if (Button("Copy as..", ImVec2(-1, 0))) | ||||||
|         OpenPopup("Copy"); |         OpenPopup("Copy"); | ||||||
|     if (BeginPopup("Copy")) |     if (BeginPopup("Copy")) | ||||||
|     { |     { | ||||||
| @@ -5177,7 +5177,7 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl | |||||||
|             // Draw small/thumbnail version of each picker type (over an invisible button for selection) |             // Draw small/thumbnail version of each picker type (over an invisible button for selection) | ||||||
|             if (picker_type > 0) Separator(); |             if (picker_type > 0) Separator(); | ||||||
|             PushID(picker_type); |             PushID(picker_type); | ||||||
|             ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha); |             ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoSidePreview | (flags & ImGuiColorEditFlags_NoAlpha); | ||||||
|             if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar; |             if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar; | ||||||
|             if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel; |             if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel; | ||||||
|             ImVec2 backup_pos = GetCursorScreenPos(); |             ImVec2 backup_pos = GetCursorScreenPos(); | ||||||
| @@ -5361,7 +5361,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l | |||||||
|     const ImVec2 label_size = CalcTextSize(label, label_end, false); |     const ImVec2 label_size = CalcTextSize(label, label_end, false); | ||||||
|  |  | ||||||
|     // We vertically grow up to current line height up the typical widget height. |     // We vertically grow up to current line height up the typical widget height. | ||||||
|     const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y*2), label_size.y + padding.y*2); |     const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y * 2), label_size.y + padding.y * 2); | ||||||
|     ImRect frame_bb; |     ImRect frame_bb; | ||||||
|     frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x; |     frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x; | ||||||
|     frame_bb.Min.y = window->DC.CursorPos.y; |     frame_bb.Min.y = window->DC.CursorPos.y; | ||||||
| @@ -5375,9 +5375,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l | |||||||
|         frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f); |         frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2);               // Collapser arrow width + Spacing |     const float text_offset_x = g.FontSize + (display_frame ? padding.x * 3 : padding.x * 2);           // Collapser arrow width + Spacing | ||||||
|     const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset);                    // Latch before ItemSize changes it |     const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset);                    // Latch before ItemSize changes it | ||||||
|     const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f);    // Include collapser |     const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x * 2 : 0.0f);  // Include collapser | ||||||
|     ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y); |     ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y); | ||||||
|     ItemSize(ImVec2(text_width, frame_height), padding.y); |     ItemSize(ImVec2(text_width, frame_height), padding.y); | ||||||
|  |  | ||||||
| @@ -5511,9 +5511,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l | |||||||
|             // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here. |             // NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here. | ||||||
|             const char log_prefix[] = "\n##"; |             const char log_prefix[] = "\n##"; | ||||||
|             const char log_suffix[] = "##"; |             const char log_suffix[] = "##"; | ||||||
|             LogRenderedText(&text_pos, log_prefix, log_prefix+3); |             LogRenderedText(&text_pos, log_prefix, log_prefix + 3); | ||||||
|             RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size); |             RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size); | ||||||
|             LogRenderedText(&text_pos, log_suffix, log_suffix+2); |             LogRenderedText(&text_pos, log_suffix, log_suffix + 2); | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
| @@ -5988,7 +5988,7 @@ int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_get | |||||||
|             const float v0 = values_getter(data, (v_idx + values_offset) % values_count); |             const float v0 = values_getter(data, (v_idx + values_offset) % values_count); | ||||||
|             const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count); |             const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count); | ||||||
|             if (plot_type == ImGuiPlotType_Lines) |             if (plot_type == ImGuiPlotType_Lines) | ||||||
|                 SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1); |                 SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx + 1, v1); | ||||||
|             else if (plot_type == ImGuiPlotType_Histogram) |             else if (plot_type == ImGuiPlotType_Histogram) | ||||||
|                 SetTooltip("%d: %8.4g", v_idx, v0); |                 SetTooltip("%d: %8.4g", v_idx, v0); | ||||||
|             idx_hovered = v_idx; |             idx_hovered = v_idx; | ||||||
| @@ -6034,7 +6034,7 @@ int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_get | |||||||
|  |  | ||||||
|     // Text overlay |     // Text overlay | ||||||
|     if (overlay_text) |     if (overlay_text) | ||||||
|         RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f,0.0f)); |         RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f, 0.0f)); | ||||||
|  |  | ||||||
|     if (label_size.x > 0.0f) |     if (label_size.x > 0.0f) | ||||||
|         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label); |         RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label); | ||||||
| @@ -7538,7 +7538,7 @@ void ImGui::SetColumnOffset(int column_index, float offset) | |||||||
|         column_index = columns->Current; |         column_index = columns->Current; | ||||||
|     IM_ASSERT(column_index < columns->Columns.Size); |     IM_ASSERT(column_index < columns->Columns.Size); | ||||||
|  |  | ||||||
|     const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count-1); |     const bool preserve_width = !(columns->Flags & ImGuiColumnsFlags_NoPreserveWidths) && (column_index < columns->Count - 1); | ||||||
|     const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f; |     const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f; | ||||||
|  |  | ||||||
|     if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow)) |     if (!(columns->Flags & ImGuiColumnsFlags_NoForceWithinWindow)) | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ | |||||||
| // stb_compress* from stb.h - declaration | // stb_compress* from stb.h - declaration | ||||||
| typedef unsigned int stb_uint; | typedef unsigned int stb_uint; | ||||||
| typedef unsigned char stb_uchar; | typedef unsigned char stb_uchar; | ||||||
| stb_uint stb_compress(stb_uchar *out,stb_uchar *in,stb_uint len); | stb_uint stb_compress(stb_uchar* out, stb_uchar* in, stb_uint len); | ||||||
|  |  | ||||||
| static bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression); | static bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression); | ||||||
|  |  | ||||||
| @@ -54,7 +54,7 @@ int main(int argc, char** argv) | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     bool ret = binary_to_compressed_c(argv[argn], argv[argn+1], use_base85_encoding, use_compression); |     bool ret = binary_to_compressed_c(argv[argn], argv[argn + 1], use_base85_encoding, use_compression); | ||||||
|     if (!ret) |     if (!ret) | ||||||
|         fprintf(stderr, "Error opening or reading file: '%s'\n", argv[argn]); |         fprintf(stderr, "Error opening or reading file: '%s'\n", argv[argn]); | ||||||
|     return ret ? 0 : 1; |     return ret ? 0 : 1; | ||||||
| @@ -63,7 +63,7 @@ int main(int argc, char** argv) | |||||||
| char Encode85Byte(unsigned int x) | char Encode85Byte(unsigned int x) | ||||||
| { | { | ||||||
|     x = (x % 85) + 35; |     x = (x % 85) + 35; | ||||||
|     return (x>='\\') ? x+1 : x; |     return (x >= '\\') ? x + 1 : x; | ||||||
| } | } | ||||||
|  |  | ||||||
| bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression) | bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_base85_encoding, bool use_compression) | ||||||
| @@ -73,7 +73,7 @@ bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_b | |||||||
|     if (!f) return false; |     if (!f) return false; | ||||||
|     int data_sz; |     int data_sz; | ||||||
|     if (fseek(f, 0, SEEK_END) || (data_sz = (int)ftell(f)) == -1 || fseek(f, 0, SEEK_SET)) { fclose(f); return false; } |     if (fseek(f, 0, SEEK_END) || (data_sz = (int)ftell(f)) == -1 || fseek(f, 0, SEEK_SET)) { fclose(f); return false; } | ||||||
|     char* data = new char[data_sz+4]; |     char* data = new char[data_sz + 4]; | ||||||
|     if (fread(data, 1, data_sz, f) != (size_t)data_sz) { fclose(f); delete[] data; return false; } |     if (fread(data, 1, data_sz, f) != (size_t)data_sz) { fclose(f); delete[] data; return false; } | ||||||
|     memset((void*)(((char*)data) + data_sz), 0, 4); |     memset((void*)(((char*)data) + data_sz), 0, 4); | ||||||
|     fclose(f); |     fclose(f); | ||||||
| @@ -83,16 +83,16 @@ bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_b | |||||||
|     char* compressed = use_compression ? new char[maxlen] : data; |     char* compressed = use_compression ? new char[maxlen] : data; | ||||||
|     int compressed_sz = use_compression ? stb_compress((stb_uchar*)compressed, (stb_uchar*)data, data_sz) : data_sz; |     int compressed_sz = use_compression ? stb_compress((stb_uchar*)compressed, (stb_uchar*)data, data_sz) : data_sz; | ||||||
|     if (use_compression) |     if (use_compression) | ||||||
| 		memset(compressed + compressed_sz, 0, maxlen - compressed_sz); |         memset(compressed + compressed_sz, 0, maxlen - compressed_sz); | ||||||
|  |  | ||||||
|     // Output as Base85 encoded |     // Output as Base85 encoded | ||||||
|     FILE* out = stdout; |     FILE* out = stdout; | ||||||
|     fprintf(out, "// File: '%s' (%d bytes)\n", filename, (int)data_sz); |     fprintf(out, "// File: '%s' (%d bytes)\n", filename, (int)data_sz); | ||||||
|     fprintf(out, "// Exported using binary_to_compressed_c.cpp\n"); |     fprintf(out, "// Exported using binary_to_compressed_c.cpp\n"); | ||||||
| 	const char* compressed_str = use_compression ? "compressed_" : ""; |     const char* compressed_str = use_compression ? "compressed_" : ""; | ||||||
|     if (use_base85_encoding) |     if (use_base85_encoding) | ||||||
|     { |     { | ||||||
|         fprintf(out, "static const char %s_%sdata_base85[%d+1] =\n    \"", symbol, compressed_str, (int)((compressed_sz+3)/4)*5); |         fprintf(out, "static const char %s_%sdata_base85[%d+1] =\n    \"", symbol, compressed_str, (int)((compressed_sz + 3) / 4)*5); | ||||||
|         char prev_c = 0; |         char prev_c = 0; | ||||||
|         for (int src_i = 0; src_i < compressed_sz; src_i += 4) |         for (int src_i = 0; src_i < compressed_sz; src_i += 4) | ||||||
|         { |         { | ||||||
| @@ -104,7 +104,7 @@ bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_b | |||||||
|                 fprintf(out, (c == '?' && prev_c == '?') ? "\\%c" : "%c", c); |                 fprintf(out, (c == '?' && prev_c == '?') ? "\\%c" : "%c", c); | ||||||
|                 prev_c = c; |                 prev_c = c; | ||||||
|             } |             } | ||||||
|             if ((src_i % 112) == 112-4) |             if ((src_i % 112) == 112 - 4) | ||||||
|                 fprintf(out, "\"\n    \""); |                 fprintf(out, "\"\n    \""); | ||||||
|         } |         } | ||||||
|         fprintf(out, "\";\n\n"); |         fprintf(out, "\";\n\n"); | ||||||
| @@ -112,7 +112,7 @@ bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_b | |||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         fprintf(out, "static const unsigned int %s_%ssize = %d;\n", symbol, compressed_str, (int)compressed_sz); |         fprintf(out, "static const unsigned int %s_%ssize = %d;\n", symbol, compressed_str, (int)compressed_sz); | ||||||
|         fprintf(out, "static const unsigned int %s_%sdata[%d/4] =\n{", symbol, compressed_str, (int)((compressed_sz+3)/4)*4); |         fprintf(out, "static const unsigned int %s_%sdata[%d/4] =\n{", symbol, compressed_str, (int)((compressed_sz + 3) / 4)*4); | ||||||
|         int column = 0; |         int column = 0; | ||||||
|         for (int i = 0; i < compressed_sz; i += 4) |         for (int i = 0; i < compressed_sz; i += 4) | ||||||
|         { |         { | ||||||
| @@ -128,7 +128,7 @@ bool binary_to_compressed_c(const char* filename, const char* symbol, bool use_b | |||||||
|     // Cleanup |     // Cleanup | ||||||
|     delete[] data; |     delete[] data; | ||||||
|     if (use_compression) |     if (use_compression) | ||||||
| 	    delete[] compressed; |         delete[] compressed; | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -502,7 +502,7 @@ bool ImFontAtlasBuildWithFreeType(FT_Library ft_library, ImFontAtlas* atlas, uns | |||||||
|     if (atlas->TexDesiredWidth > 0) |     if (atlas->TexDesiredWidth > 0) | ||||||
|         atlas->TexWidth = atlas->TexDesiredWidth; |         atlas->TexWidth = atlas->TexDesiredWidth; | ||||||
|     else |     else | ||||||
|         atlas->TexWidth = (surface_sqrt >= 4096*0.7f) ? 4096 : (surface_sqrt >= 2048*0.7f) ? 2048 : (surface_sqrt >= 1024*0.7f) ? 1024 : 512; |         atlas->TexWidth = (surface_sqrt >= 4096 * 0.7f) ? 4096 : (surface_sqrt >= 2048 * 0.7f) ? 2048 : (surface_sqrt >= 1024 * 0.7f) ? 1024 : 512; | ||||||
|  |  | ||||||
|     // 5. Start packing |     // 5. Start packing | ||||||
|     // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). |     // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values). | ||||||
| @@ -609,8 +609,8 @@ bool ImFontAtlasBuildWithFreeType(FT_Library ft_library, ImFontAtlas* atlas, uns | |||||||
| } | } | ||||||
|  |  | ||||||
| // Default memory allocators | // Default memory allocators | ||||||
| static void* ImFreeTypeDefaultAllocFunc(size_t size, void* user_data)	{ IM_UNUSED(user_data); return IM_ALLOC(size); } | static void* ImFreeTypeDefaultAllocFunc(size_t size, void* user_data)   { IM_UNUSED(user_data); return IM_ALLOC(size); } | ||||||
| static void  ImFreeTypeDefaultFreeFunc(void* ptr, void* user_data)	    { IM_UNUSED(user_data); IM_FREE(ptr); } | static void  ImFreeTypeDefaultFreeFunc(void* ptr, void* user_data)      { IM_UNUSED(user_data); IM_FREE(ptr); } | ||||||
|  |  | ||||||
| // Current memory allocators | // Current memory allocators | ||||||
| static void* (*GImFreeTypeAllocFunc)(size_t size, void* user_data) = ImFreeTypeDefaultAllocFunc; | static void* (*GImFreeTypeAllocFunc)(size_t size, void* user_data) = ImFreeTypeDefaultAllocFunc; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user