This is an automated email from the ASF dual-hosted git repository.
mattcasters pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 7dfcf9ab43 Issue #8057 : Rasterize palette tree icons at the zoomed
small-icon size (#8107)
7dfcf9ab43 is described below
commit 7dfcf9ab43d83cae234f8ca4a99251b3c54be559
Author: Matt Casters <[email protected]>
AuthorDate: Wed Aug 26 20:02:31 2026 +0200
Issue #8057 : Rasterize palette tree icons at the zoomed small-icon size
(#8107)
Plugin icons in the transform/action palette were drawn at a raw 16x16
while folder icons in the same SWT tree (and explorer file-type icons)
used Hop's zoomed size. Windows then stretched the smaller bitmaps in
the tree ImageList, which made them look pixelated.
---
ui/src/main/java/org/apache/hop/ui/core/ConstUi.java | 8 ++++++++
.../main/java/org/apache/hop/ui/core/gui/GuiResource.java | 12 +++++++++++-
.../org/apache/hop/ui/hopgui/palette/GraphPaletteTree.java | 14 ++++++--------
ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java | 9 +++++++++
4 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
b/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
index 046e656c3a..e93598aaea 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/ConstUi.java
@@ -44,6 +44,14 @@ public class ConstUi {
public static final int DOCUMENTATION_ICON_SIZE = 14;
+ /**
+ * Bitmap size of a logical icon at a Hop zoom factor. Same truncation as
{@code
+ * GuiResource#getZoomedImaged} and explorer tree icons: {@code (int)
(zoomFactor * logicalSize)}.
+ */
+ public static int zoomedIconSize(int logicalSize, double zoomFactor) {
+ return (int) (zoomFactor * logicalSize);
+ }
+
/** Default checkbox width */
public static final int CHECKBOX_WIDTH = 20;
diff --git a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiResource.java
b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiResource.java
index f5f981df5a..7ed36b3d36 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiResource.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiResource.java
@@ -1224,7 +1224,17 @@ public class GuiResource {
private Image getZoomedImaged(
SwtUniversalImage universalImage, Device device, int width, int height) {
return universalImage.getAsBitmapForSize(
- device, (int) (zoomFactor * width), (int) (zoomFactor * height));
+ device,
+ ConstUi.zoomedIconSize(width, zoomFactor),
+ ConstUi.zoomedIconSize(height, zoomFactor));
+ }
+
+ /**
+ * Tree/toolbar-sized bitmap of {@code image}, scaled by the current zoom
factor. Do not dispose
+ * the returned image; it is cached on the universal image.
+ */
+ public Image getSmallIcon(SwtUniversalImage image) {
+ return getZoomedImaged(image, display, ConstUi.SMALL_ICON_SIZE,
ConstUi.SMALL_ICON_SIZE);
}
/**
diff --git
a/ui/src/main/java/org/apache/hop/ui/hopgui/palette/GraphPaletteTree.java
b/ui/src/main/java/org/apache/hop/ui/hopgui/palette/GraphPaletteTree.java
index 2510e98746..8c19587207 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/palette/GraphPaletteTree.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/palette/GraphPaletteTree.java
@@ -19,9 +19,9 @@ package org.apache.hop.ui.hopgui.palette;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
+import org.apache.hop.core.SwtUniversalImage;
import org.apache.hop.core.gui.Point;
import org.apache.hop.i18n.BaseMessages;
-import org.apache.hop.ui.core.ConstUi;
import org.apache.hop.ui.core.PropsUi;
import org.apache.hop.ui.core.bus.HopGuiEvents;
import org.apache.hop.ui.core.gui.GuiResource;
@@ -428,14 +428,12 @@ public class GraphPaletteTree extends Composite {
}
private Image iconFor(Item item) {
- int size = ConstUi.SMALL_ICON_SIZE;
GuiResource images = GuiResource.getInstance();
- if (host.getPaletteKind() == Kind.TRANSFORM) {
- return images
- .getSwtImageTransform(item.pluginId())
- .getAsBitmapForSize(getDisplay(), size, size);
- }
- return
images.getSwtImageAction(item.pluginId()).getAsBitmapForSize(getDisplay(),
size, size);
+ SwtUniversalImage swtImage =
+ host.getPaletteKind() == Kind.TRANSFORM
+ ? images.getSwtImageTransform(item.pluginId())
+ : images.getSwtImageAction(item.pluginId());
+ return images.getSmallIcon(swtImage);
}
private void expandAll(boolean expanded) {
diff --git a/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
b/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
index c8e85de1f2..763b55ec47 100644
--- a/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
+++ b/ui/src/test/java/org/apache/hop/ui/core/ConstUiTest.java
@@ -35,6 +35,15 @@ class ConstUiTest {
assertEquals(Charset.availableCharsets().size() + 1, encodings.length);
}
+ @Test
+ void zoomedIconSizeMatchesExplorerAndGuiResourceTruncation() {
+ assertEquals(16, ConstUi.zoomedIconSize(ConstUi.SMALL_ICON_SIZE, 1.0));
+ assertEquals(24, ConstUi.zoomedIconSize(ConstUi.SMALL_ICON_SIZE, 1.5));
+ assertEquals(32, ConstUi.zoomedIconSize(ConstUi.SMALL_ICON_SIZE, 2.0));
+ assertEquals(20, ConstUi.zoomedIconSize(ConstUi.SMALL_ICON_SIZE, 1.25));
+ assertEquals(21, ConstUi.zoomedIconSize(ConstUi.SMALL_ICON_SIZE, 1.333));
+ }
+
@Test
void encodingListContainsTheAvailableCharsets() {
List<String> encodings = Arrays.asList(ConstUi.getEncodings());