From ec70c281555d88c914ebdbdf9e4fc2d79c23520f Mon Sep 17 00:00:00 2001 From: andrew-tram <106191140+andrew-tram@users.noreply.github.com> Date: Wed, 13 Aug 2025 10:43:46 -0400 Subject: [PATCH 1/4] Allowing smaller images to show in the workbench window --- .../renderers/swt/StackRenderer.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java index bc20b90c816c..91013eeb04ac 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java @@ -201,6 +201,8 @@ public class StackRenderer extends LazyStackRenderer { * this threshold, the image is hidden. */ public static final int ONBOARDING_SHOW_IMAGE_HEIGHT_THRESHOLD = 450; + public static final int ONBOARDING_SMALL_IMAGE_MAX_HEIGHT = 250; // "small" cutoff + public static final int ONBOARDING_SMALL_IMAGE_REQUIRED_TOTAL = 314; // 256 + 32(top/bot) + 32(extra) private MPerspective currentPerspectiveForOnboarding; @@ -790,6 +792,7 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding || onBoardingImage == null || onBoardingImage.isDisposed()) { return; } + int imgH = getImageHeight(onBoardingImage); boolean showComposite = tabFolder.getItemCount() == 0; boolean compositeVisible = onBoarding.isVisible(); boolean imageVisible = onBoardingImage.isVisible(); @@ -803,7 +806,15 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding if (!new Point(width, height).equals(onBoarding.getSize())) { onBoarding.setSize(width, height); - boolean showImage = height > ONBOARDING_SHOW_IMAGE_HEIGHT_THRESHOLD; + boolean showImage; + if (imgH > 0 && imgH <= ONBOARDING_SMALL_IMAGE_MAX_HEIGHT) { + // For small images, require a smaller total height (314 overall) + showImage = height >= ONBOARDING_SMALL_IMAGE_REQUIRED_TOTAL + - (ONBOARDING_TOP_SPACING + ONBOARDING_SPACING); // 314 - 32 = 282 + } else { + // For larger images, fall back to the original (higher) threshold + showImage = height >= ONBOARDING_SHOW_IMAGE_HEIGHT_THRESHOLD; // e.g., 450 content height + } if (imageVisible != showImage || showComposite != compositeVisible) { onBoardingImage.setVisible(showImage); ((GridData) onBoardingImage.getLayoutData()).exclude = !showImage; @@ -819,6 +830,23 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding } } + /** + * Returns the height of the image assigned to the given label. + * + * @param label the Label widget holding the image + * @return the height in pixels, or 0 if the label has no valid image + */ + private static int getImageHeight(Label label) { + if (label == null || label.isDisposed()) { + return 0; + } + Image img = label.getImage(); + if (img == null || img.isDisposed()) { + return 0; + } + return img.getBounds().height; + } + private boolean getMRUValue() { return getMRUValueFromPreferences(); } From d63891facb4ccc5de0e6bd8d868c6a890bf89ad9 Mon Sep 17 00:00:00 2001 From: andrew-tram <106191140+andrew-tram@users.noreply.github.com> Date: Mon, 8 Sep 2025 16:45:42 -0400 Subject: [PATCH 2/4] Apply suggestion from @marcushoepfner Co-authored-by: marcushoepfner --- .../eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java index 91013eeb04ac..b16302c59020 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java @@ -792,7 +792,7 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding || onBoardingImage == null || onBoardingImage.isDisposed()) { return; } - int imgH = getImageHeight(onBoardingImage); + int imgHeight = getImageHeight(onBoardingImage); boolean showComposite = tabFolder.getItemCount() == 0; boolean compositeVisible = onBoarding.isVisible(); boolean imageVisible = onBoardingImage.isVisible(); From 53e463e752abe0fed9a094ca730b5b039d356c88 Mon Sep 17 00:00:00 2001 From: andrew-tram <106191140+andrew-tram@users.noreply.github.com> Date: Mon, 8 Sep 2025 16:57:24 -0400 Subject: [PATCH 3/4] Update StackRenderer.java > did you consider putting this in a method and provide some java doc for the method. With that: > https://github.com/eclipse-platform/eclipse.platform.ui/pull/3169/files/6841a0ef260ff65316607a1d4d2b6617b8dc637b#r2329939384 > * very detailed math code is hidden from the method flow (increased readability of the setOnboardingControlSize method) > * comments can be removed and put into java doc of the new method > > WDYT? --- .../renderers/swt/StackRenderer.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java index b16302c59020..395c688b48db 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/StackRenderer.java @@ -805,22 +805,12 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding int height = folderBounds.height - ONBOARDING_TOP_SPACING - ONBOARDING_SPACING; if (!new Point(width, height).equals(onBoarding.getSize())) { onBoarding.setSize(width, height); - - boolean showImage; - if (imgH > 0 && imgH <= ONBOARDING_SMALL_IMAGE_MAX_HEIGHT) { - // For small images, require a smaller total height (314 overall) - showImage = height >= ONBOARDING_SMALL_IMAGE_REQUIRED_TOTAL - - (ONBOARDING_TOP_SPACING + ONBOARDING_SPACING); // 314 - 32 = 282 - } else { - // For larger images, fall back to the original (higher) threshold - showImage = height >= ONBOARDING_SHOW_IMAGE_HEIGHT_THRESHOLD; // e.g., 450 content height - } + boolean showImage = shouldShowOnboardingImage(height, imgHeight); if (imageVisible != showImage || showComposite != compositeVisible) { onBoardingImage.setVisible(showImage); ((GridData) onBoardingImage.getLayoutData()).exclude = !showImage; onboardingComposite.getParent().layout(true); } - } } else { if (compositeVisible) { @@ -830,6 +820,29 @@ private void setOnboardingControlSize(CTabFolder tabFolder, Composite onBoarding } } + /** + * Checks if the onboarding image should be shown, based on how much vertical + * space is available and the image size. + *

+ *

+ * + * @param contentHeight available space in pixels + * @param imageHeight image height in pixels (0 if none) + * @return true if the image should be shown; false otherwise + */ + private static boolean shouldShowOnboardingImage(int contentHeight, int imageHeight) { + if (imageHeight > 0 && imageHeight <= ONBOARDING_SMALL_IMAGE_MAX_HEIGHT) { + // 314 total minus (top + bottom) = 314 - (30 + 2) = 282 + int required = ONBOARDING_SMALL_IMAGE_REQUIRED_TOTAL - (ONBOARDING_TOP_SPACING + ONBOARDING_SPACING); + return contentHeight >= required; + } + // Larger images fall back to the original (higher) threshold + return contentHeight >= ONBOARDING_SHOW_IMAGE_HEIGHT_THRESHOLD; + } + /** * Returns the height of the image assigned to the given label. * From 3c7103dfd091856c5ce1d93a7ab94f9d5039f50c Mon Sep 17 00:00:00 2001 From: andrew-tram <106191140+andrew-tram@users.noreply.github.com> Date: Mon, 1 Dec 2025 11:40:12 -0500 Subject: [PATCH 4/4] Update MANIFEST.MF update version --- .../META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF index 249542c521df..ca4f9ad426c4 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.e4.ui.workbench.renderers.swt;singleton:=true -Bundle-Version: 0.16.1000.qualifier +Bundle-Version: 0.16.1100.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin