Merge pull request #5654 from Sardtok/5246

Fixes #5246 by overriding getPreferredSize and setting height to 0.
This commit is contained in:
Ben Fry
2018-09-20 18:26:07 -04:00
committed by GitHub
@@ -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 class ZoomTreeCellRenderer extends DefaultTreeCellRenderer {
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 class ZoomTreeCellRenderer extends DefaultTreeCellRenderer {
// 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);
}