This is an automated email from the ASF dual-hosted git repository.

hansva 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 3a11fb1b47 Keep Hop Web Help button icon aligned with OK/Cancel (#8181)
3a11fb1b47 is described below

commit 3a11fb1b47a608c5f403261198181f36addea837
Author: Lance <[email protected]>
AuthorDate: Mon Aug 31 16:14:18 2026 +0800

    Keep Hop Web Help button icon aligned with OK/Cancel (#8181)
    
    Signed-off-by: lance <[email protected]>
---
 .../org/apache/hop/ui/hopgui/dark-mode.css         |  7 ++++
 .../org/apache/hop/ui/hopgui/light-mode.css        |  7 ++++
 .../apache/hop/ui/hopgui/dialog/NotePadDialog.java |  3 +-
 .../java/org/apache/hop/ui/util/HelpUtils.java     | 43 +++++++++++++++++++++-
 .../java/org/apache/hop/ui/util/HelpUtilsTest.java | 12 ++++++
 5 files changed, 70 insertions(+), 2 deletions(-)

diff --git a/rap/src/main/resources/org/apache/hop/ui/hopgui/dark-mode.css 
b/rap/src/main/resources/org/apache/hop/ui/hopgui/dark-mode.css
index 1746db4aac..a7bf859b86 100644
--- a/rap/src/main/resources/org/apache/hop/ui/hopgui/dark-mode.css
+++ b/rap/src/main/resources/org/apache/hop/ui/hopgui/dark-mode.css
@@ -183,6 +183,13 @@ Button[TOGGLE][FLAT] {
     text-shadow: none;
 }
 
+/* Compact padding so a 16px help icon fits the same height as text-only 
OK/Cancel. */
+Button[PUSH].helpButton,
+Button[PUSH][BORDER].helpButton,
+Button[PUSH][FLAT].helpButton {
+    padding: 4px 12px;
+}
+
 Button[ARROW],
 Button[ARROW][BORDER],
 Button[ARROW][FLAT] {
diff --git a/rap/src/main/resources/org/apache/hop/ui/hopgui/light-mode.css 
b/rap/src/main/resources/org/apache/hop/ui/hopgui/light-mode.css
index 0d0179c456..0287216aa6 100644
--- a/rap/src/main/resources/org/apache/hop/ui/hopgui/light-mode.css
+++ b/rap/src/main/resources/org/apache/hop/ui/hopgui/light-mode.css
@@ -181,6 +181,13 @@ Button[TOGGLE][FLAT] {
     text-shadow: 0 1px 0 #ffffff;
 }
 
+/* Compact padding so a 16px help icon fits the same height as text-only 
OK/Cancel. */
+Button[PUSH].helpButton,
+Button[PUSH][BORDER].helpButton,
+Button[PUSH][FLAT].helpButton {
+    padding: 4px 12px;
+}
+
 Button[ARROW],
 Button[ARROW][BORDER],
 Button[ARROW][FLAT] {
diff --git 
a/ui/src/main/java/org/apache/hop/ui/hopgui/dialog/NotePadDialog.java 
b/ui/src/main/java/org/apache/hop/ui/hopgui/dialog/NotePadDialog.java
index 20c33452b9..f3723107b9 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/dialog/NotePadDialog.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/dialog/NotePadDialog.java
@@ -30,6 +30,7 @@ import org.apache.hop.ui.core.gui.WindowProperty;
 import org.apache.hop.ui.core.widget.StyledTextComp;
 import org.apache.hop.ui.core.widget.TextComposite;
 import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
+import org.apache.hop.ui.util.HelpUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.custom.CTabFolder;
@@ -167,13 +168,13 @@ public class NotePadDialog extends Dialog {
     // Help (Markdown notes) — bottom-left, same placement as transform/action 
dialogs
     Button wHelp = new Button(shell, SWT.PUSH);
     PropsUi.setLook(wHelp);
-    wHelp.setImage(GuiResource.getInstance().getImageHelp());
     wHelp.setText(BaseMessages.getString(PKG, "NotePadDialog.Help.Button"));
     wHelp.setToolTipText(BaseMessages.getString(PKG, 
"NotePadDialog.Markdown.Help.Tooltip"));
     FormData fdHelp = new FormData();
     fdHelp.left = new FormAttachment(0, 0);
     fdHelp.bottom = new FormAttachment(100, 0);
     wHelp.setLayoutData(fdHelp);
+    HelpUtils.applyHelpButtonImage(wHelp);
     wHelp.addListener(SWT.Selection, e -> MarkdownNoteHelp.show(shell));
 
     wNoteFolder = new CTabFolder(shell, SWT.BORDER);
diff --git a/ui/src/main/java/org/apache/hop/ui/util/HelpUtils.java 
b/ui/src/main/java/org/apache/hop/ui/util/HelpUtils.java
index 8c5e1f0ee2..11826abaa1 100644
--- a/ui/src/main/java/org/apache/hop/ui/util/HelpUtils.java
+++ b/ui/src/main/java/org/apache/hop/ui/util/HelpUtils.java
@@ -30,6 +30,7 @@ import org.apache.hop.core.plugins.TransformPluginType;
 import org.apache.hop.core.util.StringUtil;
 import org.apache.hop.core.util.Utils;
 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.dialog.BaseDialog;
 import org.apache.hop.ui.core.dialog.ErrorDialog;
@@ -49,6 +50,8 @@ import org.eclipse.swt.widgets.Shell;
 
 public class HelpUtils {
   private static final Class<?> PKG = HelpUtils.class;
+  private static final String RAP_CUSTOM_VARIANT = 
"org.eclipse.rap.rwt.customVariant";
+  private static final String HELP_BUTTON_VARIANT = "helpButton";
 
   public static Button createHelpButton(final Composite parent, final IPlugin 
plugin) {
     Button button = newButton(parent);
@@ -65,18 +68,56 @@ public class HelpUtils {
   private static Button newButton(final Composite parent) {
     Button button = new Button(parent, SWT.PUSH);
     PropsUi.setLook(button);
-    button.setImage(GuiResource.getInstance().getImageHelp());
     button.setText(BaseMessages.getString(PKG, "System.Button.Help"));
     button.setToolTipText(BaseMessages.getString(PKG, "System.Tooltip.Help"));
     FormData fdButton = new FormData();
     fdButton.left = new FormAttachment(0, 0);
     fdButton.bottom = new FormAttachment(100, 0);
     button.setLayoutData(fdButton);
+    applyHelpButtonImage(button);
     // Always available in read-only dialogs
     BaseDialog.keepEnabledInReadOnly(button);
     return button;
   }
 
+  /**
+   * Set the standard help icon on a push button.
+   *
+   * <p>Call after {@code setText} and after attaching {@link FormData}. On 
Hop Web, RAP sizes PUSH
+   * buttons to the zoomed bitmap plus theme padding, which would make Help 
taller than OK/Cancel. A
+   * font-sized bitmap, a compact {@code helpButton} variant, and a locked 
height keep the
+   * question-mark icon without changing the row height. Native SWT already 
fits {@link
+   * ConstUi#SMALL_ICON_SIZE} in platform chrome.
+   */
+  public static void applyHelpButtonImage(Button button) {
+    if (button == null || button.isDisposed()) {
+      return;
+    }
+    if (!EnvironmentUtils.getInstance().isWeb()) {
+      button.setImage(GuiResource.getInstance().getImageHelp());
+      return;
+    }
+
+    int textHeight = button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
+    int request = 
webHelpIconRequestSize(PropsUi.getInstance().getZoomFactor());
+    button.setImage(GuiResource.getInstance().getImage("ui/images/help.svg", 
request, request));
+    button.setData(RAP_CUSTOM_VARIANT, HELP_BUTTON_VARIANT);
+    if (button.getLayoutData() instanceof FormData fd) {
+      fd.height = textHeight;
+    }
+  }
+
+  /**
+   * Inverse of {@link GuiResource} zoom so the help bitmap is {@link 
ConstUi#SMALL_ICON_SIZE} px on
+   * Hop Web.
+   */
+  static int webHelpIconRequestSize(double zoomFactor) {
+    if (zoomFactor <= 0) {
+      return ConstUi.SMALL_ICON_SIZE;
+    }
+    return Math.max(1, (int) Math.round(ConstUi.SMALL_ICON_SIZE / zoomFactor));
+  }
+
   public static boolean isPluginDocumented(IPlugin plugin) {
     if (plugin == null) {
       return false;
diff --git a/ui/src/test/java/org/apache/hop/ui/util/HelpUtilsTest.java 
b/ui/src/test/java/org/apache/hop/ui/util/HelpUtilsTest.java
index c175c67dd4..d2926c3175 100644
--- a/ui/src/test/java/org/apache/hop/ui/util/HelpUtilsTest.java
+++ b/ui/src/test/java/org/apache/hop/ui/util/HelpUtilsTest.java
@@ -21,8 +21,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.hop.ui.core.ConstUi;
 import org.junit.jupiter.api.Test;
 
+/** Unit test for {@link HelpUtils} */
 class HelpUtilsTest {
 
   @Test
@@ -46,4 +48,14 @@ class HelpUtilsTest {
     assertEquals("", HelpUtils.appendUtmParameters(""));
     assertEquals(null, HelpUtils.appendUtmParameters(null));
   }
+
+  @Test
+  void webHelpIconRequestSizeCancelsDefaultWebZoom() {
+    // nativeZoomFactor on web is globalZoom / 0.75; at 100% that is 4/3
+    assertEquals(12, HelpUtils.webHelpIconRequestSize(4.0 / 3.0));
+    assertEquals(8, HelpUtils.webHelpIconRequestSize(2.0));
+    assertEquals(ConstUi.SMALL_ICON_SIZE, HelpUtils.webHelpIconRequestSize(0));
+    assertEquals(ConstUi.SMALL_ICON_SIZE, 
HelpUtils.webHelpIconRequestSize(-1));
+    assertEquals(1, HelpUtils.webHelpIconRequestSize(100));
+  }
 }

Reply via email to