diff --git a/app/src/processing/app/ui/ZoomTreeCellRenderer.java b/app/src/processing/app/ui/ZoomTreeCellRenderer.java index e7e3b6a8b8..2589d517ec 100644 --- a/app/src/processing/app/ui/ZoomTreeCellRenderer.java +++ b/app/src/processing/app/ui/ZoomTreeCellRenderer.java @@ -22,8 +22,8 @@ package processing.app.ui; -import java.awt.Component; -import java.awt.EventQueue; +import java.awt.*; +import java.util.Optional; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; @@ -37,6 +37,12 @@ public ZoomTreeCellRenderer(Mode mode) { setFont(mode.getFont("tree.font")); } + @Override + public Dimension getPreferredSize() { + return Optional.ofNullable(super.getPreferredSize()) + .map(d -> new Dimension(d.width, (int) (d.height * 1.15f))) + .orElse(null); + } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, @@ -48,21 +54,9 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, // Adjust height for magnified displays. The font is scaled properly, // but the rows don't automatically use the scaled preferred size. // https://github.com/processing/processing/issues/4936 - int high = getPreferredSize().height; - if (high != 0) { - // Source Sans leading too short, so also add 15% for nicer spacing - final int targetHeight = (int) (high * 1.15f); - int currentHeight = getSize().height; - if (currentHeight != targetHeight) { - // Using invokeLater() to avoid infinite loop on Windows - // https://github.com/processing/processing/issues/5246 - EventQueue.invokeLater(new Runnable() { - public void run() { - tree.setRowHeight(targetHeight); - } - }); - } - } + // Using setRowHeight(0) to force using this cell renderer's preferred height + // https://github.com/processing/processing/issues/5246#issuecomment-379503233 + tree.setRowHeight(0); return super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); }