SplitterBehavior: Fix for when the sizes are already under the minimum desired size.

This commit is contained in:
omar 2018-08-11 22:01:24 +02:00
parent 341ebd961b
commit ac39c4b2a8

View File

@ -13050,18 +13050,26 @@ bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float
float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x; float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
// Minimum pane size // Minimum pane size
if (mouse_delta < min_size1 - *size1) float size_1_maximum_delta = ImMax(0.0f, *size1 - min_size1);
mouse_delta = min_size1 - *size1; float size_2_maximum_delta = ImMax(0.0f, *size2 - min_size2);
if (mouse_delta > *size2 - min_size2) if (mouse_delta < -size_1_maximum_delta)
mouse_delta = *size2 - min_size2; mouse_delta = -size_1_maximum_delta;
if (mouse_delta > size_2_maximum_delta)
mouse_delta = size_2_maximum_delta;
// Apply resize // Apply resize
if (mouse_delta != 0.0f)
{
if (mouse_delta < 0.0f)
IM_ASSERT(*size1 + mouse_delta >= min_size1);
if (mouse_delta > 0.0f)
IM_ASSERT(*size2 - mouse_delta >= min_size2);
*size1 += mouse_delta; *size1 += mouse_delta;
*size2 -= mouse_delta; *size2 -= mouse_delta;
bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta)); bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
MarkItemValueChanged(id); MarkItemValueChanged(id);
} }
}
// Render // Render
const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator); const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);