From 14b8d9029e55ac15ec3e851aff372bccbfcc3ed8 Mon Sep 17 00:00:00 2001 From: aengelke Date: Fri, 8 Aug 2014 18:00:47 +0200 Subject: [PATCH] Style completion panel on windows --- .../mode/experimental/CompletionPanel.java | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/pdex/src/processing/mode/experimental/CompletionPanel.java b/pdex/src/processing/mode/experimental/CompletionPanel.java index e6ed321a7..cf8479a39 100644 --- a/pdex/src/processing/mode/experimental/CompletionPanel.java +++ b/pdex/src/processing/mode/experimental/CompletionPanel.java @@ -110,19 +110,7 @@ public class CompletionPanel { popupMenu.setOpaque(false); popupMenu.setBorder(null); scrollPane = new JScrollPane(); - if (UIManager.getLookAndFeel().getID().equals("Nimbus")) { - UIDefaults defaults = new UIDefaults(); - defaults.put("PopupMenu.contentMargins", new InsetsUIResource(0, 0, 0, 0)); - defaults.put("ScrollPane[Enabled].borderPainter", new Painter() { - public void paint(Graphics2D g, JComponent t, int w, int h) {} - }); - popupMenu.putClientProperty("Nimbus.Overrides", defaults); - scrollPane.putClientProperty("Nimbus.Overrides", defaults); - scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(Integer.MAX_VALUE, 8)); - scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(8, Integer.MAX_VALUE)); - scrollPane.getHorizontalScrollBar().setUI(new CompletionScrollBarUI()); - scrollPane.getVerticalScrollBar().setUI(new CompletionScrollBarUI()); - } + styleScrollPane(); scrollPane.setViewportView(completionList = createSuggestionList(position, items)); popupMenu.add(scrollPane, BorderLayout.CENTER); popupMenu.setPopupSize(calcWidth(), calcHeight(items.getSize())); //TODO: Eradicate this evil @@ -134,11 +122,40 @@ public class CompletionPanel { //log("Suggestion shown: " + System.currentTimeMillis()); } + private void styleScrollPane() { + String laf = UIManager.getLookAndFeel().getID(); + if (!laf.equals("Nimbus") && !laf.equals("Windows")) return; + + String thumbColor = null; + if (laf.equals("Nimbus")) { + UIDefaults defaults = new UIDefaults(); + defaults.put("PopupMenu.contentMargins", new InsetsUIResource(0, 0, 0, 0)); + defaults.put("ScrollPane[Enabled].borderPainter", new Painter() { + public void paint(Graphics2D g, JComponent t, int w, int h) {} + }); + popupMenu.putClientProperty("Nimbus.Overrides", defaults); + scrollPane.putClientProperty("Nimbus.Overrides", defaults); + thumbColor = "nimbusBlueGrey"; + } else if (laf.equals("Windows")) { + thumbColor = "ScrollBar.thumbShadow"; + } + + scrollPane.getHorizontalScrollBar().setPreferredSize(new Dimension(Integer.MAX_VALUE, 8)); + scrollPane.getVerticalScrollBar().setPreferredSize(new Dimension(8, Integer.MAX_VALUE)); + scrollPane.getHorizontalScrollBar().setUI(new CompletionScrollBarUI(thumbColor)); + scrollPane.getVerticalScrollBar().setUI(new CompletionScrollBarUI(thumbColor)); + } + public static class CompletionScrollBarUI extends BasicScrollBarUI { + private String thumbColorName; + + protected CompletionScrollBarUI(String thumbColorName) { + this.thumbColorName = thumbColorName; + } @Override protected void paintThumb(Graphics g, JComponent c, Rectangle trackBounds) { - g.setColor((Color) UIManager.get("nimbusBlueGrey")); + g.setColor((Color) UIManager.get(thumbColorName)); g.fillRect(trackBounds.x, trackBounds.y, trackBounds.width, trackBounds.height); }