mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Various tweaks and fixes as suggested by PVS Studio (thanks PVS Studio!)
This commit is contained in:
		| @@ -5595,7 +5595,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) | |||||||
|             // in order for their pos/size to be matching their undocking state.) |             // in order for their pos/size to be matching their undocking state.) | ||||||
|             if (!(flags & ImGuiWindowFlags_NoTitleBar) && !window->DockIsActive) |             if (!(flags & ImGuiWindowFlags_NoTitleBar) && !window->DockIsActive) | ||||||
|             { |             { | ||||||
|                 ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); |                 ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg); | ||||||
|                 window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top); |                 window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawCornerFlags_Top); | ||||||
|             } |             } | ||||||
|  |  | ||||||
| @@ -8840,6 +8840,7 @@ static void ImGui::NavUpdate() | |||||||
|     NavUpdateWindowing(); |     NavUpdateWindowing(); | ||||||
|  |  | ||||||
|     // Set output flags for user application |     // Set output flags for user application | ||||||
|  |     // FIXME: g.NavInitRequest is always false at this point, investigate the intent of operation done here. | ||||||
|     g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs); |     g.IO.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs); | ||||||
|     g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL) || g.NavInitRequest; |     g.IO.NavVisible = (g.IO.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL) || g.NavInitRequest; | ||||||
|  |  | ||||||
| @@ -9075,7 +9076,7 @@ static float ImGui::NavUpdatePageUpPageDown(int allowed_dir_flags) | |||||||
|         ImGuiWindow* window = g.NavWindow; |         ImGuiWindow* window = g.NavWindow; | ||||||
|         bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && (allowed_dir_flags & (1 << ImGuiDir_Up)); |         bool page_up_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageUp]) && (allowed_dir_flags & (1 << ImGuiDir_Up)); | ||||||
|         bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && (allowed_dir_flags & (1 << ImGuiDir_Down)); |         bool page_down_held = IsKeyDown(g.IO.KeyMap[ImGuiKey_PageDown]) && (allowed_dir_flags & (1 << ImGuiDir_Down)); | ||||||
|         if ((page_up_held && !page_down_held) || (page_down_held && !page_up_held)) |         if (page_up_held != page_down_held) // If either (not both) are pressed | ||||||
|         { |         { | ||||||
|             if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll) |             if (window->DC.NavLayerActiveMask == 0x00 && window->DC.NavHasScroll) | ||||||
|             { |             { | ||||||
| @@ -9761,7 +9762,7 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags) | |||||||
|             // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit) |             // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit) | ||||||
|             // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.  |             // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.  | ||||||
|             BeginTooltip(); |             BeginTooltip(); | ||||||
|             if (g.DragDropActive && g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip)) |             if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip)) | ||||||
|             { |             { | ||||||
|                 ImGuiWindow* tooltip_window = g.CurrentWindow; |                 ImGuiWindow* tooltip_window = g.CurrentWindow; | ||||||
|                 tooltip_window->SkipItems = true; |                 tooltip_window->SkipItems = true; | ||||||
|   | |||||||
| @@ -924,17 +924,18 @@ static void ShowDemoWindowWidgets() | |||||||
|         } |         } | ||||||
|         if (ImGui::TreeNode("Grid")) |         if (ImGui::TreeNode("Grid")) | ||||||
|         { |         { | ||||||
|             static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; |             static bool selected[4*4] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; | ||||||
|             for (int i = 0; i < 16; i++) |             for (int i = 0; i < 4*4; i++) | ||||||
|             { |             { | ||||||
|                 ImGui::PushID(i); |                 ImGui::PushID(i); | ||||||
|                 if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) |                 if (ImGui::Selectable("Sailor", &selected[i], 0, ImVec2(50,50))) | ||||||
|                 { |                 { | ||||||
|                     int x = i % 4, y = i / 4; |                     int x = i % 4; | ||||||
|                     if (x > 0) selected[i - 1] ^= 1; |                     int y = i / 4; | ||||||
|                     if (x < 3) selected[i + 1] ^= 1; |                     if (x > 0) { selected[i - 1] ^= 1; } | ||||||
|                     if (y > 0) selected[i - 4] ^= 1; |                     if (x < 3) { selected[i + 1] ^= 1; } | ||||||
|                     if (y < 3) selected[i + 4] ^= 1; |                     if (y > 0) { selected[i - 4] ^= 1; } | ||||||
|  |                     if (y < 3) { selected[i + 4] ^= 1; } | ||||||
|                 } |                 } | ||||||
|                 if ((i % 4) < 3) ImGui::SameLine(); |                 if ((i % 4) < 3) ImGui::SameLine(); | ||||||
|                 ImGui::PopID(); |                 ImGui::PopID(); | ||||||
| @@ -1000,7 +1001,7 @@ static void ShowDemoWindowWidgets() | |||||||
|         static float values[90] = { 0 }; |         static float values[90] = { 0 }; | ||||||
|         static int values_offset = 0; |         static int values_offset = 0; | ||||||
|         static double refresh_time = 0.0; |         static double refresh_time = 0.0; | ||||||
|         if (!animate || refresh_time == 0.0f) |         if (!animate || refresh_time == 0.0) | ||||||
|             refresh_time = ImGui::GetTime(); |             refresh_time = ImGui::GetTime(); | ||||||
|         while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo |         while (refresh_time < ImGui::GetTime()) // Create dummy data at fixed 60 hz rate for the demo | ||||||
|         { |         { | ||||||
| @@ -2032,9 +2033,9 @@ static void ShowDemoWindowLayout() | |||||||
|         ImGui::EndChild(); |         ImGui::EndChild(); | ||||||
|         ImGui::PopStyleVar(2); |         ImGui::PopStyleVar(2); | ||||||
|         float scroll_x_delta = 0.0f; |         float scroll_x_delta = 0.0f; | ||||||
|         ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine(); |         ImGui::SmallButton("<<"); if (ImGui::IsItemActive()) { scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); | ||||||
|         ImGui::Text("Scroll from code"); ImGui::SameLine(); |         ImGui::Text("Scroll from code"); ImGui::SameLine(); | ||||||
|         ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; ImGui::SameLine(); |         ImGui::SmallButton(">>"); if (ImGui::IsItemActive()) { scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f; } ImGui::SameLine(); | ||||||
|         ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x); |         ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x); | ||||||
|         if (scroll_x_delta != 0.0f) |         if (scroll_x_delta != 0.0f) | ||||||
|         { |         { | ||||||
| @@ -2562,9 +2563,9 @@ static void ShowDemoWindowMisc() | |||||||
|             // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item |             // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item | ||||||
|             static float f3[3] = { 0.0f, 0.0f, 0.0f }; |             static float f3[3] = { 0.0f, 0.0f, 0.0f }; | ||||||
|             int focus_ahead = -1; |             int focus_ahead = -1; | ||||||
|             if (ImGui::Button("Focus on X")) focus_ahead = 0; ImGui::SameLine(); |             if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine(); | ||||||
|             if (ImGui::Button("Focus on Y")) focus_ahead = 1; ImGui::SameLine(); |             if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine(); | ||||||
|             if (ImGui::Button("Focus on Z")) focus_ahead = 2; |             if (ImGui::Button("Focus on Z")) { focus_ahead = 2; } | ||||||
|             if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead); |             if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead); | ||||||
|             ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f); |             ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f); | ||||||
|  |  | ||||||
| @@ -3811,8 +3812,8 @@ static void ShowExampleAppConstrainedResize(bool* p_open) | |||||||
|     if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 |     if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 | ||||||
|     if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500 |     if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1),  ImVec2(500, -1));          // Width 400-500 | ||||||
|     if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500 |     if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400),  ImVec2(-1, 500));          // Height 400-500 | ||||||
|     if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);          // Always Square |     if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square);                     // Always Square | ||||||
|     if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step |     if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0),     ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step | ||||||
|  |  | ||||||
|     ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0; |     ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0; | ||||||
|     if (ImGui::Begin("Example: Constrained Resize", p_open, flags)) |     if (ImGui::Begin("Example: Constrained Resize", p_open, flags)) | ||||||
| @@ -3853,6 +3854,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open) | |||||||
|     // FIXME-VIEWPORT-ABS: Select a default viewport |     // FIXME-VIEWPORT-ABS: Select a default viewport | ||||||
|     const float DISTANCE = 10.0f; |     const float DISTANCE = 10.0f; | ||||||
|     static int corner = 0; |     static int corner = 0; | ||||||
|  |     ImGuiIO& io = ImGui::GetIO(); | ||||||
|     if (corner != -1) |     if (corner != -1) | ||||||
|     { |     { | ||||||
|         ImGuiViewport* viewport = ImGui::GetMainViewport(); |         ImGuiViewport* viewport = ImGui::GetMainViewport(); | ||||||
| @@ -3867,7 +3869,7 @@ static void ShowExampleAppSimpleOverlay(bool* p_open) | |||||||
|         ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)"); |         ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)"); | ||||||
|         ImGui::Separator(); |         ImGui::Separator(); | ||||||
|         if (ImGui::IsMousePosValid()) |         if (ImGui::IsMousePosValid()) | ||||||
|             ImGui::Text("Mouse Position: (%.1f,%.1f)", ImGui::GetIO().MousePos.x, ImGui::GetIO().MousePos.y); |             ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y); | ||||||
|         else |         else | ||||||
|             ImGui::Text("Mouse Position: <invalid>"); |             ImGui::Text("Mouse Position: <invalid>"); | ||||||
|         if (ImGui::BeginPopupContextWindow()) |         if (ImGui::BeginPopupContextWindow()) | ||||||
|   | |||||||
| @@ -1524,7 +1524,7 @@ void    ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_wid | |||||||
|         GetTexDataAsAlpha8(&pixels, NULL, NULL); |         GetTexDataAsAlpha8(&pixels, NULL, NULL); | ||||||
|         if (pixels) |         if (pixels) | ||||||
|         { |         { | ||||||
|             TexPixelsRGBA32 = (unsigned int*)ImGui::MemAlloc((size_t)(TexWidth * TexHeight * 4)); |             TexPixelsRGBA32 = (unsigned int*)ImGui::MemAlloc((size_t)TexWidth * (size_t)TexHeight * 4); | ||||||
|             const unsigned char* src = pixels; |             const unsigned char* src = pixels; | ||||||
|             unsigned int* dst = TexPixelsRGBA32; |             unsigned int* dst = TexPixelsRGBA32; | ||||||
|             for (int n = TexWidth * TexHeight; n > 0; n--) |             for (int n = TexWidth * TexHeight; n > 0; n--) | ||||||
| @@ -3026,13 +3026,14 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im | |||||||
|     const float inv_rounding = 1.0f / rounding; |     const float inv_rounding = 1.0f / rounding; | ||||||
|     const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding); |     const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding); | ||||||
|     const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding); |     const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding); | ||||||
|  |     const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return. | ||||||
|     const float x0 = ImMax(p0.x, rect.Min.x + rounding); |     const float x0 = ImMax(p0.x, rect.Min.x + rounding); | ||||||
|     if (arc0_b == arc0_e) |     if (arc0_b == arc0_e) | ||||||
|     { |     { | ||||||
|         draw_list->PathLineTo(ImVec2(x0, p1.y)); |         draw_list->PathLineTo(ImVec2(x0, p1.y)); | ||||||
|         draw_list->PathLineTo(ImVec2(x0, p0.y)); |         draw_list->PathLineTo(ImVec2(x0, p0.y)); | ||||||
|     } |     } | ||||||
|     else if (arc0_b == 0.0f && arc0_e == IM_PI*0.5f) |     else if (arc0_b == 0.0f && arc0_e == half_pi) | ||||||
|     { |     { | ||||||
|         draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL |         draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL | ||||||
|         draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR |         draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR | ||||||
| @@ -3052,7 +3053,7 @@ void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, Im | |||||||
|             draw_list->PathLineTo(ImVec2(x1, p0.y)); |             draw_list->PathLineTo(ImVec2(x1, p0.y)); | ||||||
|             draw_list->PathLineTo(ImVec2(x1, p1.y)); |             draw_list->PathLineTo(ImVec2(x1, p1.y)); | ||||||
|         } |         } | ||||||
|         else if (arc1_b == 0.0f && arc1_e == IM_PI*0.5f) |         else if (arc1_b == 0.0f && arc1_e == half_pi) | ||||||
|         { |         { | ||||||
|             draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR |             draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR | ||||||
|             draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3);  // BR |             draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3);  // BR | ||||||
|   | |||||||
| @@ -673,7 +673,7 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius) | |||||||
|     // Render |     // Render | ||||||
|     ImVec2 center = bb.GetCenter(); |     ImVec2 center = bb.GetCenter(); | ||||||
|     if (hovered) |     if (hovered) | ||||||
|         window->DrawList->AddCircleFilled(center, ImMax(2.0f, radius), GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered), 9); |         window->DrawList->AddCircleFilled(center, ImMax(2.0f, radius), GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered), 9); | ||||||
|  |  | ||||||
|     float cross_extent = (radius * 0.7071f) - 1.0f; |     float cross_extent = (radius * 0.7071f) - 1.0f; | ||||||
|     ImU32 cross_col = GetColorU32(ImGuiCol_Text); |     ImU32 cross_col = GetColorU32(ImGuiCol_Text); | ||||||
| @@ -1697,7 +1697,7 @@ static float GetMinimumStepAtDecimalPrecision(int decimal_precision) | |||||||
|     static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f }; |     static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f }; | ||||||
|     if (decimal_precision < 0) |     if (decimal_precision < 0) | ||||||
|         return FLT_MIN; |         return FLT_MIN; | ||||||
|     return (decimal_precision >= 0 && decimal_precision < 10) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision); |     return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision); | ||||||
| } | } | ||||||
|  |  | ||||||
| template<typename TYPE> | template<typename TYPE> | ||||||
| @@ -3929,9 +3929,14 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|             if (n + 1 == components) |             if (n + 1 == components) | ||||||
|                 PushItemWidth(w_item_last); |                 PushItemWidth(w_item_last); | ||||||
|             if (flags & ImGuiColorEditFlags_Float) |             if (flags & ImGuiColorEditFlags_Float) | ||||||
|                 value_changed = value_changed_as_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; | ||||||
|  |             } | ||||||
|             else |             else | ||||||
|  |             { | ||||||
|                 value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]); |                 value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]); | ||||||
|  |             } | ||||||
|             if (!(flags & ImGuiColorEditFlags_NoOptions)) |             if (!(flags & ImGuiColorEditFlags_NoOptions)) | ||||||
|                 OpenPopupOnItemClick("context"); |                 OpenPopupOnItemClick("context"); | ||||||
|         } |         } | ||||||
| @@ -4034,7 +4039,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag | |||||||
|     { |     { | ||||||
|         if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) |         if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F)) | ||||||
|         { |         { | ||||||
|             memcpy((float*)col, payload->Data, sizeof(float) * 3); |             memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any | ||||||
|             value_changed = true; |             value_changed = true; | ||||||
|         } |         } | ||||||
|         if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) |         if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F)) | ||||||
| @@ -4616,7 +4621,7 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl | |||||||
|                 g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask); |                 g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask); | ||||||
|             SetCursorScreenPos(backup_pos); |             SetCursorScreenPos(backup_pos); | ||||||
|             ImVec4 dummy_ref_col; |             ImVec4 dummy_ref_col; | ||||||
|             memcpy(&dummy_ref_col.x, ref_col, sizeof(float) * (picker_flags & ImGuiColorEditFlags_NoAlpha ? 3 : 4)); |             memcpy(&dummy_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4)); | ||||||
|             ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags); |             ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags); | ||||||
|             PopID(); |             PopID(); | ||||||
|         } |         } | ||||||
| @@ -5019,7 +5024,7 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags | |||||||
|         ImGuiItemHoveredDataBackup last_item_backup; |         ImGuiItemHoveredDataBackup last_item_backup; | ||||||
|         float button_radius = g.FontSize * 0.5f; |         float button_radius = g.FontSize * 0.5f; | ||||||
|         ImVec2 button_center = ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_radius, window->DC.LastItemRect.GetCenter().y); |         ImVec2 button_center = ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_radius, window->DC.LastItemRect.GetCenter().y); | ||||||
|         if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), button_center, button_radius)) |         if (CloseButton(window->GetID((void*)((intptr_t)id+1)), button_center, button_radius)) | ||||||
|             *p_open = false; |             *p_open = false; | ||||||
|         last_item_backup.Restore(); |         last_item_backup.Restore(); | ||||||
|     } |     } | ||||||
| @@ -5842,6 +5847,7 @@ ImGuiTabBar::ImGuiTabBar() | |||||||
|     ID = 0; |     ID = 0; | ||||||
|     SelectedTabId = NextSelectedTabId = VisibleTabId = 0; |     SelectedTabId = NextSelectedTabId = VisibleTabId = 0; | ||||||
|     CurrFrameVisible = PrevFrameVisible = -1; |     CurrFrameVisible = PrevFrameVisible = -1; | ||||||
|  |     ContentsHeight = 0.0f; | ||||||
|     OffsetMax = OffsetNextTab = 0.0f; |     OffsetMax = OffsetNextTab = 0.0f; | ||||||
|     ScrollingAnim = ScrollingTarget = 0.0f; |     ScrollingAnim = ScrollingTarget = 0.0f; | ||||||
|     Flags = ImGuiTabBarFlags_None; |     Flags = ImGuiTabBarFlags_None; | ||||||
| @@ -6576,7 +6582,7 @@ bool    ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, | |||||||
|         flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton; |         flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton; | ||||||
|  |  | ||||||
|     // Render tab label, process close button |     // Render tab label, process close button | ||||||
|     const ImGuiID close_button_id = p_open ? window->GetID((void*)(intptr_t)(id + 1)) : 0; |     const ImGuiID close_button_id = p_open ? window->GetID((void*)((intptr_t)id + 1)) : 0; | ||||||
|     bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, label, id, close_button_id); |     bool just_closed = TabItemLabelAndCloseButton(display_draw_list, bb, flags, label, id, close_button_id); | ||||||
|     if (just_closed) |     if (just_closed) | ||||||
|     { |     { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user