From a155737ff756a7e642b754803b62640bee0d1df3 Mon Sep 17 00:00:00 2001 From: Shahzaib Ibrahim Date: Tue, 6 Jan 2026 11:32:41 +0100 Subject: [PATCH] Adjust selection bounds for CTabRenderring Selected tabs highlight look slightly off and more noticeable when zoom is not 100%. These adjusted value shows no gaps from top and better aligned highlights for tabs (Theme is enabled) --- .../renderers/swt/CTabRendering.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java index ddbdc346105..f82643b98ca 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java @@ -18,6 +18,7 @@ package org.eclipse.e4.ui.workbench.renderers.swt; import java.lang.reflect.Field; +import java.util.Arrays; import java.util.Objects; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; @@ -627,11 +628,24 @@ void drawSelectedTab(int itemIndex, GC gc, Rectangle bounds) { highlightOnTop = !highlightOnTop; } int highlightHeight = 2; - int verticalOffset = highlightOnTop ? 0 : bounds.height - (highlightHeight - 1); - int horizontalOffset = itemIndex == 0 || cornerSize == SQUARE_CORNER ? 0 : 1; - int widthAdjustment = cornerSize == SQUARE_CORNER ? 0 : 1; - gc.fillRectangle(bounds.x + horizontalOffset, bounds.y + verticalOffset, bounds.width - widthAdjustment, - highlightHeight); + if (highlightOnTop == onBottom) { + int verticalOffset = outlineBoundsForOutline.height - (highlightHeight); + gc.fillRectangle(outlineBoundsForOutline.x, outlineBoundsForOutline.y + verticalOffset, + outlineBoundsForOutline.width, highlightHeight); + } else if (cornerSize == SQUARE_CORNER) { + gc.fillRectangle(outlineBoundsForOutline.x, + outlineBoundsForOutline.y, outlineBoundsForOutline.width, highlightHeight + 1); + } else { + boolean gcAdvanced = gc.getAdvanced(); + gc.setAdvanced(false); + int[] highlightShape = Arrays.copyOfRange(tabOutlinePoints, 12, tabOutlinePoints.length - 12); + int highlightY = highlightOnTop ? highlightHeight + : outlineBoundsForOutline.height - highlightHeight; + highlightShape[1] = highlightShape[3] = highlightShape[highlightShape.length + - 1] = highlightShape[highlightShape.length - 3] = highlightY; + gc.fillPolygon(highlightShape); + gc.setAdvanced(gcAdvanced); + } } if (backgroundPattern != null) {