diff --git a/app/build.xml b/app/build.xml
index 2fdf8afe0..1ece8d30e 100644
--- a/app/build.xml
+++ b/app/build.xml
@@ -39,7 +39,8 @@
lib/ant.jar;
lib/ant-launcher.jar;
lib/jna.jar;
- lib/jna-platform.jar"
+ lib/jna-platform.jar;
+ lib/vaqua7.jar"
debug="on"
nowarn="true">
diff --git a/app/src/processing/app/platform/DefaultPlatform.java b/app/src/processing/app/platform/DefaultPlatform.java
index 97afad1fc..27b7a2151 100644
--- a/app/src/processing/app/platform/DefaultPlatform.java
+++ b/app/src/processing/app/platform/DefaultPlatform.java
@@ -23,14 +23,19 @@
package processing.app.platform;
+import java.awt.Color;
+import java.awt.Component;
import java.awt.Desktop;
+import java.awt.Graphics;
import java.io.File;
import java.net.URI;
+import javax.swing.Icon;
import javax.swing.UIManager;
import com.sun.jna.Library;
import com.sun.jna.Native;
+import org.violetlib.aqua.AquaLookAndFeel;
import processing.app.Base;
import processing.app.Preferences;
@@ -75,7 +80,20 @@ public class DefaultPlatform {
public void setLookAndFeel() throws Exception {
String laf = Preferences.get("editor.laf");
if (laf == null || laf.length() == 0) { // normal situation
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ if (System.getProperty("os.name", "").startsWith("Mac OS")) {
+ UIManager.setLookAndFeel("org.violetlib.aqua.AquaLookAndFeel");
+
+ Icon collapse = new MacTreeIcon(true);
+ Icon open = new MacTreeIcon(false);
+ Icon leaf = new MacEmptyIcon();
+ UIManager.put("Tree.closedIcon", leaf);
+ UIManager.put("Tree.openIcon", leaf);
+ UIManager.put("Tree.collapsedIcon", open);
+ UIManager.put("Tree.expandedIcon", collapse);
+ UIManager.put("Tree.leafIcon", leaf);
+ } else {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ }
} else {
UIManager.setLookAndFeel(laf);
}
@@ -188,4 +206,48 @@ public class DefaultPlatform {
return ZOOM_DEFAULT_SIZING;
}
+ class MacEmptyIcon implements Icon {
+ private final int SIZE = 1;
+
+ public MacEmptyIcon() {
+ }
+
+ public int getIconWidth() {
+ return SIZE;
+ }
+
+ public int getIconHeight() {
+ return SIZE;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y) {}
+ }
+
+ class MacTreeIcon implements Icon {
+ private final int SIZE = 12;
+ private final boolean isOpen;
+
+ public MacTreeIcon(boolean newIsOpen) {
+ isOpen = newIsOpen;
+ }
+
+ public int getIconWidth() {
+ return SIZE;
+ }
+
+ public int getIconHeight() {
+ return SIZE;
+ }
+
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ g.setColor(Color.GRAY);
+
+ g.drawLine(x + SIZE / 2 - 3, y + SIZE / 2, x + SIZE / 2 + 3, y + SIZE / 2);
+
+ if (!isOpen) {
+ g.drawLine(x + SIZE / 2, y + SIZE / 2 - 3, x + SIZE / 2, y + SIZE / 2 + 3);
+ }
+ }
+ }
+
}
diff --git a/app/src/processing/app/ui/EditorConsole.java b/app/src/processing/app/ui/EditorConsole.java
index 186e692b9..ecdd6e897 100644
--- a/app/src/processing/app/ui/EditorConsole.java
+++ b/app/src/processing/app/ui/EditorConsole.java
@@ -188,7 +188,8 @@ public class EditorConsole extends JScrollPane {
StyleConstants.setBold(errStyle, font.isBold());
StyleConstants.setItalic(errStyle, font.isItalic());
- if (UIManager.getLookAndFeel().getID().equals("Nimbus")) {
+ String lookAndFeel = UIManager.getLookAndFeel().getID();
+ if (lookAndFeel.equals("Nimbus") || lookAndFeel.equals("VAqua")) {
getViewport().setBackground(bgColor);
consoleTextPane.setOpaque(false);
consoleTextPane.setBackground(new Color(0, 0, 0, 0));
diff --git a/build/build.xml b/build/build.xml
index 0f0ecd49e..94e33eb48 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -424,6 +424,7 @@
+
@@ -721,6 +722,7 @@
+
diff --git a/java/build.xml b/java/build.xml
index ff397d21e..98dda0f15 100644
--- a/java/build.xml
+++ b/java/build.xml
@@ -54,6 +54,7 @@
+
diff --git a/java/src/processing/mode/java/debug/VariableInspector.java b/java/src/processing/mode/java/debug/VariableInspector.java
index 7b1227150..682d7e8c5 100644
--- a/java/src/processing/mode/java/debug/VariableInspector.java
+++ b/java/src/processing/mode/java/debug/VariableInspector.java
@@ -610,7 +610,7 @@ public class VariableInspector extends JDialog {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
- setForeground(tree.isEnabled() ? Color.BLACK : Color.GRAY);
+ //setForeground(tree.isEnabled() ? Color.BLACK : Color.GRAY);
if (value instanceof VariableNode) {
VariableNode var = (VariableNode) value;