diff --git a/app/src/processing/app/ColorChooser.java b/app/src/processing/app/ColorChooser.java
index b4a6ccac8..b261096dd 100644
--- a/app/src/processing/app/ColorChooser.java
+++ b/app/src/processing/app/ColorChooser.java
@@ -442,6 +442,23 @@ public class ColorChooser { //extends JFrame implements DocumentListener {
row.add(Box.createHorizontalGlue());
box.add(row);
+ row = Box.createHorizontalBox();
+ if (Base.isMacOS()) {
+ row.add(Box.createHorizontalStrut(11));
+ } else {
+ row.add(createFixedLabel(""));
+ }
+ button = new JButton("Cancel");
+ button.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ ColorChooser.this.hide();
+ }
+ });
+ row.add(button);
+ row.add(Box.createHorizontalGlue());
+ box.add(row);
//
box.add(Box.createVerticalGlue());
diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java
index e3cd166d5..363f37b6b 100644
--- a/app/src/processing/app/Preferences.java
+++ b/app/src/processing/app/Preferences.java
@@ -28,6 +28,8 @@ import java.io.*;
import java.util.*;
import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.event.*;
import processing.core.*;
@@ -107,6 +109,8 @@ public class Preferences {
int wide, high;
JTextField sketchbookLocationField;
+ JTextField presentColor;
+ JTextField presentColorHex;
JCheckBox editorAntialiasBox;
JCheckBox deletePreviousBox;
JCheckBox whinyBox;
@@ -118,6 +122,8 @@ public class Preferences {
JComboBox consoleSizeField;
JCheckBox inputMethodBox;
JCheckBox autoAssociateBox;
+
+ ColorChooser selector;
JCheckBox errorCheckerBox;
JCheckBox warningsCheckerBox;
@@ -375,6 +381,131 @@ public class Preferences {
top += d.height + GUI_BETWEEN;
+ Container colorBox = Box.createHorizontalBox();
+
+ label = new JLabel("Background color when Presenting: ");
+ colorBox.add(label);
+
+ final String colorTip = ""
+ + "Select the background color used when using Present.
"
+ + "Present is used to present a sketch in full-screen,
"
+ + "accessible from the Sketch menu.";
+ label.setToolTipText(colorTip);
+
+ presentColor = new JTextField(" ");
+ presentColor.setOpaque(true);
+ presentColor.setEnabled(false);
+ presentColor.setBorder(new CompoundBorder(BorderFactory.createMatteBorder(
+ 1, 1, 0, 0, new Color(195, 195, 195)), BorderFactory.createMatteBorder(
+ 0, 0, 1, 1, new Color(54, 54, 54))));
+ presentColor.setBackground(Preferences.getColor("run.present.bgcolor"));
+
+ presentColorHex = new JTextField(6);
+ presentColorHex
+ .setText(Preferences.get("run.present.bgcolor").substring(1));
+ presentColorHex.getDocument().addDocumentListener(new DocumentListener() {
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ final String colorValue = presentColorHex.getText().toUpperCase();
+ if (colorValue.length() == 7 && (colorValue.startsWith("#")))
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ presentColorHex.setText(colorValue.substring(1));
+ }
+ });
+ if (colorValue.length() == 6
+ && colorValue.matches("[0123456789ABCDEF]*")) {
+ presentColor.setBackground(new Color(Integer.parseInt(
+ colorValue.substring(0, 2), 16), Integer.parseInt(
+ colorValue.substring(2, 4), 16), Integer.parseInt(
+ colorValue.substring(4, 6), 16)));
+ if (!colorValue.equals(presentColorHex.getText()))
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ presentColorHex.setText(colorValue);
+ }
+ });
+ }
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ final String colorValue = presentColorHex.getText().toUpperCase();
+ if (colorValue.length() == 7 && (colorValue.startsWith("#")))
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ presentColorHex.setText(colorValue.substring(1));
+ }
+ });
+ if (colorValue.length() == 6
+ && colorValue.matches("[0123456789ABCDEF]*")) {
+ presentColor.setBackground(new Color(Integer.parseInt(
+ colorValue.substring(0, 2), 16), Integer.parseInt(
+ colorValue.substring(2, 4), 16), Integer.parseInt(
+ colorValue.substring(4, 6), 16)));
+ if (!colorValue.equals(presentColorHex.getText()))
+ EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ presentColorHex.setText(colorValue);
+ }
+ });
+ }
+ }
+
+ @Override public void changedUpdate(DocumentEvent e) {}
+ });
+
+ selector = new ColorChooser(dialog, false,
+ Preferences.getColor("run.present.bgcolor"), "OK",
+ new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String colorValue = selector.getHexColor();
+ presentColorHex.setText(colorValue.substring(1));
+ presentColor.setBackground(new Color(Integer.parseInt(
+ colorValue.substring(1, 3), 16), Integer.parseInt(
+ colorValue.substring(3, 5), 16), Integer.parseInt(
+ colorValue.substring(5, 7), 16)));
+ selector.hide();
+ }
+ });
+
+ presentColor.addMouseListener(new MouseListener() {
+ @Override public void mouseReleased(MouseEvent e) {}
+ @Override public void mousePressed(MouseEvent e) {}
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ dialog.setCursor(Cursor.DEFAULT_CURSOR);
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ dialog.setCursor(Cursor.HAND_CURSOR);
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ selector.show();
+ }
+ });
+
+ label = new JLabel("#");
+ colorBox.add(label);
+
+ colorBox.add(presentColorHex);
+
+ colorBox.add(Box.createHorizontalStrut(GUI_SMALL + 2 / 3 * GUI_SMALL));
+
+ colorBox.add(presentColor);
+
+ pain.add(colorBox);
+ d = colorBox.getPreferredSize();
+ colorBox.setBounds(left, top, d.width, d.height);
+
+ top += d.height + GUI_BETWEEN;
+
// [ ] Use smooth text in editor window
editorAntialiasBox = new JCheckBox("Use smooth text in editor window");
@@ -830,6 +961,8 @@ public class Preferences {
consoleSizeField.setSelectedItem(getInteger("console.font.size"));
}
+ setColor("run.present.bgcolor", presentColor.getBackground());
+
setBoolean("editor.input_method_support", inputMethodBox.isSelected()); //$NON-NLS-1$
if (autoAssociateBox != null) {
@@ -896,6 +1029,9 @@ public class Preferences {
fontSizeField.setSelectedItem(getInteger("editor.font.size"));
consoleSizeField.setSelectedItem(getInteger("console.font.size"));
+ presentColor.setBackground(Preferences.getColor("run.present.bgcolor"));
+ presentColorHex.setText(Preferences.get("run.present.bgcolor").substring(1));
+
memoryOverrideBox.
setSelected(getBoolean("run.options.memory")); //$NON-NLS-1$
memoryField.
diff --git a/app/src/processing/app/contrib/ContributionManagerDialog.java b/app/src/processing/app/contrib/ContributionManagerDialog.java
index bc534faa9..c0a23d79f 100644
--- a/app/src/processing/app/contrib/ContributionManagerDialog.java
+++ b/app/src/processing/app/contrib/ContributionManagerDialog.java
@@ -110,7 +110,7 @@ public class ContributionManagerDialog {
status.setErrorMessage("Connection timed out while " +
"downloading the contribution list.");
} else {
- status.setErrorMessage("Could not download the list" +
+ status.setErrorMessage("Could not download the list " +
"of available contributions.");
}
exception.printStackTrace();
@@ -167,6 +167,7 @@ public class ContributionManagerDialog {
category = null;
}
filterLibraries(category, filterField.filters);
+ contributionListPanel.updateColors();
}
});
@@ -423,6 +424,8 @@ public class ContributionManagerDialog {
filter = filter.replaceAll("[^\\x30-\\x39^\\x61-\\x7a^\\x3a]", " ");
filters = Arrays.asList(filter.split(" "));
filterLibraries(category, filters);
+
+ contributionListPanel.updateColors();
}
public String getFilterText() {