diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java index 2bc6a7b9bc9..a10b47e6b83 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java @@ -2972,19 +2972,17 @@ boolean setItemSize(GC gc) { for (int i = 0; i < items.length; i++) { CTabItem tab = items[i]; int width = widths[i]; - if (tab.height != tabHeight || tab.width != width) { - changed = true; - tab.shortenedText = null; - tab.shortenedTextWidth = 0; - tab.height = tabHeight; - tab.width = width; - tab.closeRect.width = tab.closeRect.height = 0; - if (showClose || tab.showClose) { - if (i == selectedIndex || showUnselectedClose) { - Point closeSize = renderer.computeSize(CTabFolderRenderer.PART_CLOSE_BUTTON, SWT.NONE, gc, SWT.DEFAULT, SWT.DEFAULT); - tab.closeRect.width = closeSize.x; - tab.closeRect.height = closeSize.y; - } + changed = true; + tab.shortenedText = null; + tab.shortenedTextWidth = 0; + tab.height = tabHeight; + tab.width = width; + tab.closeRect.width = tab.closeRect.height = 0; + if (showClose || tab.showClose) { + if (i == selectedIndex || showUnselectedClose) { + Point closeSize = renderer.computeSize(CTabFolderRenderer.PART_CLOSE_BUTTON, SWT.NONE, gc, SWT.DEFAULT, SWT.DEFAULT); + tab.closeRect.width = closeSize.x; + tab.closeRect.height = closeSize.y; } } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java index a91ba68f322..3e2c18a1343 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolderRenderer.java @@ -358,14 +358,10 @@ protected Point computeSize (int part, int state, GC gc, int wHint, int hHint) { } } - width += getTextPadding(item, state) * 2; - - if (shouldDrawCloseIcon(item)) { - if (!applyLargeTextPadding(parent)) { - if (width > 0) width += INTERNAL_SPACING; - } else { - if (width > 0) width -= INTERNAL_SPACING; - } + if (shouldApplyLargeTextPadding(parent)) { + width += getLargeTextPadding(item) * 2; + } else if (shouldDrawCloseIcon(item)) { + if (width > 0) width += INTERNAL_SPACING; width += computeSize(PART_CLOSE_BUTTON, SWT.NONE, gc, SWT.DEFAULT, SWT.DEFAULT).x; } } @@ -385,26 +381,19 @@ private boolean shouldDrawCloseIcon(CTabItem item) { } /** - * Returns padding for the text of a tab when image is not available or is hidden. - * - * @param item CTabItem - * @param state current state - * + * Returns padding for the text of a tab item when showing images is disabled for the tab folder. */ - private int getTextPadding(CTabItem item, int state) { + private int getLargeTextPadding(CTabItem item) { CTabFolder parent = item.getParent(); String text = item.getText(); if (text != null && parent.getMinimumCharacters() != 0) { - if (applyLargeTextPadding(parent)) { - return TABS_WITHOUT_ICONS_PADDING; - } + return TABS_WITHOUT_ICONS_PADDING; } - return 0; } - private boolean applyLargeTextPadding(CTabFolder tabFolder) { + private boolean shouldApplyLargeTextPadding(CTabFolder tabFolder) { return !tabFolder.showSelectedImage && !tabFolder.showUnselectedImage; } @@ -1438,7 +1427,7 @@ void drawSelected(int itemIndex, GC gc, Rectangle bounds, int state ) { } // draw Text - xDraw += getTextPadding(item, state); + xDraw += getLeftTextMargin(item); int textWidth = rightEdge - xDraw - (trim.width + trim.x); if (!parent.single && item.closeRect.width > 0) textWidth -= item.closeRect.width + INTERNAL_SPACING; if (textWidth > 0) { @@ -1478,6 +1467,17 @@ void drawSelected(int itemIndex, GC gc, Rectangle bounds, int state ) { } } + private int getLeftTextMargin(CTabItem item) { + int margin = 0; + if (shouldApplyLargeTextPadding(parent)) { + margin += getLargeTextPadding(item); + if (shouldDrawCloseIcon(item)) { + margin -= item.closeRect.width / 2; + } + } + return margin; + } + void drawTabArea(GC gc, Rectangle bounds, int state) { Point size = parent.getSize(); int[] shape = null; @@ -1652,7 +1652,7 @@ void drawUnselected(int index, GC gc, Rectangle bounds, int state) { } } // draw Text - xDraw += getTextPadding(item, state); + xDraw += getLeftTextMargin(item); int textWidth = x + width - xDraw - (trim.width + trim.x); if (shouldDrawCloseIcon(item)) { textWidth -= item.closeRect.width + INTERNAL_SPACING;