diff --git a/build/build.xml b/build/build.xml index 53daaa2d4..fe80505cc 100644 --- a/build/build.xml +++ b/build/build.xml @@ -36,16 +36,7 @@ - - - - - - - - - - + @@ -940,6 +931,8 @@ + + + + + + + + diff --git a/build/linux/processing.desktop b/build/linux/processing.desktop index 1e5bde573..b7c0ef9b1 100644 --- a/build/linux/processing.desktop +++ b/build/linux/processing.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Version=@version@ Name=Processing -Comment=graphics and animation language +Comment=Software sketchbook Exec=processing %F Icon=/opt/processing/lib/icons/pde-256.png Terminal=false diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index 5ff1c7a39..4740cd535 100644 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -1870,8 +1870,9 @@ public class PApplet implements PConstants { /** - * @param display the screen to run the sketch on (1, 2, 3, etc.) + * @param display the screen to run the sketch on (1, 2, 3, etc. or on multiple screens using SPAN) */ + public void fullScreen(String renderer, int display) { if (!fullScreen || !renderer.equals(this.renderer) || diff --git a/core/src/processing/opengl/PGraphicsOpenGL.java b/core/src/processing/opengl/PGraphicsOpenGL.java index ac0bc729d..1147f4675 100644 --- a/core/src/processing/opengl/PGraphicsOpenGL.java +++ b/core/src/processing/opengl/PGraphicsOpenGL.java @@ -5171,7 +5171,7 @@ public class PGraphicsOpenGL extends PGraphics { x*modelview.m20 + y*modelview.m21 + z*modelview.m22 + modelview.m23; // Used to indicate if the light is directional or not. - lightPosition[4 * num + 3] = dir ? 1: 0; + lightPosition[4 * num + 3] = dir ? 0 : 1; } diff --git a/core/src/processing/opengl/shaders/LightVert-vc4.glsl b/core/src/processing/opengl/shaders/LightVert-vc4.glsl index ae145a0fd..b96caa4b3 100644 --- a/core/src/processing/opengl/shaders/LightVert-vc4.glsl +++ b/core/src/processing/opengl/shaders/LightVert-vc4.glsl @@ -101,7 +101,7 @@ void main() { if (lightCount == i) break; vec3 lightPos = lightPosition[i].xyz; - bool isDir = zero_float < lightPosition[i].w; + bool isDir = lightPosition[i].w < one_float; float spotCos = lightSpot[i].x; float spotExp = lightSpot[i].y; diff --git a/core/src/processing/opengl/shaders/LightVert.glsl b/core/src/processing/opengl/shaders/LightVert.glsl index 559ca6407..470fd4b23 100644 --- a/core/src/processing/opengl/shaders/LightVert.glsl +++ b/core/src/processing/opengl/shaders/LightVert.glsl @@ -98,7 +98,7 @@ void main() { if (lightCount == i) break; vec3 lightPos = lightPosition[i].xyz; - bool isDir = zero_float < lightPosition[i].w; + bool isDir = lightPosition[i].w < one_float; float spotCos = lightSpot[i].x; float spotExp = lightSpot[i].y; diff --git a/core/src/processing/opengl/shaders/TexLightVert-vc4.glsl b/core/src/processing/opengl/shaders/TexLightVert-vc4.glsl index c23ce1539..51e88ab05 100644 --- a/core/src/processing/opengl/shaders/TexLightVert-vc4.glsl +++ b/core/src/processing/opengl/shaders/TexLightVert-vc4.glsl @@ -104,7 +104,7 @@ void main() { if (lightCount == i) break; vec3 lightPos = lightPosition[i].xyz; - bool isDir = zero_float < lightPosition[i].w; + bool isDir = lightPosition[i].w < one_float; float spotCos = lightSpot[i].x; float spotExp = lightSpot[i].y; diff --git a/core/src/processing/opengl/shaders/TexLightVert.glsl b/core/src/processing/opengl/shaders/TexLightVert.glsl index 3bef7bf3b..6ef7d4bb7 100644 --- a/core/src/processing/opengl/shaders/TexLightVert.glsl +++ b/core/src/processing/opengl/shaders/TexLightVert.glsl @@ -101,7 +101,7 @@ void main() { if (lightCount == i) break; vec3 lightPos = lightPosition[i].xyz; - bool isDir = zero_float < lightPosition[i].w; + bool isDir = lightPosition[i].w < one_float; float spotCos = lightSpot[i].x; float spotExp = lightSpot[i].y; diff --git a/java/libraries/io/examples/I2CCompass/I2CCompass.pde b/java/libraries/io/examples/I2CCompass/I2CCompass.pde index c4f9e0cc8..079a7bcc6 100644 --- a/java/libraries/io/examples/I2CCompass/I2CCompass.pde +++ b/java/libraries/io/examples/I2CCompass/I2CCompass.pde @@ -3,6 +3,7 @@ I2C i2c; // HMC6352 is a digital compass module using I2C // datasheet: https://www.sparkfun.com/datasheets/Components/HMC6352.pdf +// see setup.png in the sketch folder for wiring details void setup() { //printArray(I2C.list()); diff --git a/java/libraries/io/examples/Interrupt/Interrupt.pde b/java/libraries/io/examples/Interrupt/Interrupt.pde index b6b6185e3..15bdc4cce 100644 --- a/java/libraries/io/examples/Interrupt/Interrupt.pde +++ b/java/libraries/io/examples/Interrupt/Interrupt.pde @@ -3,6 +3,7 @@ color bgcolor = 0; // GPIO numbers refer to different phyiscal pins on various boards // On the Raspberry Pi GPIO 4 is physical pin 7 on the header +// see setup.png in the sketch folder for wiring details void setup() { GPIO.pinMode(4, GPIO.INPUT); diff --git a/java/libraries/io/examples/SPIAnalogDigital/SPIAnalogDigital.pde b/java/libraries/io/examples/SPIAnalogDigital/SPIAnalogDigital.pde index 4e8ee3b4a..bb1311ada 100644 --- a/java/libraries/io/examples/SPIAnalogDigital/SPIAnalogDigital.pde +++ b/java/libraries/io/examples/SPIAnalogDigital/SPIAnalogDigital.pde @@ -3,6 +3,7 @@ SPI spi; // MCP3001 is a Analog-to-Digital converter using SPI // datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf +// see setup.png in the sketch folder for wiring details void setup() { //printArray(SPI.list()); diff --git a/java/libraries/io/examples/SPIAnalogDigitalOOP/SPIAnalogDigitalOOP.pde b/java/libraries/io/examples/SPIAnalogDigitalOOP/SPIAnalogDigitalOOP.pde index 85be661a6..f45f0fa5c 100644 --- a/java/libraries/io/examples/SPIAnalogDigitalOOP/SPIAnalogDigitalOOP.pde +++ b/java/libraries/io/examples/SPIAnalogDigitalOOP/SPIAnalogDigitalOOP.pde @@ -1,6 +1,8 @@ import processing.io.*; MCP3001 adc; +// see setup.png in the sketch folder for wiring details + void setup() { //printArray(SPI.list()); adc = new MCP3001(SPI.list()[0]); diff --git a/java/libraries/io/examples/SimpleInput/SimpleInput.pde b/java/libraries/io/examples/SimpleInput/SimpleInput.pde index c6870656f..d7a420ce1 100644 --- a/java/libraries/io/examples/SimpleInput/SimpleInput.pde +++ b/java/libraries/io/examples/SimpleInput/SimpleInput.pde @@ -2,6 +2,7 @@ import processing.io.*; // GPIO numbers refer to different phyiscal pins on various boards // On the Raspberry Pi GPIO 4 is physical pin 7 on the header +// see setup.png in the sketch folder for wiring details void setup() { GPIO.pinMode(4, GPIO.INPUT); diff --git a/java/libraries/io/examples/SimpleOutput/SimpleOutput.pde b/java/libraries/io/examples/SimpleOutput/SimpleOutput.pde index 390592f64..af5e05d05 100644 --- a/java/libraries/io/examples/SimpleOutput/SimpleOutput.pde +++ b/java/libraries/io/examples/SimpleOutput/SimpleOutput.pde @@ -3,6 +3,7 @@ boolean ledOn = false; // GPIO numbers refer to different phyiscal pins on various boards // On the Raspberry Pi GPIO 4 is physical pin 7 on the header +// see setup.png in the sketch folder for wiring details void setup() { GPIO.pinMode(4, GPIO.OUTPUT); diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index 178730eb4..32be87410 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -33,6 +33,7 @@ import processing.mode.java.pdex.ErrorCheckerService; import processing.mode.java.pdex.LineMarker; import processing.mode.java.pdex.JavaTextArea; import processing.mode.java.pdex.Problem; +import processing.mode.java.preproc.PdePreprocessor; import processing.mode.java.runner.Runner; import processing.mode.java.tweak.ColorControlBox; import processing.mode.java.tweak.Handle; @@ -136,17 +137,7 @@ public class JavaEditor extends Editor { hasJavaTabs = checkForJavaTabs(); //initializeErrorChecker(); - { // Init error checker - errorCheckerService = new ErrorCheckerService(this); - for (SketchCode code : getSketch().getCode()) { - Document document = code.getDocument(); - if (document != null) { - errorCheckerService.addListener(document); - } - } - errorCheckerService.start(); - errorCheckerService.request(); - } + initErrorChecker(); // hack to add a JPanel to the right-hand side of the text area JPanel textAndError = new JPanel(); @@ -180,7 +171,25 @@ public class JavaEditor extends Editor { }); } - + + public PdePreprocessor createPreprocessor(final String sketchName) { + return new PdePreprocessor(sketchName); + } + + + protected void initErrorChecker() { + errorCheckerService = new ErrorCheckerService(this); + for (SketchCode code : getSketch().getCode()) { + Document document = code.getDocument(); + if (document != null) { + errorCheckerService.addListener(document); + } + } + errorCheckerService.start(); + errorCheckerService.request(); + } + + protected JEditTextArea createTextArea() { return new JavaTextArea(new PdeTextAreaDefaults(mode), this); } diff --git a/java/src/processing/mode/java/pdex/ASTGenerator.java b/java/src/processing/mode/java/pdex/ASTGenerator.java index 469ee571c..8d6fb87b5 100644 --- a/java/src/processing/mode/java/pdex/ASTGenerator.java +++ b/java/src/processing/mode/java/pdex/ASTGenerator.java @@ -1296,8 +1296,16 @@ public class ASTGenerator { for (ImportStatement impS : imports) { String temp = impS.getPackageName(); - if (impS.isStarredImport() && className.indexOf('.') == -1) { - temp = impS.getPackageName() + "." + className; + if (impS.isStarredImport()) { // case of starred import: pkg.foo.* + if (className.indexOf('.') == -1) { + temp = impS.getPackageName() + "." + className; + } else { + continue; + } + } else { // case of class import: pkg.foo.MyClass + if (!impS.getImportedClassName().equals(className)) { + continue; + } } tehClass = loadClass(temp); if (tehClass != null) { @@ -1309,8 +1317,16 @@ public class ASTGenerator { for (ImportStatement impS : errorCheckerService.codeFolderImports) { String temp = impS.getPackageName(); - if (impS.isStarredImport() && className.indexOf('.') == -1) { - temp = impS.getPackageName() + "." + className; + if (impS.isStarredImport()) { // case of starred import: pkg.foo.* + if (className.indexOf('.') == -1) { + temp = impS.getPackageName() + "." + className; + } else { + continue; + } + } else { // case of class import: pkg.foo.MyClass + if (!impS.getImportedClassName().equals(className)) { + continue; + } } tehClass = loadClass(temp); if (tehClass != null) { @@ -1320,7 +1336,8 @@ public class ASTGenerator { //log("Doesn't exist in (code folder) imp package: " + impS.getImportName()); } - PdePreprocessor p = new PdePreprocessor(null); +// PdePreprocessor p = new PdePreprocessor(null); + PdePreprocessor p = editor.createPreprocessor(null); for (String impS : p.getCoreImports()) { tehClass = loadClass(impS.substring(0,impS.length()-1) + className); if (tehClass != null) { diff --git a/java/src/processing/mode/java/pdex/ErrorCheckerService.java b/java/src/processing/mode/java/pdex/ErrorCheckerService.java index bc58d43e8..45e79d7a3 100644 --- a/java/src/processing/mode/java/pdex/ErrorCheckerService.java +++ b/java/src/processing/mode/java/pdex/ErrorCheckerService.java @@ -779,13 +779,13 @@ public class ErrorCheckerService { final String exclude = "exclude"; if (impName.startsWith("processing")) { - if (JavaMode.suggestionsMap.get(include).contains(impName)) { + if (JavaMode.suggestionsMap.containsKey(include) && JavaMode.suggestionsMap.get(include).contains(impName)) { return false; - } else if (JavaMode.suggestionsMap.get(exclude).contains(impName)) { + } else if (JavaMode.suggestionsMap.containsKey(exclude) && JavaMode.suggestionsMap.get(exclude).contains(impName)) { return true; } } else if (impName.startsWith("java")) { - if (JavaMode.suggestionsMap.get(include).contains(impName)) { + if (JavaMode.suggestionsMap.containsKey(include) && JavaMode.suggestionsMap.get(include).contains(impName)) { return false; } } diff --git a/java/src/processing/mode/java/pdex/ImportStatement.java b/java/src/processing/mode/java/pdex/ImportStatement.java index d64b62f8c..6785519b0 100644 --- a/java/src/processing/mode/java/pdex/ImportStatement.java +++ b/java/src/processing/mode/java/pdex/ImportStatement.java @@ -78,9 +78,26 @@ public class ImportStatement { } public boolean isStarredImport() { - String ret = new String(importName.trim()); - if(ret.endsWith(";")) + String ret = importName.trim(); + if(ret.endsWith(";")) { ret = ret.substring(0, ret.length() - 1).trim(); + } return ret.endsWith(".*"); } + + public String getImportedClassName() { + if (isStarredImport()) { + return null; + } else { + String ret = importName.trim(); + if(ret.endsWith(";")) { + ret = ret.substring(0, ret.length() - 1).trim(); + } + if (ret.lastIndexOf('.') != -1) { + return ret.substring(ret.lastIndexOf('.') + 1); + } else { + return null; + } + } + } } \ No newline at end of file diff --git a/java/src/processing/mode/java/pdex/XQPreprocessor.java b/java/src/processing/mode/java/pdex/XQPreprocessor.java index bb8a83d13..582c1d50c 100644 --- a/java/src/processing/mode/java/pdex/XQPreprocessor.java +++ b/java/src/processing/mode/java/pdex/XQPreprocessor.java @@ -54,9 +54,10 @@ public class XQPreprocessor { public XQPreprocessor(ErrorCheckerService ecs) { this.ecs = ecs; - + // get parameters from the main preproc - PdePreprocessor p = new PdePreprocessor(null); +// PdePreprocessor p = new PdePreprocessor(null); + PdePreprocessor p = ecs.editor.createPreprocessor(null); defaultImports = p.getDefaultImports(); coreImports = p.getCoreImports(); }