@@ -445,6 +445,18 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
445
445
temp_data->HostBackupItemWidthStackSize = outer_window->DC .ItemWidthStack .Size ;
446
446
inner_window->DC .PrevLineSize = inner_window->DC .CurrLineSize = ImVec2 (0 .0f , 0 .0f );
447
447
448
+ // Make left and top borders not overlap our contents by offsetting HostClipRect (#6765)
449
+ // (we normally shouldn't alter HostClipRect as we rely on TableMergeDrawChannels() expanding non-clipped column toward the
450
+ // limits of that rectangle, in order for ImDrawListSplitter::Merge() to merge the draw commands. However since the overlap
451
+ // problem only affect scrolling tables in this case we can get away with doing it without extra cost).
452
+ if (inner_window != outer_window)
453
+ {
454
+ if (flags & ImGuiTableFlags_BordersOuterV)
455
+ table->HostClipRect .Min .x = ImMin (table->HostClipRect .Min .x + TABLE_BORDER_SIZE, table->HostClipRect .Max .x );
456
+ if (flags & ImGuiTableFlags_BordersOuterH)
457
+ table->HostClipRect .Min .y = ImMin (table->HostClipRect .Min .y + TABLE_BORDER_SIZE, table->HostClipRect .Max .y );
458
+ }
459
+
448
460
// Padding and Spacing
449
461
// - None ........Content..... Pad .....Content........
450
462
// - PadOuter | Pad ..Content..... Pad .....Content.. Pad |
@@ -1149,7 +1161,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
1149
1161
table->InnerClipRect .Max .x = ImMin (table->InnerClipRect .Max .x , unused_x1);
1150
1162
}
1151
1163
table->InnerWindow ->ParentWorkRect = table->WorkRect ;
1152
- table->BorderX1 = table->InnerClipRect .Min .x + ((table-> Flags & ImGuiTableFlags_BordersOuterV) ? 1 . 0f : 0 . 0f ) ;
1164
+ table->BorderX1 = table->InnerClipRect .Min .x ;
1153
1165
table->BorderX2 = table->InnerClipRect .Max .x ;
1154
1166
1155
1167
// Setup window's WorkRect.Max.y for GetContentRegionAvail(). Other values will be updated in each TableBeginCell() call.
0 commit comments