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(

View File

@@ -600,6 +600,31 @@ const UIEditorDockHostSplitterLayout* FindUIEditorDockHostSplitterLayout(
return nullptr;
}
UIEditorDockHostCursorKind ResolveUIEditorDockHostCursorKind(
const UIEditorDockHostLayout& layout) {
for (const UIEditorDockHostSplitterLayout& splitter : layout.splitters) {
if (!splitter.active) {
continue;
}
return splitter.axis == UIEditorWorkspaceSplitAxis::Horizontal
? UIEditorDockHostCursorKind::ResizeEW
: UIEditorDockHostCursorKind::ResizeNS;
}
for (const UIEditorDockHostSplitterLayout& splitter : layout.splitters) {
if (!splitter.hovered) {
continue;
}
return splitter.axis == UIEditorWorkspaceSplitAxis::Horizontal
? UIEditorDockHostCursorKind::ResizeEW
: UIEditorDockHostCursorKind::ResizeNS;
}
return UIEditorDockHostCursorKind::Arrow;
}
UIEditorDockHostLayout BuildUIEditorDockHostLayout(
const UIRect& bounds,
const UIEditorPanelRegistry& panelRegistry,