mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Tables: Fixed top-most and left-most outer border overlapping inner clip-rect when scrolling. (#6765)
This commit is contained in:
		@@ -107,6 +107,7 @@ Other changes:
 | 
				
			|||||||
    so a scrolling table can contribute to initial window size. (#6510)
 | 
					    so a scrolling table can contribute to initial window size. (#6510)
 | 
				
			||||||
  - Fixed subtle drawing overlap between borders in some situations.
 | 
					  - Fixed subtle drawing overlap between borders in some situations.
 | 
				
			||||||
  - Fixed bottom-most and right-most outer border offset by one. (#6765, #3752) [@v-ein]
 | 
					  - Fixed bottom-most and right-most outer border offset by one. (#6765, #3752) [@v-ein]
 | 
				
			||||||
 | 
					  - Fixed top-most and left-most outer border overlapping inner clip-rect when scrolling. (#6765)
 | 
				
			||||||
  - Fixed top-most outer border being drawn with both TableBorderLight and TableBorderStrong
 | 
					  - Fixed top-most outer border being drawn with both TableBorderLight and TableBorderStrong
 | 
				
			||||||
    in some situations, causing the earlier to be visible underneath when alpha is not 1.0f.
 | 
					    in some situations, causing the earlier to be visible underneath when alpha is not 1.0f.
 | 
				
			||||||
  - Fixed right-clicking right-most section (past right-most column) from highlighting a column.
 | 
					  - Fixed right-clicking right-most section (past right-most column) from highlighting a column.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -445,6 +445,18 @@ bool    ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
 | 
				
			|||||||
    temp_data->HostBackupItemWidthStackSize = outer_window->DC.ItemWidthStack.Size;
 | 
					    temp_data->HostBackupItemWidthStackSize = outer_window->DC.ItemWidthStack.Size;
 | 
				
			||||||
    inner_window->DC.PrevLineSize = inner_window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
 | 
					    inner_window->DC.PrevLineSize = inner_window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Make left and top borders not overlap our contents by offsetting HostClipRect (#6765)
 | 
				
			||||||
 | 
					    // (we normally shouldn't alter HostClipRect as we rely on TableMergeDrawChannels() expanding non-clipped column toward the
 | 
				
			||||||
 | 
					    // limits of that rectangle, in order for ImDrawListSplitter::Merge() to merge the draw commands. However since the overlap
 | 
				
			||||||
 | 
					    // problem only affect scrolling tables in this case we can get away with doing it without extra cost).
 | 
				
			||||||
 | 
					    if (inner_window != outer_window)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (flags & ImGuiTableFlags_BordersOuterV)
 | 
				
			||||||
 | 
					            table->HostClipRect.Min.x = ImMin(table->HostClipRect.Min.x + TABLE_BORDER_SIZE, table->HostClipRect.Max.x);
 | 
				
			||||||
 | 
					        if (flags & ImGuiTableFlags_BordersOuterH)
 | 
				
			||||||
 | 
					            table->HostClipRect.Min.y = ImMin(table->HostClipRect.Min.y + TABLE_BORDER_SIZE, table->HostClipRect.Max.y);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Padding and Spacing
 | 
					    // Padding and Spacing
 | 
				
			||||||
    // - None               ........Content..... Pad .....Content........
 | 
					    // - None               ........Content..... Pad .....Content........
 | 
				
			||||||
    // - PadOuter           | Pad ..Content..... Pad .....Content.. Pad |
 | 
					    // - PadOuter           | Pad ..Content..... Pad .....Content.. Pad |
 | 
				
			||||||
@@ -1149,7 +1161,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
 | 
				
			|||||||
        table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1);
 | 
					        table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    table->InnerWindow->ParentWorkRect = table->WorkRect;
 | 
					    table->InnerWindow->ParentWorkRect = table->WorkRect;
 | 
				
			||||||
    table->BorderX1 = table->InnerClipRect.Min.x + ((table->Flags & ImGuiTableFlags_BordersOuterV) ? 1.0f : 0.0f);
 | 
					    table->BorderX1 = table->InnerClipRect.Min.x;
 | 
				
			||||||
    table->BorderX2 = table->InnerClipRect.Max.x;
 | 
					    table->BorderX2 = table->InnerClipRect.Max.x;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup window's WorkRect.Max.y for GetContentRegionAvail(). Other values will be updated in each TableBeginCell() call.
 | 
					    // Setup window's WorkRect.Max.y for GetContentRegionAvail(). Other values will be updated in each TableBeginCell() call.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user