mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-22 20:07:01 +00:00
Tables: fixed border straying out of rect when using ImGuiTableFlags_NoBordersInBody with small height.
This commit is contained in:
parent
002ba1a69f
commit
8cea3e3ed3
@ -80,13 +80,15 @@ Index of this file:
|
|||||||
// - outer_size.x = 0.0f -> Auto width. Generally use all available width. When NOT using scrolling and NOT using any Stretch column, use only necessary width, otherwise same as -FLT_MIN.
|
// - outer_size.x = 0.0f -> Auto width. Generally use all available width. When NOT using scrolling and NOT using any Stretch column, use only necessary width, otherwise same as -FLT_MIN.
|
||||||
// - outer_size.x > 0.0f -> Fixed width.
|
// - outer_size.x > 0.0f -> Fixed width.
|
||||||
// Y with ScrollX/ScrollY disabled: we output table directly in current window
|
// Y with ScrollX/ScrollY disabled: we output table directly in current window
|
||||||
// - outer_size.y < 0.0f -> Bottom-align (but will auto extend, unless NoHostExtendV is set)
|
// - outer_size.y < 0.0f -> Bottom-align (but will auto extend, unless _NoHostExtendY is set). Not meaningful is parent window can vertically scroll.
|
||||||
// - outer_size.y = 0.0f -> No minimum height (but will auto extend, unless NoHostExtendV is set)
|
// - outer_size.y = 0.0f -> No minimum height (but will auto extend, unless _NoHostExtendY is set)
|
||||||
// - outer_size.y > 0.0f -> Set Minimum height (but will auto extend, unless NoHostExtendV is set)
|
// - outer_size.y > 0.0f -> Set Minimum height (but will auto extend, unless _NoHostExtenY is set)
|
||||||
// Y with ScrollX/ScrollY enabled: using a child window for scrolling
|
// Y with ScrollX/ScrollY enabled: using a child window for scrolling
|
||||||
// - outer_size.y < 0.0f -> Bottom-align
|
// - outer_size.y < 0.0f -> Bottom-align. Not meaningful is parent window can vertically scroll.
|
||||||
// - outer_size.y = 0.0f -> Bottom-align, consistent with BeginChild(). Not recommended unless table is last item in parent window.
|
// - outer_size.y = 0.0f -> Bottom-align, consistent with BeginChild(). Not recommended unless table is last item in parent window.
|
||||||
// - outer_size.y > 0.0f -> Set Exact height. Recommended when using Scrolling on any axis.
|
// - outer_size.y > 0.0f -> Set Exact height. Recommended when using Scrolling on any axis.
|
||||||
|
// In theory ImGuiTableFlags_NoHostExtendY could be the default and any non-scrolling tables with outer_size.y != 0.0f would use exact height.
|
||||||
|
// This would be consistent but perhaps less useful and more confusing (as vertically clipped items are not easily noticeable)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// About 'inner_width':
|
// About 'inner_width':
|
||||||
// With ScrollX disabled:
|
// With ScrollX disabled:
|
||||||
@ -1176,6 +1178,7 @@ void ImGui::EndTable()
|
|||||||
inner_window->DC.PrevLineSize = table->HostBackupPrevLineSize;
|
inner_window->DC.PrevLineSize = table->HostBackupPrevLineSize;
|
||||||
inner_window->DC.CurrLineSize = table->HostBackupCurrLineSize;
|
inner_window->DC.CurrLineSize = table->HostBackupCurrLineSize;
|
||||||
inner_window->DC.CursorMaxPos = table->HostBackupCursorMaxPos;
|
inner_window->DC.CursorMaxPos = table->HostBackupCursorMaxPos;
|
||||||
|
|
||||||
if (inner_window != outer_window)
|
if (inner_window != outer_window)
|
||||||
{
|
{
|
||||||
// Both OuterRect/InnerRect are valid from BeginTable
|
// Both OuterRect/InnerRect are valid from BeginTable
|
||||||
@ -1183,10 +1186,10 @@ void ImGui::EndTable()
|
|||||||
}
|
}
|
||||||
else if (!(flags & ImGuiTableFlags_NoHostExtendY))
|
else if (!(flags & ImGuiTableFlags_NoHostExtendY))
|
||||||
{
|
{
|
||||||
// Patch OuterRect/InnerRect height
|
table->OuterRect.Max.y = table->InnerRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->DC.CursorPos.y); // Patch OuterRect/InnerRect height
|
||||||
table->OuterRect.Max.y = table->InnerRect.Max.y = ImMax(table->OuterRect.Max.y, inner_window->DC.CursorPos.y);
|
outer_window->DC.CursorMaxPos.y = table->RowPosY2;
|
||||||
inner_window->DC.CursorMaxPos.y = table->RowPosY2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y);
|
table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y);
|
||||||
table->LastOuterHeight = table->OuterRect.GetHeight();
|
table->LastOuterHeight = table->OuterRect.GetHeight();
|
||||||
|
|
||||||
@ -2353,7 +2356,7 @@ void ImGui::TableDrawBorders(ImGuiTable* table)
|
|||||||
const float border_size = TABLE_BORDER_SIZE;
|
const float border_size = TABLE_BORDER_SIZE;
|
||||||
const float draw_y1 = table->InnerRect.Min.y;
|
const float draw_y1 = table->InnerRect.Min.y;
|
||||||
const float draw_y2_body = table->InnerRect.Max.y;
|
const float draw_y2_body = table->InnerRect.Max.y;
|
||||||
const float draw_y2_head = table->IsUsingHeaders ? ((table->FreezeRowsCount >= 1 ? table->OuterRect.Min.y : table->WorkRect.Min.y) + table->LastFirstRowHeight) : draw_y1;
|
const float draw_y2_head = table->IsUsingHeaders ? ImMin(table->InnerRect.Max.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table->LastFirstRowHeight) : draw_y1;
|
||||||
if (table->Flags & ImGuiTableFlags_BordersInnerV)
|
if (table->Flags & ImGuiTableFlags_BordersInnerV)
|
||||||
{
|
{
|
||||||
for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
|
for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
|
||||||
|
Loading…
Reference in New Issue
Block a user