Skip to content

Commit

Permalink
Tables: Fix rendering of row bg and line separators (ocornut#3293, br…
Browse files Browse the repository at this point in the history
…oken by fixes ocornut#3163, code was accidently relying on SetCurrentChannel not updating rectangle)

+ Used shortcut in PushTableBackground/PopTableBackground
  • Loading branch information
ocornut authored and rokups committed Dec 1, 2020
1 parent 4da6ab5 commit 5f43e8b
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion imgui_tables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1309,7 +1309,7 @@ void ImGui::TableSetColumnWidth(ImGuiTable* table, ImGuiTableColumn* column_0, f
// matches, by e.g. calling SetCursorScreenPos().
// - The channel uses more than one draw command itself. We drop all our attempt at merging stuff here..
// we could do better but it's going to be rare and probably not worth the hassle.
// Columns for which the draw chnanel(s) haven't been merged with other will use their own ImDrawCmd.
// Columns for which the draw channel(s) haven't been merged with other will use their own ImDrawCmd.
//
// This function is particularly tricky to understand.. take a breath.
void ImGui::TableDrawMergeChannels(ImGuiTable* table)
Expand Down Expand Up @@ -1651,7 +1651,10 @@ void ImGui::TableEndRow(ImGuiTable* table)
}

if (bg_col != 0 || border_col != 0)
{
window->DrawList->_CmdHeader.ClipRect = table->HostClipRect.ToVec4();
table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
}

// Draw background
// We soft/cpu clip this so all backgrounds and borders can share the same clipping rectangle
Expand Down Expand Up @@ -1889,6 +1892,9 @@ void ImGui::PushTableBackground()
ImGuiContext& g = *GImGui;
ImGuiWindow* window = g.CurrentWindow;
ImGuiTable* table = g.CurrentTable;

// Set cmd header ahead to avoid SetCurrentChannel+PushClipRect doing an unnecessary AddDrawCmd/Pop
window->DrawList->_CmdHeader.ClipRect = table->HostClipRect.ToVec4();
table->DrawSplitter.SetCurrentChannel(window->DrawList, 0);
PushClipRect(table->HostClipRect.Min, table->HostClipRect.Max, false);
}
Expand All @@ -1899,6 +1905,10 @@ void ImGui::PopTableBackground()
ImGuiWindow* window = g.CurrentWindow;
ImGuiTable* table = g.CurrentTable;
ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];

// Set cmd header ahead to avoid SetCurrentChannel+PopClipRect doing an unnecessary AddDrawCmd/Pop
ImVec4 pop_clip_rect = window->DrawList->_ClipRectStack.Data[window->DrawList->_ClipRectStack.Size - 2];
window->DrawList->_CmdHeader.ClipRect = pop_clip_rect;
table->DrawSplitter.SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
PopClipRect();
}
Expand Down

0 comments on commit 5f43e8b

Please sign in to comment.