From 2d095b12fa95dae0bdec40b8016b05b57afe8d32 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Tue, 19 Dec 2023 13:37:49 +0100 Subject: [PATCH] Apply large padding only when image for tab item shall not be shown #945 Currently, all headers in CTabFolders without an image have a large text padding. This applies to both the case where no image is assigned to a tab item and the case where images shall not be shown as the properties showSelectedImage and showUnselectedImage are both false. While the latter is intended behavior to switch between image-based tab folders and image-less, padding-based tab folders (see #785), the former unintentionally breaks with the existing UI experience for CTabFolders that do not use images. This change makes the identification of whether large text padding shall be applied explicit by factoring it out into a method (which may be replaced by a different implementation later on). It reduces the cases in which the large text padding is applied to the intended case (showSelectedImage = showUnselectedImage = false) and restores the behavior for all existing use cases. Contributes to https://github.com/eclipse-platform/eclipse.platform.swt/issues/945 --- .../org/eclipse/swt/custom/CTabFolderRenderer.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 16d50b624f3..3686d3be400 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 @@ -362,8 +362,7 @@ protected Point computeSize (int part, int state, GC gc, int wHint, int hHint) { if (parent.showClose || item.showClose) { if ((state & SWT.SELECTED) != 0 || parent.showUnselectedClose) { - if (((state & SWT.SELECTED) != 0 && parent.showSelectedImage) - || ((state & SWT.SELECTED) == 0 && parent.showUnselectedImage)) { + if (showLargeTextPadding(parent)) { if (width > 0) width += INTERNAL_SPACING; } else { if (width > 0) width -= INTERNAL_SPACING; @@ -389,18 +388,21 @@ protected Point computeSize (int part, int state, GC gc, int wHint, int hHint) { */ private int getTextPadding(CTabItem item, int state) { CTabFolder parent = item.getParent(); - Image image = item.getImage(); String text = item.getText(); if (text != null && parent.getMinimumCharacters() != 0) { - if (image == null || image.isDisposed() || ((state & SWT.SELECTED) != 0 && !parent.showSelectedImage) - || ((state & SWT.SELECTED) == 0 && !parent.showUnselectedImage)) + if (showLargeTextPadding(parent)) { return TABS_WITHOUT_ICONS_PADDING; + } } return 0; } + private boolean showLargeTextPadding(CTabFolder tabFolder) { + return !tabFolder.showSelectedImage && !tabFolder.showUnselectedImage; + } + /** * Given a desired client area for the part * (as described by the arguments), returns the bounding