From b0ba2098ea194b412fca91370dfde17aaaaf84c8 Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:10:57 +0100 Subject: [PATCH 1/8] ToolBarLayout: fix typo and made name more clear --- .../common/org/eclipse/swt/widgets/toolbar/ToolBarLayout.java | 2 +- .../eclipse/swt/widgets/toolbar/ToolBarLayoutGenerator.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayout.java index 781a646d13..f4c5161227 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayout.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayout.java @@ -135,7 +135,7 @@ void setX(int x) { /** * Mirrors the layout vertically. */ - void mirrow() { + void mirrorX() { for (ItemRecord itemRecord : items) { itemRecord.bounds.x = availableSpace.x - itemRecord.bounds.x - itemRecord.bounds.width; } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayoutGenerator.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayoutGenerator.java index 75a706f364..fa03e85254 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayoutGenerator.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarLayoutGenerator.java @@ -71,7 +71,7 @@ private ToolBarLayout computeSingleHorizontalRow(Point offset) { row.setY(offset.y); if (rtl) { - row.mirrow(); + row.mirrorX(); } int width = offset.x + row.usedSpace.x; @@ -114,7 +114,7 @@ private ToolBarLayout computeMultipleHorizontalRows(Point offset) { } if (rtl) { - row.mirrow(); + row.mirrorX(); } } From cfc677150ee8bae5ada4eb8345900ca5510bddd9 Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:12:15 +0100 Subject: [PATCH 2/8] ToolBarRenderer: fix typo --- .../org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java index a77d00c78a..40dabea432 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java @@ -72,8 +72,8 @@ private ToolBarLayout computeLayout(Point size) { List itemRecords = new ArrayList<>(); for (int i = 0; i < bar.getItemCount(); i++) { ToolItem item = bar.getItem(i); - Point preferedSize = item.getSize(); - Rectangle initialBounds = new Rectangle(0, 0, preferedSize.x, preferedSize.y); + Point preferredSize = item.getSize(); + Rectangle initialBounds = new Rectangle(0, 0, preferredSize.x, preferredSize.y); ItemRecord itemRecord = new ItemRecord(i, initialBounds, item.isSeparator()); itemRecords.add(itemRecord); } From 47179b0d7f2b26a49b6810beb2620c406cee9c16 Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:12:53 +0100 Subject: [PATCH 3/8] ToolBarRenderer.render: use enhanced for-loop --- .../org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java index 40dabea432..7d333ef4c7 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java @@ -50,8 +50,7 @@ private void render(GC gc, Point size, List rows) { gc.drawLine(0, 0, size.x, 0); } - for (int i = 0; i < rows.size(); i++) { - Row row = rows.get(i); + for (Row row : rows) { for (ItemRecord itemRecord : row.items) { bar.getItem(itemRecord.index()).render(gc, itemRecord.bounds()); } From cf8ea7b48b42efa6778bcb8ddac52d9d8ec9a5db Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:13:32 +0100 Subject: [PATCH 4/8] Rename ToolBarRenderer to DefaultToolBarRenderer --- .../Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java | 2 +- .../{ToolBarRenderer.java => DefaultToolBarRenderer.java} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/{ToolBarRenderer.java => DefaultToolBarRenderer.java} (96%) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java index febc6e278a..9bb8bd77fb 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java @@ -148,7 +148,7 @@ public ToolBar(Composite parent, int style, boolean internal) { super(parent, checkStyle(style)); this.style |= SWT.DOUBLE_BUFFERED; - renderer = new ToolBarRenderer(this); + renderer = new DefaultToolBarRenderer(this); Listener listener = event -> { if (isDisposed()) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java similarity index 96% rename from bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java rename to bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java index 7d333ef4c7..3a2555e1f9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/ToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java @@ -25,13 +25,13 @@ /** * Default renderer for the ToolBar. */ -public class ToolBarRenderer implements IToolBarRenderer { +public class DefaultToolBarRenderer implements IToolBarRenderer { public static final Color COLOR_SEPARATOR = new Color(Display.getDefault(), 160, 160, 160); private final ToolBar bar; private int rowCount = SWT.DEFAULT; - public ToolBarRenderer(ToolBar toolbar) { + public DefaultToolBarRenderer(ToolBar toolbar) { this.bar = toolbar; } From 58380765a52d09a798681ec594c0cb8a7ccc4cfa Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:14:48 +0100 Subject: [PATCH 5/8] ToolBar.IToolBarRenderer: extract to abstract class ToolBarRenderer --- .../org/eclipse/swt/widgets/ToolBar.java | 31 +------------ .../eclipse/swt/widgets/ToolBarRenderer.java | 45 +++++++++++++++++++ .../toolbar/DefaultToolBarRenderer.java | 3 +- 3 files changed, 47 insertions(+), 32 deletions(-) create mode 100644 bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java index 9bb8bd77fb..b3d29e5317 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java @@ -55,35 +55,6 @@ */ public class ToolBar extends Composite { - /** - * Renderer interface for the {@link ToolBar} widget. All renderers have to - * implement this to work with the ToolBar. - */ - public interface IToolBarRenderer { - - /** - * Renders the handle. - * - * @param gc GC to render with. - * @param bounds Bounds of the rendering. x and y are always 0. - */ - void render(GC gc, Rectangle bounds); - - /** - * Computes the size of the rendered ToolBar. - * - * @return The size as {@link Point} - */ - Point computeSize(Point size); - - /** - * Returns the row count of the rendered widget. - * - * @return The row count. - */ - int rowCount(); - } - /** The {@link ToolItem}s contained in the {@link ToolBar} */ private final java.util.List items = new ArrayList<>(); @@ -91,7 +62,7 @@ public interface IToolBarRenderer { public int itemCount; /** The renderer used to render to {@link ToolBar}. */ - private final IToolBarRenderer renderer; + private final ToolBarRenderer renderer; private final boolean flat; private final boolean wrap; diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java new file mode 100644 index 0000000000..f8856e8bdf --- /dev/null +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2000, 2021 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.widgets; + +import org.eclipse.swt.graphics.*; + +/** + * Renderer interface for the {@link ToolBar} widget. All renderers have to + * implement this to work with the ToolBar. + */ +public abstract class ToolBarRenderer { + + /** + * Renders the handle. + * + * @param gc GC to render with. + * @param bounds Bounds of the rendering. x and y are always 0. + */ + public abstract void render(GC gc, Rectangle bounds); + + /** + * Computes the size of the rendered ToolBar. + * + * @return The size as {@link Point} + */ + public abstract Point computeSize(Point size); + + /** + * Returns the row count of the rendered widget. + * + * @return The row count. + */ + public abstract int rowCount(); +} diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java index 3a2555e1f9..444155fc9f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java @@ -19,13 +19,12 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.widgets.*; -import org.eclipse.swt.widgets.ToolBar.*; import org.eclipse.swt.widgets.toolbar.ToolBarLayout.*; /** * Default renderer for the ToolBar. */ -public class DefaultToolBarRenderer implements IToolBarRenderer { +public class DefaultToolBarRenderer extends ToolBarRenderer { public static final Color COLOR_SEPARATOR = new Color(Display.getDefault(), 160, 160, 160); private final ToolBar bar; From 0cac4b023aff204b7a80d0530eb2d1888bb7626a Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Sun, 16 Mar 2025 13:16:50 +0100 Subject: [PATCH 6/8] ToolBar.computeSizeInPixels should not be overridden it is an implementation detail of the super class --- .../common/org/eclipse/swt/widgets/ToolBar.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java index b3d29e5317..240c3be3cf 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java @@ -328,14 +328,6 @@ public Point computeSize(int wHint, int hHint, boolean changed) { return size; } - Point computeSizeInPixels(int wHint, int hHint, boolean changed) { - checkWidget(); - Point sizeHint = new Point(wHint, hHint); - Point size = renderer.computeSize(sizeHint); - - return DPIUtil.autoScaleUp(size); - } - void createItem(ToolItem item, int index) { items.add(index, item); itemCount = items.size(); From 5ed1abb6845a766969a7ccaf0ea15535e297492d Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Mon, 17 Mar 2025 16:27:41 +0100 Subject: [PATCH 7/8] Make ToolBarRenderer subclass of ControLRenderer --- .../common/org/eclipse/swt/widgets/ToolBar.java | 7 +++---- .../org/eclipse/swt/widgets/ToolBarRenderer.java | 14 +++++--------- .../widgets/toolbar/DefaultToolBarRenderer.java | 11 ++++++----- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java index 240c3be3cf..6d9bcf25ed 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java @@ -18,7 +18,6 @@ import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; -import org.eclipse.swt.internal.*; import org.eclipse.swt.widgets.toolbar.*; /** @@ -272,12 +271,12 @@ private void onPaint(Event event) { return; } - Rectangle bounds = getBounds(); - if (bounds.width == 0 && bounds.height == 0) { + final Point size = getSize(); + if (size.x == 0 || size.y == 0) { return; } - Drawing.drawWithGC(this, event.gc, gc -> renderer.render(gc, bounds)); + Drawing.drawWithGC(this, event.gc, gc -> renderer.paint(gc, size.x, size.y)); } /** diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java index f8856e8bdf..a95454b654 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java @@ -19,15 +19,7 @@ * Renderer interface for the {@link ToolBar} widget. All renderers have to * implement this to work with the ToolBar. */ -public abstract class ToolBarRenderer { - - /** - * Renders the handle. - * - * @param gc GC to render with. - * @param bounds Bounds of the rendering. x and y are always 0. - */ - public abstract void render(GC gc, Rectangle bounds); +public abstract class ToolBarRenderer extends ControlRenderer { /** * Computes the size of the rendered ToolBar. @@ -42,4 +34,8 @@ public abstract class ToolBarRenderer { * @return The row count. */ public abstract int rowCount(); + + protected ToolBarRenderer(ToolBar control) { + super(control); + } } diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java index 444155fc9f..e986c9c8b6 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java @@ -31,12 +31,13 @@ public class DefaultToolBarRenderer extends ToolBarRenderer { private int rowCount = SWT.DEFAULT; public DefaultToolBarRenderer(ToolBar toolbar) { + super(toolbar); this.bar = toolbar; } @Override - public void render(GC gc, Rectangle bounds) { - Point size = new Point(bounds.width, bounds.height); + public void paint(GC gc, int width, int height) { + Point size = new Point(width, height); ToolBarLayout layout = computeLayout(size); rowCount = layout.rows().size(); @@ -51,7 +52,8 @@ private void render(GC gc, Point size, List rows) { for (Row row : rows) { for (ItemRecord itemRecord : row.items) { - bar.getItem(itemRecord.index()).render(gc, itemRecord.bounds()); + final ToolItem item = bar.getItem(itemRecord.index()); + item.render(gc, itemRecord.bounds()); } if (row.hasRowSeparator) { drawHorizontalSeparator(gc, row); @@ -109,8 +111,7 @@ public Point computeSize(Point size) { @Override public int rowCount() { if (rowCount == SWT.DEFAULT) { - Rectangle bounds = bar.getBounds(); - Point size = new Point(bounds.x, bounds.y); + Point size = getSize(); rowCount = computeLayout(size).rows().size(); } return rowCount; From ea87dad248562aa99b45b7a0051404579041b1b6 Mon Sep 17 00:00:00 2001 From: Thomas Singer Date: Mon, 17 Mar 2025 16:37:30 +0100 Subject: [PATCH 8/8] ToolBarRenderer.computeSize: make more clear that these parameters are hints expecially in DefaultToolBarRenderer.computeSize it is not obvious whether computeLayout changes the passed Point object. --- .../common/org/eclipse/swt/widgets/ToolBar.java | 5 +---- .../org/eclipse/swt/widgets/ToolBarRenderer.java | 2 +- .../swt/widgets/toolbar/DefaultToolBarRenderer.java | 12 ++++++------ 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java index 6d9bcf25ed..ab92d4c7b2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBar.java @@ -321,10 +321,7 @@ private void onPaint(Event event) { @Override public Point computeSize(int wHint, int hHint, boolean changed) { checkWidget(); - Point sizeHint = new Point(wHint, hHint); - Point size = renderer.computeSize(sizeHint); - - return size; + return renderer.computeSize(wHint, hHint); } void createItem(ToolItem item, int index) { diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java index a95454b654..d501485949 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/ToolBarRenderer.java @@ -26,7 +26,7 @@ public abstract class ToolBarRenderer extends ControlRenderer { * * @return The size as {@link Point} */ - public abstract Point computeSize(Point size); + public abstract Point computeSize(int widthHint, int heightHint); /** * Returns the row count of the rendered widget. diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java index e986c9c8b6..e84920ab90 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/toolbar/DefaultToolBarRenderer.java @@ -86,8 +86,8 @@ private ToolBarLayout computeLayout(Point size) { @Override - public Point computeSize(Point size) { - ToolBarLayout layout = computeLayout(size); + public Point computeSize(int widthHint, int heightHint) { + ToolBarLayout layout = computeLayout(new Point(widthHint, heightHint)); Point computedSize = layout.size(); if (bar.isBorder()) { @@ -96,12 +96,12 @@ public Point computeSize(Point size) { } Point finalSize = new Point(computedSize.x, computedSize.y); - if (size.x > 0) { - finalSize.x = size.x; + if (widthHint > 0) { + finalSize.x = widthHint; } - if (size.y > 0) { - finalSize.y = size.y; + if (heightHint > 0) { + finalSize.y = heightHint; } return finalSize;