Center tab labels and unify dock cursor resolution

This commit is contained in:
2026-04-11 17:37:13 +08:00
parent 2958dcc491
commit 443c56ed08
6 changed files with 197 additions and 7 deletions

View File

@@ -73,6 +73,21 @@ float ResolveTabTextTop(
return rect.y + (std::max)(0.0f, (rect.height - kHeaderFontSize) * 0.5f) + metrics.labelInsetY;
}
float ResolveTabTextLeft(
const UIRect& rect,
const UIEditorTabStripItem& item,
const UIEditorTabStripMetrics& metrics) {
const float padding =
(std::max)(
ClampNonNegative(metrics.layoutMetrics.tabHorizontalPadding),
ClampNonNegative(metrics.labelInsetX));
const float availableLeft = rect.x + padding;
const float availableRight = rect.x + rect.width - padding;
const float availableWidth = (std::max)(availableRight - availableLeft, 0.0f);
const float labelWidth = ResolveEstimatedLabelWidth(item, metrics);
return availableLeft + (std::max)(0.0f, (availableWidth - labelWidth) * 0.5f);
}
UIColor ResolveStripBorderColor(
const UIEditorTabStripState& state,
const UIEditorTabStripPalette& palette) {
@@ -387,8 +402,7 @@ void AppendUIEditorTabStripForeground(
const UIEditorTabStripPalette& palette,
const UIEditorTabStripMetrics& metrics) {
AppendHeaderContentSeparator(drawList, layout, palette, metrics);
const float leftInset = (std::max)(
const float horizontalPadding = (std::max)(
ClampNonNegative(metrics.layoutMetrics.tabHorizontalPadding),
ClampNonNegative(metrics.labelInsetX));
@@ -396,14 +410,15 @@ void AppendUIEditorTabStripForeground(
const UIRect& tabRect = layout.tabHeaderRects[index];
const bool selected = layout.selectedIndex == index;
const bool hovered = state.hoveredIndex == index;
const float textLeft = tabRect.x + leftInset;
const float textRight = tabRect.x + tabRect.width - ClampNonNegative(metrics.layoutMetrics.tabHorizontalPadding);
const float clipLeft = tabRect.x + horizontalPadding;
const float textLeft = ResolveTabTextLeft(tabRect, items[index], metrics);
const float textRight = tabRect.x + tabRect.width - horizontalPadding;
if (textRight > textLeft) {
if (textRight > clipLeft) {
const UIRect clipRect(
textLeft,
clipLeft,
tabRect.y,
textRight - textLeft,
textRight - clipLeft,
tabRect.height);
drawList.PushClipRect(clipRect, true);
drawList.AddText(