picrate 1.2.3-java → 2.1.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile +3 -1
- data/README.md +8 -9
- data/Rakefile +10 -9
- data/bin/picrate +3 -1
- data/docs/_config.yml +1 -1
- data/docs/_editors/geany.md +1 -0
- data/docs/_gems/gems/gems.md +1 -1
- data/docs/_posts/2018-05-06-getting_started.md +4 -4
- data/docs/_posts/2018-05-06-install_jruby.md +5 -11
- data/docs/_posts/2018-05-11-arch-linux-arm.md +1 -11
- data/docs/_posts/2018-11-18-building-gem.md +2 -2
- data/docs/_posts/2018-11-27-getting_started_geany.md +4 -4
- data/docs/_posts/2019-11-11-getting_started_buster.md +4 -7
- data/docs/_posts/2020-03-09-auto_install_picrate.md +34 -0
- data/docs/_posts/2020-05-11-getting_started_manjaro.md +94 -0
- data/docs/about.md +1 -1
- data/lib/picrate.rb +1 -1
- data/lib/picrate/app.rb +11 -3
- data/lib/picrate/creators/parameters.rb +8 -8
- data/lib/picrate/creators/sketch_factory.rb +5 -3
- data/lib/picrate/helper_methods.rb +21 -21
- data/lib/picrate/helpers/numeric.rb +2 -0
- data/lib/picrate/library.rb +5 -1
- data/lib/picrate/library_loader.rb +2 -0
- data/lib/picrate/native_folder.rb +2 -1
- data/lib/picrate/native_loader.rb +3 -0
- data/lib/picrate/runner.rb +5 -2
- data/lib/picrate/version.rb +1 -1
- data/library/boids/boids.rb +17 -8
- data/library/chooser/chooser.rb +10 -9
- data/library/color_group/color_group.rb +2 -0
- data/library/control_panel/control_panel.rb +7 -4
- data/library/dxf/dxf.rb +2 -0
- data/library/library_proxy/library_proxy.rb +2 -0
- data/library/net/net.rb +2 -0
- data/library/slider/slider.rb +24 -23
- data/library/vector_utils/vector_utils.rb +4 -0
- data/library/video_event/video_event.rb +2 -0
- data/picrate.gemspec +13 -14
- data/pom.rb +28 -26
- data/pom.xml +18 -6
- data/src/main/java/monkstone/ColorUtil.java +1 -1
- data/src/main/java/monkstone/MathToolModule.java +1 -1
- data/src/main/java/monkstone/PicrateLibrary.java +8 -8
- data/src/main/java/monkstone/fastmath/Deglut.java +16 -16
- data/src/main/java/monkstone/filechooser/Chooser.java +1 -1
- data/src/main/java/monkstone/noise/SimplexNoise.java +3 -3
- data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
- data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +12 -12
- data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
- data/src/main/java/monkstone/slider/SliderBar.java +1 -1
- data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
- data/src/main/java/monkstone/slider/WheelHandler.java +1 -1
- data/src/main/java/monkstone/vecmath/package-info.java +1 -1
- data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
- data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -1
- data/src/main/java/monkstone/videoevent/CaptureEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/MovieEvent.java +1 -1
- data/src/main/java/monkstone/videoevent/package-info.java +1 -1
- data/src/main/java/processing/awt/PGraphicsJava2D.java +33 -36
- data/src/main/java/processing/awt/PImageAWT.java +377 -0
- data/src/main/java/processing/awt/PSurfaceAWT.java +0 -20
- data/src/main/java/processing/awt/ShimAWT.java +545 -0
- data/src/main/java/processing/core/PApplet.java +699 -1523
- data/src/main/java/processing/core/PConstants.java +180 -180
- data/src/main/java/processing/core/PFont.java +2 -2
- data/src/main/java/processing/core/PGraphics.java +190 -176
- data/src/main/java/processing/core/PImage.java +1536 -1721
- data/src/main/java/processing/core/PMatrix.java +39 -39
- data/src/main/java/processing/core/PSurface.java +69 -103
- data/src/main/java/processing/core/PSurfaceNone.java +29 -0
- data/src/main/java/processing/core/PVector.java +2 -2
- data/src/main/java/processing/data/FloatDict.java +251 -284
- data/src/main/java/processing/data/TableRow.java +32 -32
- data/src/main/java/processing/dxf/RawDXF.java +3 -3
- data/src/main/java/processing/net/Client.java +1 -1
- data/src/main/java/processing/opengl/PGL.java +1016 -4132
- data/src/main/java/processing/opengl/PGraphicsOpenGL.java +223 -184
- data/src/main/java/processing/opengl/PJOGL.java +374 -1526
- data/src/main/java/processing/opengl/PShapeOpenGL.java +5 -6
- data/src/main/java/processing/opengl/PSurfaceJOGL.java +262 -147
- data/test/color_group_test.rb +4 -4
- data/test/deglut_spec_test.rb +2 -0
- data/test/helper_methods_test.rb +41 -13
- data/test/math_tool_test.rb +46 -37
- data/test/respond_to_test.rb +5 -3
- data/test/sketches/key_event.rb +2 -2
- data/test/sketches/library/my_library/my_library.rb +3 -0
- data/test/test_helper.rb +2 -0
- data/test/vecmath_spec_test.rb +30 -19
- data/vendors/Rakefile +13 -7
- data/vendors/{picrate_sketches.geany → geany.rb} +32 -7
- metadata +26 -47
- data/docs/_posts/2018-06-26-auto_install_picrate.md +0 -30
- data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
- data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
- data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -3,7 +3,7 @@
|
|
3
3
|
/*
|
4
4
|
Part of the Processing project - http://processing.org
|
5
5
|
|
6
|
-
Copyright (c) 2012-
|
6
|
+
Copyright (c) 2012-20 The Processing Foundation
|
7
7
|
Copyright (c) 2004-12 Ben Fry and Casey Reas
|
8
8
|
Copyright (c) 2001-04 Massachusetts Institute of Technology
|
9
9
|
|
@@ -24,48 +24,6 @@
|
|
24
24
|
|
25
25
|
package processing.core;
|
26
26
|
|
27
|
-
// dummy object for backwards compatibility, plus the select methods
|
28
|
-
import java.awt.Frame;
|
29
|
-
|
30
|
-
// before calling settings() to get displayWidth/Height
|
31
|
-
import java.awt.DisplayMode;
|
32
|
-
// handleSettings() and displayDensity()
|
33
|
-
import java.awt.GraphicsDevice;
|
34
|
-
import java.awt.GraphicsEnvironment;
|
35
|
-
// used to present the fullScreen() warning about Spaces on OS X
|
36
|
-
import javax.swing.JOptionPane;
|
37
|
-
|
38
|
-
// inside runSketch() to warn users about headless
|
39
|
-
import java.awt.HeadlessException;
|
40
|
-
import java.awt.Toolkit;
|
41
|
-
|
42
|
-
// used by loadImage()
|
43
|
-
import java.awt.Image;
|
44
|
-
import java.awt.color.ColorSpace;
|
45
|
-
import java.awt.image.BufferedImage;
|
46
|
-
import javax.imageio.ImageIO;
|
47
|
-
// allows us to remove our own MediaTracker code
|
48
|
-
import javax.swing.ImageIcon;
|
49
|
-
|
50
|
-
// used by selectInput(), selectOutput(), selectFolder()
|
51
|
-
import java.awt.EventQueue;
|
52
|
-
import java.awt.FileDialog;
|
53
|
-
import javax.swing.JFileChooser;
|
54
|
-
|
55
|
-
// set the look and feel, if specified
|
56
|
-
import javax.swing.UIManager;
|
57
|
-
|
58
|
-
// used by link()
|
59
|
-
import java.awt.Desktop;
|
60
|
-
|
61
|
-
// used by desktopFile() method
|
62
|
-
import javax.swing.filechooser.FileSystemView;
|
63
|
-
|
64
|
-
// loadXML() error handling
|
65
|
-
import javax.xml.parsers.ParserConfigurationException;
|
66
|
-
|
67
|
-
import org.xml.sax.SAXException;
|
68
|
-
|
69
27
|
import java.io.*;
|
70
28
|
import java.lang.reflect.*;
|
71
29
|
import java.net.*;
|
@@ -80,6 +38,13 @@ import java.util.concurrent.ThreadFactory;
|
|
80
38
|
import java.util.regex.*;
|
81
39
|
import java.util.zip.*;
|
82
40
|
|
41
|
+
// loadXML() error handling
|
42
|
+
import javax.xml.parsers.ParserConfigurationException;
|
43
|
+
import org.xml.sax.SAXException;
|
44
|
+
|
45
|
+
// TODO have this removed by 4.0 final
|
46
|
+
import processing.awt.ShimAWT;
|
47
|
+
|
83
48
|
import processing.data.*;
|
84
49
|
import processing.event.*;
|
85
50
|
import processing.opengl.*;
|
@@ -87,34 +52,34 @@ import processing.opengl.*;
|
|
87
52
|
|
88
53
|
/**
|
89
54
|
* Base class for all sketches that use processing.core.
|
90
|
-
*
|
55
|
+
*
|
91
56
|
* The <A HREF="https://github.com/processing/processing/wiki/Window-Size-and-Full-Screen">
|
92
57
|
* Window Size and Full Screen</A> page on the Wiki has useful information
|
93
58
|
* about sizing, multiple displays, full screen, etc.
|
94
|
-
*
|
59
|
+
*
|
95
60
|
* Processing uses active mode rendering. All animation tasks happen on the
|
96
61
|
* "Processing Animation Thread". The setup() and draw() methods are handled
|
97
62
|
* by that thread, and events (like mouse movement and key presses, which are
|
98
63
|
* fired by the event dispatch thread or EDT) are queued to be safely handled
|
99
64
|
* at the end of draw().
|
100
|
-
*
|
65
|
+
*
|
101
66
|
* Starting with 3.0a6, blit operations are on the EDT, so as not to cause
|
102
67
|
* GUI problems with Swing and AWT. In the case of the default renderer, the
|
103
68
|
* sketch renders to an offscreen image, then the EDT is asked to bring that
|
104
69
|
* image to the screen.
|
105
|
-
*
|
70
|
+
*
|
106
71
|
* For code that needs to run on the EDT, use EventQueue.invokeLater(). When
|
107
72
|
* doing so, be careful to synchronize between that code and the Processing
|
108
73
|
* animation thread. That is, you can't call Processing methods from the EDT
|
109
74
|
* or at any random time from another thread. Use of a callback function or
|
110
75
|
* the registerXxx() methods in PApplet can help ensure that your code doesn't
|
111
76
|
* do something naughty.
|
112
|
-
*
|
77
|
+
*
|
113
78
|
* As of Processing 3.0, we have removed Applet as the base class for PApplet.
|
114
79
|
* This means that we can remove lots of legacy code, however one downside is
|
115
80
|
* that it's no longer possible (without extra code) to embed a PApplet into
|
116
81
|
* another Java application.
|
117
|
-
*
|
82
|
+
*
|
118
83
|
* As of Processing 3.0, we have discontinued support for versions of Java
|
119
84
|
* prior to 1.8. We don't have enough people to support it, and for a
|
120
85
|
* project of our (tiny) size, we should be focusing on the future, rather
|
@@ -122,45 +87,38 @@ import processing.opengl.*;
|
|
122
87
|
*/
|
123
88
|
public class PApplet implements PConstants {
|
124
89
|
/** Full name of the Java version (i.e. 1.5.0_11). */
|
125
|
-
static public final String
|
90
|
+
static public final String JAVA_VERSION_NAME =
|
126
91
|
System.getProperty("java.version");
|
127
92
|
|
128
|
-
static public final int
|
93
|
+
static public final int JAVA_PLATFORM;
|
129
94
|
static {
|
130
|
-
String version =
|
131
|
-
if (
|
95
|
+
String version = JAVA_VERSION_NAME;
|
96
|
+
if (JAVA_VERSION_NAME.startsWith("1.")) {
|
132
97
|
version = version.substring(2);
|
133
|
-
|
98
|
+
JAVA_PLATFORM = parseInt(version.substring(0, version.indexOf('.')));
|
134
99
|
} else {
|
135
100
|
// Remove -xxx and .yyy from java.version (@see JEP-223)
|
136
|
-
|
101
|
+
JAVA_PLATFORM = parseInt(version.replaceAll("-.*","").replaceAll("\\..*",""));
|
137
102
|
}
|
138
103
|
}
|
139
104
|
|
140
105
|
/**
|
141
|
-
* Do not use;
|
142
|
-
* For instance,
|
143
|
-
* comparison, i.e. "if (
|
106
|
+
* Do not use; JAVA_PLATFORM or JAVA_VERSION_NAME are better options.
|
107
|
+
* For instance, JAVA_PLATFORM is useful when you need a number for
|
108
|
+
* comparison, i.e. "if (JAVA_PLATFORM >= 9)".
|
144
109
|
*/
|
145
110
|
@Deprecated
|
146
|
-
public static final float
|
111
|
+
public static final float JAVA_VERSION = 1 + JAVA_PLATFORM / 10f;
|
147
112
|
|
148
113
|
/**
|
149
|
-
* Current platform in use, one of the
|
150
|
-
* PConstants WINDOWS, MACOSX, MACOS9, LINUX or OTHER.
|
114
|
+
* Current platform in use, one of the PConstants WINDOWS, MACOS, LINUX or OTHER.
|
151
115
|
*/
|
152
116
|
static public int platform;
|
153
117
|
|
154
118
|
static {
|
155
|
-
String
|
156
|
-
|
157
|
-
if (osname.indexOf("Mac") != -1) {
|
158
|
-
platform = MACOSX;
|
119
|
+
final String name = System.getProperty("os.name");
|
159
120
|
|
160
|
-
|
161
|
-
platform = WINDOWS;
|
162
|
-
|
163
|
-
} else if (osname.equals("Linux")) { // true for the ibm vm
|
121
|
+
if (name.equals("Linux")) { // true for the ibm vm
|
164
122
|
platform = LINUX;
|
165
123
|
|
166
124
|
} else {
|
@@ -185,7 +143,7 @@ public class PApplet implements PConstants {
|
|
185
143
|
* example, if the current screen resolution is 1024x768,
|
186
144
|
* <b>displayWidth</b> is 1024 and <b>displayHeight</b> is 768. These
|
187
145
|
* dimensions are useful when exporting full-screen applications.
|
188
|
-
*
|
146
|
+
*
|
189
147
|
* To ensure that the sketch takes over the entire screen, use "Present"
|
190
148
|
* instead of "Run". Otherwise the window will still have a frame border
|
191
149
|
* around it and not be placed in the upper corner of the screen. On Mac OS
|
@@ -202,7 +160,7 @@ public class PApplet implements PConstants {
|
|
202
160
|
* example, if the current screen resolution is 1024x768,
|
203
161
|
* <b>displayWidth</b> is 1024 and <b>displayHeight</b> is 768. These
|
204
162
|
* dimensions are useful when exporting full-screen applications.
|
205
|
-
*
|
163
|
+
*
|
206
164
|
* To ensure that the sketch takes over the entire screen, use "Present"
|
207
165
|
* instead of "Run". Otherwise the window will still have a frame border
|
208
166
|
* around it and not be placed in the upper corner of the screen. On Mac OS
|
@@ -237,24 +195,6 @@ public class PApplet implements PConstants {
|
|
237
195
|
static public final int DEFAULT_WIDTH = 100;
|
238
196
|
static public final int DEFAULT_HEIGHT = 100;
|
239
197
|
|
240
|
-
// /**
|
241
|
-
// * Exception thrown when size() is called the first time.
|
242
|
-
// * <p>
|
243
|
-
// * This is used internally so that setup() is forced to run twice
|
244
|
-
// * when the renderer is changed. This is the only way for us to handle
|
245
|
-
// * invoking the new renderer while also in the midst of rendering.
|
246
|
-
// */
|
247
|
-
// static public class RendererChangeException extends RuntimeException { }
|
248
|
-
|
249
|
-
/**
|
250
|
-
* true if no size() command has been executed. This is used to wait until
|
251
|
-
* a size has been set before placing in the window and showing it.
|
252
|
-
*/
|
253
|
-
// public boolean defaultSize;
|
254
|
-
|
255
|
-
// /** Storage for the current renderer size to avoid re-allocation. */
|
256
|
-
// Dimension currentSize = new Dimension();
|
257
|
-
|
258
198
|
/**
|
259
199
|
* ( begin auto-generated from pixels.xml )
|
260
200
|
*
|
@@ -265,8 +205,8 @@ public class PApplet implements PConstants {
|
|
265
205
|
* values. The <b>index</b> value defines the position of a value within
|
266
206
|
* the array. For example, the statement <b>color b = pixels[230]</b> will
|
267
207
|
* set the variable <b>b</b> to be equal to the value at that location in
|
268
|
-
* the array
|
269
|
-
*
|
208
|
+
* the array.
|
209
|
+
*
|
270
210
|
* Before accessing this array, the data must loaded with the
|
271
211
|
* <b>loadPixels()</b> function. After the array data has been modified,
|
272
212
|
* the <b>updatePixels()</b> function must be run to update the changes.
|
@@ -281,6 +221,9 @@ public class PApplet implements PConstants {
|
|
281
221
|
* @see PApplet#get(int, int, int, int)
|
282
222
|
* @see PApplet#set(int, int, int)
|
283
223
|
* @see PImage
|
224
|
+
* @see PApplet#pixelDensity(int)
|
225
|
+
* @see PApplet#pixelWidth
|
226
|
+
* @see PApplet#pixelHeight
|
284
227
|
*/
|
285
228
|
public int[] pixels;
|
286
229
|
|
@@ -420,8 +363,8 @@ public class PApplet implements PConstants {
|
|
420
363
|
* ( begin auto-generated from pmouseX.xml )
|
421
364
|
*
|
422
365
|
* The system variable <b>pmouseX</b> always contains the horizontal
|
423
|
-
* position of the mouse in the frame previous to the current frame
|
424
|
-
*
|
366
|
+
* position of the mouse in the frame previous to the current frame.
|
367
|
+
*
|
425
368
|
* You may find that <b>pmouseX</b> and <b>pmouseY</b> have different
|
426
369
|
* values inside <b>draw()</b> and inside events like <b>mousePressed()</b>
|
427
370
|
* and <b>mouseMoved()</b>. This is because they're used for different
|
@@ -578,7 +521,7 @@ public class PApplet implements PConstants {
|
|
578
521
|
*
|
579
522
|
* The system variable <b>key</b> always contains the value of the most
|
580
523
|
* recent key on the keyboard that was used (either pressed or released).
|
581
|
-
*
|
524
|
+
*
|
582
525
|
* For non-ASCII keys, use the <b>keyCode</b> variable. The keys included
|
583
526
|
* in the ASCII specification (BACKSPACE, TAB, ENTER, RETURN, ESC, and
|
584
527
|
* DELETE) do not require checking to see if they key is coded, and you
|
@@ -613,7 +556,7 @@ public class PApplet implements PConstants {
|
|
613
556
|
* for these keys, it's first necessary to check and see if the key is
|
614
557
|
* coded. This is done with the conditional "if (key == CODED)" as shown in
|
615
558
|
* the example.
|
616
|
-
*
|
559
|
+
*
|
617
560
|
* The keys included in the ASCII specification (BACKSPACE, TAB, ENTER,
|
618
561
|
* RETURN, ESC, and DELETE) do not require checking to see if they key is
|
619
562
|
* coded, and you should simply use the <b>key</b> variable instead of
|
@@ -621,7 +564,7 @@ public class PApplet implements PConstants {
|
|
621
564
|
* ENTER key is commonly used on PCs and Unix and the RETURN key is used
|
622
565
|
* instead on Macintosh. Check for both ENTER and RETURN to make sure your
|
623
566
|
* program will work for all platforms.
|
624
|
-
*
|
567
|
+
*
|
625
568
|
* For users familiar with Java, the values for UP and DOWN are simply
|
626
569
|
* shorter versions of Java's KeyEvent.VK_UP and KeyEvent.VK_DOWN. Other
|
627
570
|
* keyCode values can be found in the Java <a
|
@@ -751,6 +694,9 @@ public class PApplet implements PConstants {
|
|
751
694
|
*/
|
752
695
|
protected boolean exitCalled;
|
753
696
|
|
697
|
+
// ok to be static because it's not possible to mix enabled/disabled
|
698
|
+
static protected boolean disableAWT;
|
699
|
+
|
754
700
|
// messages to send if attached as an external vm
|
755
701
|
|
756
702
|
/**
|
@@ -773,6 +719,9 @@ public class PApplet implements PConstants {
|
|
773
719
|
/** Used by the PDE to suggest a display (set in prefs, passed on Run) */
|
774
720
|
static public final String ARGS_DISPLAY = "--display";
|
775
721
|
|
722
|
+
/** Disable AWT so that LWJGL and others can run */
|
723
|
+
static public final String ARGS_DISABLE_AWT = "--disable-awt";
|
724
|
+
|
776
725
|
// static public final String ARGS_SPAN_DISPLAYS = "--span";
|
777
726
|
|
778
727
|
static public final String ARGS_BGCOLOR = "--bgcolor";
|
@@ -830,75 +779,11 @@ public class PApplet implements PConstants {
|
|
830
779
|
}
|
831
780
|
|
832
781
|
|
833
|
-
/**
|
834
|
-
* A dummy frame to keep compatibility with 2.x code
|
835
|
-
* and encourage users to update.
|
836
|
-
*/
|
837
|
-
public Frame frame;
|
838
|
-
|
839
|
-
|
840
|
-
// public Frame getFrame() {
|
841
|
-
// return frame;
|
842
|
-
// }
|
843
|
-
//
|
844
|
-
//
|
845
|
-
// public void setFrame(Frame frame) {
|
846
|
-
// this.frame = frame;
|
847
|
-
// }
|
848
|
-
|
849
|
-
|
850
|
-
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
851
|
-
|
852
|
-
|
853
782
|
// /**
|
854
|
-
// *
|
855
|
-
// *
|
783
|
+
// * A dummy frame to keep compatibility with 2.x code
|
784
|
+
// * and encourage users to update.
|
856
785
|
// */
|
857
|
-
// public
|
858
|
-
//// println("init() called " + Integer.toHexString(hashCode()));
|
859
|
-
// // using a local version here since the class variable is deprecated
|
860
|
-
//// Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
|
861
|
-
//// screenWidth = screen.width;
|
862
|
-
//// screenHeight = screen.height;
|
863
|
-
//
|
864
|
-
// defaultSize = true;
|
865
|
-
// finished = false; // just for clarity
|
866
|
-
//
|
867
|
-
// // this will be cleared by draw() if it is not overridden
|
868
|
-
// looping = true;
|
869
|
-
// redraw = true; // draw this guy at least once
|
870
|
-
// firstMouse = true;
|
871
|
-
//
|
872
|
-
// // calculated dynamically on first call
|
873
|
-
//// // Removed in 2.1.2, brought back for 2.1.3. Usually sketchPath is set
|
874
|
-
//// // inside runSketch(), but if this sketch takes care of calls to init()
|
875
|
-
//// // when PApplet.main() is not used (i.e. it's in a Java application).
|
876
|
-
//// // THe path needs to be set here so that loadXxxx() functions work.
|
877
|
-
//// if (sketchPath == null) {
|
878
|
-
//// sketchPath = calcSketchPath();
|
879
|
-
//// }
|
880
|
-
//
|
881
|
-
// // set during Surface.initFrame()
|
882
|
-
//// // Figure out the available display width and height.
|
883
|
-
//// // No major problem if this fails, we have to try again anyway in
|
884
|
-
//// // handleDraw() on the first (== 0) frame.
|
885
|
-
//// checkDisplaySize();
|
886
|
-
//
|
887
|
-
//// // Set the default size, until the user specifies otherwise
|
888
|
-
//// int w = sketchWidth();
|
889
|
-
//// int h = sketchHeight();
|
890
|
-
//// defaultSize = (w == DEFAULT_WIDTH) && (h == DEFAULT_HEIGHT);
|
891
|
-
////
|
892
|
-
//// g = makeGraphics(w, h, sketchRenderer(), null, true);
|
893
|
-
//// // Fire component resize event
|
894
|
-
//// setSize(w, h);
|
895
|
-
//// setPreferredSize(new Dimension(w, h));
|
896
|
-
////
|
897
|
-
//// width = g.width;
|
898
|
-
//// height = g.height;
|
899
|
-
//
|
900
|
-
// surface.startThread();
|
901
|
-
// }
|
786
|
+
// public Frame frame;
|
902
787
|
|
903
788
|
|
904
789
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
@@ -907,12 +792,11 @@ public class PApplet implements PConstants {
|
|
907
792
|
boolean insideSettings;
|
908
793
|
|
909
794
|
String renderer = JAVA2D;
|
910
|
-
// int quality = 2;
|
911
795
|
int smooth = 1; // default smoothing (whatever that means for the renderer)
|
912
796
|
|
913
797
|
boolean fullScreen;
|
914
798
|
int display = -1; // use default
|
915
|
-
GraphicsDevice[] displayDevices;
|
799
|
+
// GraphicsDevice[] displayDevices;
|
916
800
|
// Unlike the others above, needs to be public to support
|
917
801
|
// the pixelWidth and pixelHeight fields.
|
918
802
|
public int pixelDensity = 1;
|
@@ -954,73 +838,17 @@ public class PApplet implements PConstants {
|
|
954
838
|
void handleSettings() {
|
955
839
|
insideSettings = true;
|
956
840
|
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
964
|
-
GraphicsDevice device = ge.getDefaultScreenDevice();
|
965
|
-
displayDevices = ge.getScreenDevices();
|
966
|
-
|
967
|
-
// Default or unparsed will be -1, spanning will be 0, actual displays will
|
968
|
-
// be numbered from 1 because it's too weird to say "display 0" in prefs.
|
969
|
-
if (display > 0 && display <= displayDevices.length) {
|
970
|
-
device = displayDevices[display-1];
|
841
|
+
if (!disableAWT) {
|
842
|
+
displayWidth = ShimAWT.getDisplayWidth();
|
843
|
+
displayHeight = ShimAWT.getDisplayHeight();
|
844
|
+
} else {
|
845
|
+
// https://github.com/processing/processing4/issues/57
|
846
|
+
System.err.println("AWT disabled, displayWidth/displayHeight will be 0");
|
971
847
|
}
|
972
|
-
// Set displayWidth and displayHeight for people still using those.
|
973
|
-
DisplayMode displayMode = device.getDisplayMode();
|
974
|
-
displayWidth = displayMode.getWidth();
|
975
|
-
displayHeight = displayMode.getHeight();
|
976
848
|
|
977
849
|
// Here's where size(), fullScreen(), smooth(N) and noSmooth() might
|
978
850
|
// be called, conjuring up the demons of various rendering configurations.
|
979
851
|
settings();
|
980
|
-
|
981
|
-
if (display == SPAN && platform == MACOSX) {
|
982
|
-
// Make sure "Displays have separate Spaces" is unchecked
|
983
|
-
// in System Preferences > Mission Control
|
984
|
-
Process p = exec("defaults", "read", "com.apple.spaces", "spans-displays");
|
985
|
-
BufferedReader outReader = createReader(p.getInputStream());
|
986
|
-
BufferedReader errReader = createReader(p.getErrorStream());
|
987
|
-
StringBuilder stdout = new StringBuilder();
|
988
|
-
StringBuilder stderr = new StringBuilder();
|
989
|
-
String line = null;
|
990
|
-
try {
|
991
|
-
while ((line = outReader.readLine()) != null) {
|
992
|
-
stdout.append(line);
|
993
|
-
}
|
994
|
-
while ((line = errReader.readLine()) != null) {
|
995
|
-
stderr.append(line);
|
996
|
-
}
|
997
|
-
} catch (IOException e) {
|
998
|
-
printStackTrace(e);
|
999
|
-
}
|
1000
|
-
|
1001
|
-
int resultCode = -1;
|
1002
|
-
try {
|
1003
|
-
resultCode = p.waitFor();
|
1004
|
-
} catch (InterruptedException e) { }
|
1005
|
-
|
1006
|
-
String result = trim(stdout.toString());
|
1007
|
-
if ("0".equals(result)) {
|
1008
|
-
EventQueue.invokeLater(new Runnable() {
|
1009
|
-
public void run() {
|
1010
|
-
checkLookAndFeel();
|
1011
|
-
final String msg =
|
1012
|
-
"To use fullScreen(SPAN), first turn off “Displays have separate spaces”\n" +
|
1013
|
-
"in System Preferences \u2192 Mission Control. Then log out and log back in.";
|
1014
|
-
JOptionPane.showMessageDialog(null, msg, "Apple's Defaults Stink",
|
1015
|
-
JOptionPane.WARNING_MESSAGE);
|
1016
|
-
}
|
1017
|
-
});
|
1018
|
-
} else if (!"1".equals(result)) {
|
1019
|
-
System.err.println("Could not check the status of “Displays have separate spaces.”");
|
1020
|
-
System.err.format("Received message '%s' and result code %d.%n", trim(stderr.toString()), resultCode);
|
1021
|
-
}
|
1022
|
-
}
|
1023
|
-
|
1024
852
|
insideSettings = false;
|
1025
853
|
}
|
1026
854
|
|
@@ -1061,17 +889,6 @@ public class PApplet implements PConstants {
|
|
1061
889
|
}
|
1062
890
|
|
1063
891
|
|
1064
|
-
// Named quality instead of smooth to avoid people trying to set (or get)
|
1065
|
-
// the current smooth level this way. Also that smooth(number) isn't really
|
1066
|
-
// public or well-known API. It's specific to the capabilities of the
|
1067
|
-
// rendering surface, and somewhat independent of whether the sketch is
|
1068
|
-
// smoothing at any given time. It's also a bit like getFill() would return
|
1069
|
-
// true/false for whether fill was enabled, getFillColor() would return the
|
1070
|
-
// color itself. Or at least that's what I can recall at the moment. [fry]
|
1071
|
-
// public int sketchQuality() {
|
1072
|
-
// //return 2;
|
1073
|
-
// return quality;
|
1074
|
-
// }
|
1075
892
|
// smoothing 1 is default.. 0 is none.. 2,4,8 depend on renderer
|
1076
893
|
final public int sketchSmooth() {
|
1077
894
|
return smooth;
|
@@ -1079,20 +896,10 @@ public class PApplet implements PConstants {
|
|
1079
896
|
|
1080
897
|
|
1081
898
|
final public boolean sketchFullScreen() {
|
1082
|
-
//return false;
|
1083
899
|
return fullScreen;
|
1084
900
|
}
|
1085
901
|
|
1086
902
|
|
1087
|
-
// // Could be named 'screen' instead of display since it's the people using
|
1088
|
-
// // full screen who will be looking for it. On the other hand, screenX/Y/Z
|
1089
|
-
// // makes things confusing, and if 'displayIndex' exists...
|
1090
|
-
// public boolean sketchSpanDisplays() {
|
1091
|
-
// //return false;
|
1092
|
-
// return spanDisplays;
|
1093
|
-
// }
|
1094
|
-
|
1095
|
-
|
1096
903
|
// Numbered from 1, SPAN (0) means all displays, -1 means the default display
|
1097
904
|
final public int sketchDisplay() {
|
1098
905
|
return display;
|
@@ -1100,13 +907,11 @@ public class PApplet implements PConstants {
|
|
1100
907
|
|
1101
908
|
|
1102
909
|
final public String sketchOutputPath() {
|
1103
|
-
//return null;
|
1104
910
|
return outputPath;
|
1105
911
|
}
|
1106
912
|
|
1107
913
|
|
1108
914
|
final public OutputStream sketchOutputStream() {
|
1109
|
-
//return null;
|
1110
915
|
return outputStream;
|
1111
916
|
}
|
1112
917
|
|
@@ -1141,8 +946,16 @@ public class PApplet implements PConstants {
|
|
1141
946
|
if (display != SPAN && (fullScreen || present)) {
|
1142
947
|
return displayDensity(display);
|
1143
948
|
}
|
949
|
+
|
950
|
+
int displayCount = 0;
|
951
|
+
if (!disableAWT) {
|
952
|
+
displayCount = ShimAWT.getDisplayCount();
|
953
|
+
} else {
|
954
|
+
// https://github.com/processing/processing4/issues/57
|
955
|
+
System.err.println("display count needs to be implemented for non-AWT");
|
956
|
+
}
|
1144
957
|
// walk through all displays, use 2 if any display is 2
|
1145
|
-
for (int i = 0; i <
|
958
|
+
for (int i = 0; i < displayCount; i++) {
|
1146
959
|
if (displayDensity(i+1) == 2) {
|
1147
960
|
return 2;
|
1148
961
|
}
|
@@ -1151,70 +964,37 @@ public class PApplet implements PConstants {
|
|
1151
964
|
return 1;
|
1152
965
|
}
|
1153
966
|
|
967
|
+
|
1154
968
|
/**
|
1155
969
|
* @param display the display number to check
|
970
|
+
* (1-indexed to match the Preferences dialog box)
|
1156
971
|
*/
|
1157
972
|
public int displayDensity(int display) {
|
1158
|
-
if (
|
1159
|
-
|
1160
|
-
// A 5-minute search didn't turn up any such event in the Java 7 API.
|
1161
|
-
// Also, should we use the Toolkit associated with the editor window?
|
1162
|
-
final String javaVendor = System.getProperty("java.vendor");
|
1163
|
-
if (javaVendor.contains("Oracle")) {
|
1164
|
-
GraphicsDevice device;
|
1165
|
-
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
1166
|
-
|
1167
|
-
if (display == -1) {
|
1168
|
-
device = env.getDefaultScreenDevice();
|
1169
|
-
|
1170
|
-
} else if (display == SPAN) {
|
1171
|
-
throw new RuntimeException("displayDensity() only works with specific display numbers");
|
1172
|
-
|
1173
|
-
} else {
|
1174
|
-
GraphicsDevice[] devices = env.getScreenDevices();
|
1175
|
-
if (display > 0 && display <= devices.length) {
|
1176
|
-
device = devices[display - 1];
|
1177
|
-
} else {
|
1178
|
-
if (devices.length == 1) {
|
1179
|
-
System.err.println("Only one display is currently known, use displayDensity(1).");
|
1180
|
-
} else {
|
1181
|
-
System.err.format("Your displays are numbered %d through %d, " +
|
1182
|
-
"pass one of those numbers to displayDensity()%n", 1, devices.length);
|
1183
|
-
}
|
1184
|
-
throw new RuntimeException("Display " + display + " does not exist.");
|
1185
|
-
}
|
1186
|
-
}
|
1187
|
-
|
1188
|
-
try {
|
1189
|
-
Field field = device.getClass().getDeclaredField("scale");
|
1190
|
-
if (field != null) {
|
1191
|
-
field.setAccessible(true);
|
1192
|
-
Object scale = field.get(device);
|
1193
|
-
|
1194
|
-
if (scale instanceof Integer && ((Integer)scale).intValue() == 2) {
|
1195
|
-
return 2;
|
1196
|
-
}
|
1197
|
-
}
|
1198
|
-
} catch (Exception ignore) { }
|
1199
|
-
}
|
1200
|
-
} else if (PApplet.platform == PConstants.WINDOWS ||
|
1201
|
-
PApplet.platform == PConstants.LINUX) {
|
1202
|
-
if (suggestedDensity == -1) {
|
1203
|
-
// TODO: detect and return DPI scaling using JNA; Windows has
|
1204
|
-
// a system-wide value, not sure how it works on Linux
|
1205
|
-
return 1;
|
1206
|
-
} else if (suggestedDensity == 1 || suggestedDensity == 2) {
|
1207
|
-
return suggestedDensity;
|
1208
|
-
}
|
973
|
+
if (!disableAWT) {
|
974
|
+
return ShimAWT.getDisplayDensity(display);
|
1209
975
|
}
|
1210
|
-
|
976
|
+
/*
|
977
|
+
if (display > 0 && display <= displayDevices.length) {
|
978
|
+
GraphicsConfiguration graphicsConfig =
|
979
|
+
displayDevices[display - 1].getDefaultConfiguration();
|
980
|
+
AffineTransform tx = graphicsConfig.getDefaultTransform();
|
981
|
+
return (int) Math.round(tx.getScaleX());
|
982
|
+
}
|
983
|
+
|
984
|
+
System.err.println("Display " + display + " does not exist, " +
|
985
|
+
"returning 1 for displayDensity(" + display + ")");
|
986
|
+
*/
|
987
|
+
// https://github.com/processing/processing4/issues/57
|
988
|
+
System.err.println("displayDensity() unavailable because AWT is disabled");
|
989
|
+
return 1; // not the end of the world, so don't throw a RuntimeException
|
1211
990
|
}
|
1212
991
|
|
1213
992
|
|
1214
993
|
/**
|
1215
994
|
* @webref environment
|
1216
995
|
* @param density 1 or 2
|
1217
|
-
*
|
996
|
+
* @see PApplet#pixelWidth
|
997
|
+
* @see PApplet#pixelHeight
|
1218
998
|
*/
|
1219
999
|
public void pixelDensity(int density) {
|
1220
1000
|
//println(density + " " + this.pixelDensity);
|
@@ -1317,7 +1097,7 @@ public class PApplet implements PConstants {
|
|
1317
1097
|
* Called by the browser or applet viewer to inform this applet that it
|
1318
1098
|
* should start its execution. It is called after the init method and
|
1319
1099
|
* each time the applet is revisited in a Web page.
|
1320
|
-
*
|
1100
|
+
*
|
1321
1101
|
* Called explicitly via the first call to PApplet.paint(), because
|
1322
1102
|
* PAppletGL needs to have a usable screen before getting things rolling.
|
1323
1103
|
*/
|
@@ -1333,7 +1113,7 @@ public class PApplet implements PConstants {
|
|
1333
1113
|
/**
|
1334
1114
|
* Called by the browser or applet viewer to inform
|
1335
1115
|
* this applet that it should stop its execution.
|
1336
|
-
*
|
1116
|
+
*
|
1337
1117
|
* Unfortunately, there are no guarantees from the Java spec
|
1338
1118
|
* when or if stop() will be called (i.e. on browser quit,
|
1339
1119
|
* or when moving between web pages), and it's not always called.
|
@@ -1392,7 +1172,7 @@ public class PApplet implements PConstants {
|
|
1392
1172
|
// * Called by the browser or applet viewer to inform this applet
|
1393
1173
|
// * that it is being reclaimed and that it should destroy
|
1394
1174
|
// * any resources that it has allocated.
|
1395
|
-
// *
|
1175
|
+
// *
|
1396
1176
|
// * destroy() supposedly gets called as the applet viewer
|
1397
1177
|
// * is shutting down the applet. stop() is called
|
1398
1178
|
// * first, and then destroy() to really get rid of things.
|
@@ -1425,6 +1205,7 @@ public class PApplet implements PConstants {
|
|
1425
1205
|
Object[] emptyArgs = new Object[] { };
|
1426
1206
|
|
1427
1207
|
|
1208
|
+
@SuppressWarnings("unused")
|
1428
1209
|
void handle() {
|
1429
1210
|
handle(emptyArgs);
|
1430
1211
|
}
|
@@ -1434,7 +1215,7 @@ public class PApplet implements PConstants {
|
|
1434
1215
|
for (int i = 0; i < count; i++) {
|
1435
1216
|
try {
|
1436
1217
|
methods[i].invoke(objects[i], args);
|
1437
|
-
} catch (
|
1218
|
+
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
1438
1219
|
// check for wrapped exception, get root exception
|
1439
1220
|
Throwable t;
|
1440
1221
|
if (e instanceof InvocationTargetException) {
|
@@ -1571,13 +1352,13 @@ public class PApplet implements PConstants {
|
|
1571
1352
|
die("There is no public " + name + "() method in the class " +
|
1572
1353
|
o.getClass().getName());
|
1573
1354
|
|
1574
|
-
} catch (
|
1355
|
+
} catch (SecurityException e) {
|
1575
1356
|
die("Could not register " + name + " + () for " + o, e);
|
1576
1357
|
}
|
1577
1358
|
}
|
1578
1359
|
|
1579
1360
|
|
1580
|
-
private void registerWithArgs(String name, Object o, Class<?> cargs
|
1361
|
+
private void registerWithArgs(String name, Object o, Class<?>[] cargs) {
|
1581
1362
|
Class<?> c = o.getClass();
|
1582
1363
|
try {
|
1583
1364
|
Method method = c.getMethod(name, cargs);
|
@@ -1593,7 +1374,7 @@ public class PApplet implements PConstants {
|
|
1593
1374
|
die("There is no public " + name + "() method in the class " +
|
1594
1375
|
o.getClass().getName());
|
1595
1376
|
|
1596
|
-
} catch (
|
1377
|
+
} catch (SecurityException e) {
|
1597
1378
|
die("Could not register " + name + " + () for " + o, e);
|
1598
1379
|
}
|
1599
1380
|
}
|
@@ -1611,8 +1392,6 @@ public class PApplet implements PConstants {
|
|
1611
1392
|
die("No registered methods with the name " + name + "() were found.");
|
1612
1393
|
}
|
1613
1394
|
try {
|
1614
|
-
// Method method = o.getClass().getMethod(name, new Class[] {});
|
1615
|
-
// meth.remove(o, method);
|
1616
1395
|
meth.remove(target);
|
1617
1396
|
} catch (Exception e) {
|
1618
1397
|
die("Could not unregister " + name + "() for " + target, e);
|
@@ -1620,18 +1399,7 @@ public class PApplet implements PConstants {
|
|
1620
1399
|
}
|
1621
1400
|
}
|
1622
1401
|
|
1623
|
-
|
1624
|
-
protected void handleMethods(String methodName) {
|
1625
|
-
synchronized (registerLock) {
|
1626
|
-
RegisteredMethods meth = registerMap.get(methodName);
|
1627
|
-
if (meth != null) {
|
1628
|
-
meth.handle();
|
1629
|
-
}
|
1630
|
-
}
|
1631
|
-
}
|
1632
|
-
|
1633
|
-
|
1634
|
-
protected void handleMethods(String methodName, Object[] args) {
|
1402
|
+
protected void handleMethods(String methodName, Object...args) {
|
1635
1403
|
synchronized (registerLock) {
|
1636
1404
|
RegisteredMethods meth = registerMap.get(methodName);
|
1637
1405
|
if (meth != null) {
|
@@ -1939,41 +1707,41 @@ public class PApplet implements PConstants {
|
|
1939
1707
|
* <b>size()</b> function must be the first line in <b>setup()</b>. If
|
1940
1708
|
* <b>size()</b> is not used, the default size of the window is 100x100
|
1941
1709
|
* pixels. The system variables <b>width</b> and <b>height</b> are set by
|
1942
|
-
* the parameters passed to this function
|
1943
|
-
*
|
1710
|
+
* the parameters passed to this function.
|
1711
|
+
*
|
1944
1712
|
* Do not use variables as the parameters to <b>size()</b> function,
|
1945
1713
|
* because it will cause problems when exporting your sketch. When
|
1946
1714
|
* variables are used, the dimensions of your sketch cannot be determined
|
1947
1715
|
* during export. Instead, employ numeric values in the <b>size()</b>
|
1948
1716
|
* statement, and then use the built-in <b>width</b> and <b>height</b>
|
1949
1717
|
* variables inside your program when the dimensions of the display window
|
1950
|
-
* are needed
|
1951
|
-
*
|
1718
|
+
* are needed.
|
1719
|
+
*
|
1952
1720
|
* The <b>size()</b> function can only be used once inside a sketch, and
|
1953
|
-
* cannot be used for resizing
|
1954
|
-
*
|
1721
|
+
* cannot be used for resizing.
|
1722
|
+
* <b>renderer</b> parameter selects which rendering engine to use.
|
1955
1723
|
* For example, if you will be drawing 3D shapes, use <b>P3D</b>, if you
|
1956
1724
|
* want to export images from a program as a PDF file use <b>PDF</b>. A
|
1957
|
-
* brief description of the three primary renderers follows
|
1958
|
-
*
|
1725
|
+
* brief description of the three primary renderers follows:
|
1726
|
+
*
|
1959
1727
|
* <b>P2D</b> (Processing 2D) - The default renderer that supports two
|
1960
|
-
* dimensional drawing
|
1961
|
-
*
|
1728
|
+
* dimensional drawing.
|
1729
|
+
*
|
1962
1730
|
* <b>P3D</b> (Processing 3D) - 3D graphics renderer that makes use of
|
1963
|
-
* OpenGL-compatible graphics hardware
|
1964
|
-
*
|
1731
|
+
* OpenGL-compatible graphics hardware.
|
1732
|
+
*
|
1965
1733
|
* <b>PDF</b> - The PDF renderer draws 2D graphics directly to an Acrobat
|
1966
1734
|
* PDF file. This produces excellent results when you need vector shapes
|
1967
1735
|
* for high resolution output or printing. You must first use Import
|
1968
1736
|
* Library → PDF to make use of the library. More information can be
|
1969
|
-
* found in the PDF library reference
|
1970
|
-
*
|
1737
|
+
* found in the PDF library reference.
|
1738
|
+
*
|
1971
1739
|
* The P3D renderer doesn't support <b>strokeCap()</b> or
|
1972
1740
|
* <b>strokeJoin()</b>, which can lead to ugly results when using
|
1973
1741
|
* <b>strokeWeight()</b>. (<a
|
1974
1742
|
* href="http://code.google.com/p/processing/issues/detail?id=123">Issue
|
1975
|
-
* 123</a>)
|
1976
|
-
*
|
1743
|
+
* 123</a>)
|
1744
|
+
*
|
1977
1745
|
* The maximum width and height is limited by your operating system, and is
|
1978
1746
|
* usually the width and height of your actual screen. On some machines it
|
1979
1747
|
* may simply be the number of pixels on your current screen, meaning that
|
@@ -1981,8 +1749,8 @@ public class PApplet implements PConstants {
|
|
1981
1749
|
* same number of pixels. This varies widely so you'll have to try
|
1982
1750
|
* different rendering modes and sizes until you get what you're looking
|
1983
1751
|
* for. If you need something larger, use <b>createGraphics</b> to create a
|
1984
|
-
* non-visible drawing surface
|
1985
|
-
*
|
1752
|
+
* non-visible drawing surface.
|
1753
|
+
*
|
1986
1754
|
* Again, the <b>size()</b> function must be the first line of the code (or
|
1987
1755
|
* first item inside setup). Any code that appears before the <b>size()</b>
|
1988
1756
|
* command may run more than once, which can lead to confusing results.
|
@@ -2004,6 +1772,9 @@ public class PApplet implements PConstants {
|
|
2004
1772
|
* @param height height of the display window in units of pixels
|
2005
1773
|
* @see PApplet#width
|
2006
1774
|
* @see PApplet#height
|
1775
|
+
* @see PApplet#setup()
|
1776
|
+
* @see PApplet#settings()
|
1777
|
+
* @see PApplet#fullScreen()
|
2007
1778
|
*/
|
2008
1779
|
public void size(int width, int height) {
|
2009
1780
|
// Check to make sure the width/height have actually changed. It's ok to
|
@@ -2133,12 +1904,12 @@ public class PApplet implements PConstants {
|
|
2133
1904
|
* P3D. Use this class if you need to draw into an off-screen graphics
|
2134
1905
|
* buffer. The PDF renderer requires the filename parameter. The DXF
|
2135
1906
|
* renderer should not be used with <b>createGraphics()</b>, it's only
|
2136
|
-
* built for use with <b>beginRaw()</b> and <b>endRaw()</b
|
2137
|
-
*
|
1907
|
+
* built for use with <b>beginRaw()</b> and <b>endRaw()</b>.
|
1908
|
+
*
|
2138
1909
|
* It's important to call any drawing functions between <b>beginDraw()</b>
|
2139
1910
|
* and <b>endDraw()</b> statements. This is also true for any functions
|
2140
|
-
* that affect drawing, such as <b>smooth()</b> or <b>colorMode()</b
|
2141
|
-
*
|
1911
|
+
* that affect drawing, such as <b>smooth()</b> or <b>colorMode()</b>.
|
1912
|
+
* the main drawing surface which is completely opaque, surfaces
|
2142
1913
|
* created with <b>createGraphics()</b> can have transparency. This makes
|
2143
1914
|
* it possible to draw into a graphics and maintain the alpha channel. By
|
2144
1915
|
* using <b>save()</b> to write a PNG or TGA file, the transparency of the
|
@@ -2259,7 +2030,7 @@ public class PApplet implements PConstants {
|
|
2259
2030
|
Class<?> rendererClass =
|
2260
2031
|
Thread.currentThread().getContextClassLoader().loadClass(renderer);
|
2261
2032
|
|
2262
|
-
Constructor<?> constructor = rendererClass.getConstructor(
|
2033
|
+
Constructor<?> constructor = rendererClass.getConstructor();
|
2263
2034
|
PGraphics pg = (PGraphics) constructor.newInstance();
|
2264
2035
|
|
2265
2036
|
pg.setParent(this);
|
@@ -2351,10 +2122,10 @@ public class PApplet implements PConstants {
|
|
2351
2122
|
* fresh buffer of pixels to play with. Set the size of the buffer with the
|
2352
2123
|
* <b>width</b> and <b>height</b> parameters. The <b>format</b> parameter
|
2353
2124
|
* defines how the pixels are stored. See the PImage reference for more information.
|
2354
|
-
*
|
2125
|
+
*
|
2355
2126
|
* Be sure to include all three parameters, specifying only the width and
|
2356
2127
|
* height (but no format) will produce a strange error.
|
2357
|
-
*
|
2128
|
+
*
|
2358
2129
|
* Advanced users please note that createImage() should be used instead of
|
2359
2130
|
* the syntax <tt>new PImage()</tt>.
|
2360
2131
|
*
|
@@ -2530,11 +2301,11 @@ public class PApplet implements PConstants {
|
|
2530
2301
|
* the program to update the display window only when necessary, for
|
2531
2302
|
* example when an event registered by <b>mousePressed()</b> or
|
2532
2303
|
* <b>keyPressed()</b> occurs.
|
2533
|
-
*
|
2304
|
+
* structuring a program, it only makes sense to call redraw()
|
2534
2305
|
* within events such as <b>mousePressed()</b>. This is because
|
2535
2306
|
* <b>redraw()</b> does not run <b>draw()</b> immediately (it only sets a
|
2536
2307
|
* flag that indicates an update is needed).
|
2537
|
-
*
|
2308
|
+
* <b>redraw()</b> within <b>draw()</b> has no effect because
|
2538
2309
|
* <b>draw()</b> is continuously called anyway.
|
2539
2310
|
*
|
2540
2311
|
* ( end auto-generated )
|
@@ -2588,7 +2359,7 @@ public class PApplet implements PConstants {
|
|
2588
2359
|
* <b>draw()</b>. If <b>loop()</b> is called, the code in <b>draw()</b>
|
2589
2360
|
* begin to run continuously again. If using <b>noLoop()</b> in
|
2590
2361
|
* <b>setup()</b>, it should be the last line inside the block.
|
2591
|
-
*
|
2362
|
+
*
|
2592
2363
|
* When <b>noLoop()</b> is used, it's not possible to manipulate or access
|
2593
2364
|
* the screen inside event handling functions such as <b>mousePressed()</b>
|
2594
2365
|
* or <b>keyPressed()</b>. Instead, use those functions to call
|
@@ -2596,7 +2367,7 @@ public class PApplet implements PConstants {
|
|
2596
2367
|
* can update the screen properly. This means that when noLoop() has been
|
2597
2368
|
* called, no drawing can happen, and functions like saveFrame() or
|
2598
2369
|
* loadPixels() may not be used.
|
2599
|
-
*
|
2370
|
+
*
|
2600
2371
|
* Note that if the sketch is resized, <b>redraw()</b> will be called to
|
2601
2372
|
* update the sketch, even after <b>noLoop()</b> has been specified.
|
2602
2373
|
* Otherwise, the sketch would enter an odd state until <b>loop()</b> was called.
|
@@ -2688,23 +2459,6 @@ public class PApplet implements PConstants {
|
|
2688
2459
|
|
2689
2460
|
int button = event.getButton();
|
2690
2461
|
|
2691
|
-
// If running on Mac OS, allow ctrl-click as right mouse.
|
2692
|
-
if (PApplet.platform == PConstants.MACOSX && event.getButton() == PConstants.LEFT) {
|
2693
|
-
if (action == MouseEvent.PRESS && event.isControlDown()) {
|
2694
|
-
macosxLeftButtonWithCtrlPressed = true;
|
2695
|
-
}
|
2696
|
-
if (macosxLeftButtonWithCtrlPressed) {
|
2697
|
-
button = PConstants.RIGHT;
|
2698
|
-
event = new MouseEvent(event.getNative(), event.getMillis(),
|
2699
|
-
event.getAction(), event.getModifiers(),
|
2700
|
-
event.getX(), event.getY(),
|
2701
|
-
button, event.getCount());
|
2702
|
-
}
|
2703
|
-
if (action == MouseEvent.RELEASE) {
|
2704
|
-
macosxLeftButtonWithCtrlPressed = false;
|
2705
|
-
}
|
2706
|
-
}
|
2707
|
-
|
2708
2462
|
// Get the (already processed) button code
|
2709
2463
|
mouseButton = button;
|
2710
2464
|
|
@@ -2743,7 +2497,7 @@ public class PApplet implements PConstants {
|
|
2743
2497
|
break;
|
2744
2498
|
}
|
2745
2499
|
|
2746
|
-
handleMethods("mouseEvent",
|
2500
|
+
handleMethods("mouseEvent", event);
|
2747
2501
|
|
2748
2502
|
switch (action) {
|
2749
2503
|
case MouseEvent.PRESS:
|
@@ -3015,7 +2769,7 @@ public class PApplet implements PConstants {
|
|
3015
2769
|
}
|
3016
2770
|
*/
|
3017
2771
|
|
3018
|
-
handleMethods("keyEvent",
|
2772
|
+
handleMethods("keyEvent", event);
|
3019
2773
|
|
3020
2774
|
// if someone else wants to intercept the key, they should
|
3021
2775
|
// set key to zero (or something besides the ESC).
|
@@ -3024,21 +2778,6 @@ public class PApplet implements PConstants {
|
|
3024
2778
|
if (key == ESC) {
|
3025
2779
|
exit();
|
3026
2780
|
}
|
3027
|
-
// When running tethered to the Processing application, respond to
|
3028
|
-
// Ctrl-W (or Cmd-W) events by closing the sketch. Not enabled when
|
3029
|
-
// running independently, because this sketch may be one component
|
3030
|
-
// embedded inside an application that has its own close behavior.
|
3031
|
-
if (external &&
|
3032
|
-
event.getKeyCode() == 'W' &&
|
3033
|
-
((event.isMetaDown() && platform == MACOSX) ||
|
3034
|
-
(event.isControlDown() && platform != MACOSX))) {
|
3035
|
-
// Can't use this native stuff b/c the native event might be NEWT
|
3036
|
-
// if (external && event.getNative() instanceof java.awt.event.KeyEvent &&
|
3037
|
-
// ((java.awt.event.KeyEvent) event.getNative()).getModifiers() ==
|
3038
|
-
// Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() &&
|
3039
|
-
// event.getKeyCode() == 'W') {
|
3040
|
-
exit();
|
3041
|
-
}
|
3042
2781
|
}
|
3043
2782
|
}
|
3044
2783
|
|
@@ -3049,7 +2788,7 @@ public class PApplet implements PConstants {
|
|
3049
2788
|
*
|
3050
2789
|
* The <b>keyPressed()</b> function is called once every time a key is
|
3051
2790
|
* pressed. The key that was pressed is stored in the <b>key</b> variable.
|
3052
|
-
*
|
2791
|
+
*
|
3053
2792
|
* For non-ASCII keys, use the <b>keyCode</b> variable. The keys included
|
3054
2793
|
* in the ASCII specification (BACKSPACE, TAB, ENTER, RETURN, ESC, and
|
3055
2794
|
* DELETE) do not require checking to see if they key is coded, and you
|
@@ -3058,7 +2797,7 @@ public class PApplet implements PConstants {
|
|
3058
2797
|
* commonly used on PCs and Unix and the RETURN key is used instead on
|
3059
2798
|
* Macintosh. Check for both ENTER and RETURN to make sure your program
|
3060
2799
|
* will work for all platforms.
|
3061
|
-
*
|
2800
|
+
*
|
3062
2801
|
* Because of how operating systems handle key repeats, holding down a key
|
3063
2802
|
* may cause multiple calls to keyPressed() (and keyReleased() as well).
|
3064
2803
|
* The rate of repeat is set by the operating system and how each computer
|
@@ -3431,17 +3170,9 @@ public class PApplet implements PConstants {
|
|
3431
3170
|
* @param url the complete URL, as a String in quotes
|
3432
3171
|
*/
|
3433
3172
|
public void link(String url) {
|
3434
|
-
|
3435
|
-
|
3436
|
-
|
3437
|
-
} else {
|
3438
|
-
// Just pass it off to open() and hope for the best
|
3439
|
-
launch(url);
|
3440
|
-
}
|
3441
|
-
} catch (IOException e) {
|
3442
|
-
printStackTrace(e);
|
3443
|
-
} catch (URISyntaxException e) {
|
3444
|
-
printStackTrace(e);
|
3173
|
+
if (!surface.openLink(url)) {
|
3174
|
+
// Just pass it off to launch() and hope for the best
|
3175
|
+
launch(url);
|
3445
3176
|
}
|
3446
3177
|
}
|
3447
3178
|
|
@@ -3458,25 +3189,25 @@ public class PApplet implements PConstants {
|
|
3458
3189
|
* of an executable in the system's PATH. In most cases, using a full path
|
3459
3190
|
* is the best option, rather than relying on the system PATH. Be sure to
|
3460
3191
|
* make the file executable before attempting to open it (chmod +x).
|
3461
|
-
*
|
3192
|
+
*
|
3462
3193
|
* The <b>args</b> parameter is a String or String array which is passed to
|
3463
3194
|
* the command line. If you have multiple parameters, e.g. an application
|
3464
3195
|
* and a document, or a command with multiple switches, use the version
|
3465
3196
|
* that takes a String array, and place each individual item in a separate
|
3466
3197
|
* element.
|
3467
|
-
*
|
3198
|
+
*
|
3468
3199
|
* If args is a String (not an array), then it can only be a single file or
|
3469
3200
|
* application with no parameters. It's not the same as executing that
|
3470
3201
|
* String using a shell. For instance, launch("javac -help") will not work
|
3471
3202
|
* properly.
|
3472
|
-
*
|
3203
|
+
*
|
3473
3204
|
* This function behaves differently on each platform. On Windows, the
|
3474
3205
|
* parameters are sent to the Windows shell via "cmd /c". On Mac OS X, the
|
3475
3206
|
* "open" command is used (type "man open" in Terminal.app for
|
3476
3207
|
* documentation). On Linux, it first tries gnome-open, then kde-open, but
|
3477
3208
|
* if neither are available, it sends the command to the shell without any
|
3478
3209
|
* alterations.
|
3479
|
-
*
|
3210
|
+
*
|
3480
3211
|
* For users familiar with Java, this is not quite the same as
|
3481
3212
|
* Runtime.exec(), because the launcher command is prepended. Instead, the
|
3482
3213
|
* <b>exec(String[])</b> function is a shortcut for
|
@@ -3490,17 +3221,7 @@ public class PApplet implements PConstants {
|
|
3490
3221
|
static public Process launch(String... args) {
|
3491
3222
|
String[] params = null;
|
3492
3223
|
|
3493
|
-
|
3494
|
-
// just launching the .html file via the shell works
|
3495
|
-
// but make sure to chmod +x the .html files first
|
3496
|
-
// also place quotes around it in case there's a space
|
3497
|
-
// in the user.dir part of the url
|
3498
|
-
params = new String[] { "cmd", "/c" };
|
3499
|
-
|
3500
|
-
} else if (platform == MACOSX) {
|
3501
|
-
params = new String[] { "open" };
|
3502
|
-
|
3503
|
-
} else if (platform == LINUX) {
|
3224
|
+
if (platform == LINUX) {
|
3504
3225
|
// xdg-open is in the Free Desktop Specification and really should just
|
3505
3226
|
// work on desktop Linux. Not risking it though.
|
3506
3227
|
final String[] launchers = { "xdg-open", "gnome-open", "kde-open" };
|
@@ -3511,7 +3232,7 @@ public class PApplet implements PConstants {
|
|
3511
3232
|
/*int result =*/ p.waitFor();
|
3512
3233
|
// Not installed will throw an IOException (JDK 1.4.2, Ubuntu 7.04)
|
3513
3234
|
openLauncher = launcher;
|
3514
|
-
} catch (
|
3235
|
+
} catch (IOException | InterruptedException e) { }
|
3515
3236
|
}
|
3516
3237
|
if (openLauncher == null) {
|
3517
3238
|
System.err.println("Could not find xdg-open, gnome-open, or kde-open: " +
|
@@ -3755,12 +3476,12 @@ public class PApplet implements PConstants {
|
|
3755
3476
|
* Quits/stops/exits the program. Programs without a <b>draw()</b> function
|
3756
3477
|
* exit automatically after the last line has run, but programs with
|
3757
3478
|
* <b>draw()</b> run continuously until the program is manually stopped or
|
3758
|
-
* <b>exit()</b> is run
|
3759
|
-
*
|
3479
|
+
* <b>exit()</b> is run.
|
3480
|
+
*
|
3760
3481
|
* Rather than terminating immediately, <b>exit()</b> will cause the sketch
|
3761
3482
|
* to exit after <b>draw()</b> has completed (or after <b>setup()</b>
|
3762
|
-
* completes if called during the <b>setup()</b> function)
|
3763
|
-
*
|
3483
|
+
* completes if called during the <b>setup()</b> function).
|
3484
|
+
*
|
3764
3485
|
* For Java programmers, this is <em>not</em> the same as System.exit().
|
3765
3486
|
* Further, System.exit() should not be used because closing out an
|
3766
3487
|
* application while <b>draw()</b> is running may cause a crash
|
@@ -3833,17 +3554,6 @@ public class PApplet implements PConstants {
|
|
3833
3554
|
// run dispose() methods registered by libraries
|
3834
3555
|
handleMethods("dispose");
|
3835
3556
|
}
|
3836
|
-
|
3837
|
-
if (platform == MACOSX) {
|
3838
|
-
try {
|
3839
|
-
final String td = "processing.core.ThinkDifferent";
|
3840
|
-
final Class<?> thinkDifferent = getClass().getClassLoader().loadClass(td);
|
3841
|
-
thinkDifferent.getMethod("cleanup").invoke(null);
|
3842
|
-
} catch (Exception e) {
|
3843
|
-
e.printStackTrace();
|
3844
|
-
}
|
3845
|
-
}
|
3846
|
-
|
3847
3557
|
}
|
3848
3558
|
|
3849
3559
|
|
@@ -3853,15 +3563,15 @@ public class PApplet implements PConstants {
|
|
3853
3563
|
|
3854
3564
|
/**
|
3855
3565
|
* Call a method in the current class based on its name.
|
3856
|
-
*
|
3566
|
+
*
|
3857
3567
|
* Note that the function being called must be public. Inside the PDE,
|
3858
3568
|
* 'public' is automatically added, but when used without the preprocessor,
|
3859
3569
|
* (like from Eclipse) you'll have to do it yourself.
|
3860
3570
|
*/
|
3861
3571
|
public void method(String name) {
|
3862
3572
|
try {
|
3863
|
-
Method method = getClass().getMethod(name
|
3864
|
-
method.invoke(this
|
3573
|
+
Method method = getClass().getMethod(name);
|
3574
|
+
method.invoke(this);
|
3865
3575
|
|
3866
3576
|
} catch (IllegalArgumentException e) {
|
3867
3577
|
e.printStackTrace();
|
@@ -3882,7 +3592,7 @@ public class PApplet implements PConstants {
|
|
3882
3592
|
* Launch a new thread and call the specified function from that new thread.
|
3883
3593
|
* This is a very simple way to do a thread without needing to get into
|
3884
3594
|
* classes, runnables, etc.
|
3885
|
-
*
|
3595
|
+
*
|
3886
3596
|
* Note that the function being called must be public. Inside the PDE,
|
3887
3597
|
* 'public' is automatically added, but when used without the preprocessor,
|
3888
3598
|
* (like from Eclipse) you'll have to do it yourself.
|
@@ -3896,13 +3606,7 @@ public class PApplet implements PConstants {
|
|
3896
3606
|
* @see PApplet#noLoop()
|
3897
3607
|
*/
|
3898
3608
|
public void thread(final String name) {
|
3899
|
-
|
3900
|
-
@Override
|
3901
|
-
public void run() {
|
3902
|
-
method(name);
|
3903
|
-
}
|
3904
|
-
};
|
3905
|
-
later.start();
|
3609
|
+
new Thread(() -> method(name)).start();
|
3906
3610
|
}
|
3907
3611
|
|
3908
3612
|
|
@@ -3924,7 +3628,7 @@ public class PApplet implements PConstants {
|
|
3924
3628
|
* which may be opened by selecting "Show sketch folder" from the "Sketch"
|
3925
3629
|
* menu. It is not possible to use <b>save()</b> while running the program
|
3926
3630
|
* in a web browser.
|
3927
|
-
*
|
3631
|
+
* images saved from the main drawing window will be opaque. To save
|
3928
3632
|
* images without a background, use <b>createGraphics()</b>.
|
3929
3633
|
*
|
3930
3634
|
* ( end auto-generated )
|
@@ -3964,14 +3668,14 @@ public class PApplet implements PConstants {
|
|
3964
3668
|
* sequences can be loaded into programs such as Apple's QuickTime software
|
3965
3669
|
* and made into movies. These files are saved to the sketch's folder,
|
3966
3670
|
* which may be opened by selecting "Show sketch folder" from the "Sketch"
|
3967
|
-
* menu
|
3968
|
-
*
|
3671
|
+
* menu.
|
3672
|
+
*
|
3969
3673
|
* It is not possible to use saveXxxxx() functions inside a web browser
|
3970
3674
|
* unless the sketch is <a
|
3971
3675
|
* href="http://wiki.processing.org/w/Sign_an_Applet">signed applet</A>. To
|
3972
3676
|
* save a file back to a server, see the <a
|
3973
3677
|
* href="http://wiki.processing.org/w/Saving_files_to_a_web-server">save to
|
3974
|
-
* web</A> code snippet on the Processing Wiki
|
3678
|
+
* web</A> code snippet on the Processing Wiki.
|
3975
3679
|
* <br/ >
|
3976
3680
|
* All images saved from the main drawing window will be opaque. To save
|
3977
3681
|
* images without a background, use <b>createGraphics()</b>.
|
@@ -4049,7 +3753,7 @@ public class PApplet implements PConstants {
|
|
4049
3753
|
* to load an image as the cursor if you are exporting your program for the
|
4050
3754
|
* Web and not all MODES work with all Web browsers. The values for
|
4051
3755
|
* parameters <b>x</b> and <b>y</b> must be less than the dimensions of the image.
|
4052
|
-
*
|
3756
|
+
*
|
4053
3757
|
* Setting or hiding the cursor generally does not work with "Present" mode
|
4054
3758
|
* (when running full-screen).
|
4055
3759
|
*
|
@@ -4110,15 +3814,15 @@ public class PApplet implements PConstants {
|
|
4110
3814
|
* helpful for looking at the data a program is producing. The companion
|
4111
3815
|
* function <b>println()</b> works like <b>print()</b>, but creates a new
|
4112
3816
|
* line of text for each call to the function. Individual elements can be
|
4113
|
-
* separated with quotes ("") and joined with the addition operator (+)
|
4114
|
-
*
|
3817
|
+
* separated with quotes ("") and joined with the addition operator (+).
|
3818
|
+
*
|
4115
3819
|
* Beginning with release 0125, to print the contents of an array, use
|
4116
3820
|
* println(). There's no sensible way to do a <b>print()</b> of an array,
|
4117
3821
|
* because there are too many possibilities for how to separate the data
|
4118
3822
|
* (spaces, commas, etc). If you want to print an array as a single line,
|
4119
3823
|
* use <b>join()</b>. With <b>join()</b>, you can choose any delimiter you
|
4120
|
-
* like and <b>print()</b> the result
|
4121
|
-
*
|
3824
|
+
* like and <b>print()</b> the result.
|
3825
|
+
*
|
4122
3826
|
* Using <b>print()</b> on an object will output <b>null</b>, a memory
|
4123
3827
|
* location that may look like "@10be08," or the result of the
|
4124
3828
|
* <b>toString()</b> method from the object that's being printed. Advanced
|
@@ -4213,7 +3917,7 @@ public class PApplet implements PConstants {
|
|
4213
3917
|
* to this function creates a new line of output. Individual elements can
|
4214
3918
|
* be separated with quotes ("") and joined with the string concatenation
|
4215
3919
|
* operator (+). See <b>print()</b> for more about what to expect in the output.
|
4216
|
-
*
|
3920
|
+
* <b>println()</b> on an array (by itself) will write the
|
4217
3921
|
* contents of the array to the console. This is often helpful for looking
|
4218
3922
|
* at the data a program is producing. A new line is put between each
|
4219
3923
|
* element of the array. This function can only print one dimensional
|
@@ -5023,9 +4727,9 @@ public class PApplet implements PConstants {
|
|
5023
4727
|
* ( begin auto-generated from norm.xml )
|
5024
4728
|
*
|
5025
4729
|
* Normalizes a number from another range into a value between 0 and 1.
|
5026
|
-
*
|
4730
|
+
*
|
5027
4731
|
* Identical to map(value, low, high, 0, 1);
|
5028
|
-
*
|
4732
|
+
*
|
5029
4733
|
* Numbers outside the range are not clamped to 0 and 1, because
|
5030
4734
|
* out-of-range values are often intentional and useful.
|
5031
4735
|
*
|
@@ -5048,7 +4752,7 @@ public class PApplet implements PConstants {
|
|
5048
4752
|
* the number '25' is converted from a value in the range 0..100 into
|
5049
4753
|
* a value that ranges from the left edge (0) to the right edge (width)
|
5050
4754
|
* of the screen.
|
5051
|
-
*
|
4755
|
+
*
|
5052
4756
|
* Numbers outside the range are not clamped to 0 and 1, because
|
5053
4757
|
* out-of-range values are often intentional and useful.
|
5054
4758
|
*
|
@@ -5258,11 +4962,12 @@ public class PApplet implements PConstants {
|
|
5258
4962
|
/**
|
5259
4963
|
* ( begin auto-generated from noise.xml )
|
5260
4964
|
*
|
5261
|
-
* Returns the Perlin noise value at specified coordinates.Perlin noise is
|
5262
|
-
a random sequence generator producing a more natural ordered, harmonic
|
5263
|
-
succession of numbers compared to the standard <b>random()</b> function.
|
5264
|
-
|
5265
|
-
|
4965
|
+
* Returns the Perlin noise value at specified coordinates. Perlin noise is
|
4966
|
+
* a random sequence generator producing a more natural ordered, harmonic
|
4967
|
+
* succession of numbers compared to the standard <b>random()</b> function.
|
4968
|
+
* It was invented by Ken Perlin in the 1980s and been used since in
|
4969
|
+
* graphical applications to produce procedural textures, natural motion,
|
4970
|
+
* shapes, terrains etc. The main difference to the
|
5266
4971
|
* <b>random()</b> function is that Perlin noise is defined in an infinite
|
5267
4972
|
* n-dimensional space where each pair of coordinates corresponds to a
|
5268
4973
|
* fixed semi-random value (fixed only for the lifespan of the program).
|
@@ -5270,11 +4975,11 @@ public class PApplet implements PConstants {
|
|
5270
4975
|
* compute 1D, 2D and 3D noise, depending on the number of coordinates
|
5271
4976
|
* given. The noise value can be animated by moving through the noise space
|
5272
4977
|
* as demonstrated in the example above. The 2nd and 3rd dimension can also
|
5273
|
-
* be interpreted as time
|
4978
|
+
* be interpreted as time.The actual noise is structured
|
5274
4979
|
* similar to an audio signal, in respect to the function's use of
|
5275
4980
|
* frequencies. Similar to the concept of harmonics in physics, perlin
|
5276
4981
|
* noise is computed over several octaves which are added together for the
|
5277
|
-
* final result.
|
4982
|
+
* final result. Another way to adjust the character of the
|
5278
4983
|
* resulting sequence is the scale of the input coordinates. As the
|
5279
4984
|
* function works within an infinite space the value of the coordinates
|
5280
4985
|
* doesn't matter as such, only the distance between successive coordinates
|
@@ -5285,7 +4990,6 @@ public class PApplet implements PConstants {
|
|
5285
4990
|
*
|
5286
4991
|
* ( end auto-generated )
|
5287
4992
|
*
|
5288
|
-
* @return
|
5289
4993
|
* @webref math:random
|
5290
4994
|
* @param x x-coordinate in noise space
|
5291
4995
|
* @param y y-coordinate in noise space
|
@@ -5306,7 +5010,7 @@ public class PApplet implements PConstants {
|
|
5306
5010
|
// [toxi 031112]
|
5307
5011
|
// noise broke due to recent change of cos table in PGraphics
|
5308
5012
|
// this will take care of it
|
5309
|
-
perlin_cosTable = PGraphics.
|
5013
|
+
perlin_cosTable = PGraphics.cosLUT;
|
5310
5014
|
perlin_TWOPI = perlin_PI = PGraphics.SINCOS_LENGTH;
|
5311
5015
|
perlin_PI >>= 1;
|
5312
5016
|
}
|
@@ -5361,7 +5065,7 @@ public class PApplet implements PConstants {
|
|
5361
5065
|
}
|
5362
5066
|
|
5363
5067
|
// [toxi 031112]
|
5364
|
-
// now adjusts to the size of the
|
5068
|
+
// now adjusts to the size of the cosLUT used via
|
5365
5069
|
// the new variables, defined above
|
5366
5070
|
private float noise_fsc(float i) {
|
5367
5071
|
// using bagel's cosine table instead
|
@@ -5387,7 +5091,7 @@ public class PApplet implements PConstants {
|
|
5387
5091
|
* parameter. Eg. a falloff factor of 0.75 means each octave will now have
|
5388
5092
|
* 75% impact (25% less) of the previous lower octave. Any value between
|
5389
5093
|
* 0.0 and 1.0 is valid, however note that values greater than 0.5 might
|
5390
|
-
* result in greater than 1.0 values returned by <b>noise()</b>.<br
|
5094
|
+
* result in greater than 1.0 values returned by <b>noise()</b>.<br
|
5391
5095
|
* />By changing these parameters, the signal created by the <b>noise()</b>
|
5392
5096
|
* function can be adapted to fit very specific needs and characteristics.
|
5393
5097
|
*
|
@@ -5437,8 +5141,6 @@ public class PApplet implements PConstants {
|
|
5437
5141
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
5438
5142
|
|
5439
5143
|
|
5440
|
-
protected String[] loadImageFormats;
|
5441
|
-
|
5442
5144
|
/**
|
5443
5145
|
* ( begin auto-generated from loadImage.xml )
|
5444
5146
|
*
|
@@ -5447,23 +5149,23 @@ public class PApplet implements PConstants {
|
|
5447
5149
|
* be loaded. To load correctly, images must be located in the data
|
5448
5150
|
* directory of the current sketch. In most cases, load all images in
|
5449
5151
|
* <b>setup()</b> to preload them at the start of the program. Loading
|
5450
|
-
* images inside <b>draw()</b> will reduce the speed of a program
|
5451
|
-
*
|
5152
|
+
* images inside <b>draw()</b> will reduce the speed of a program.
|
5153
|
+
* <b>filename</b> parameter can also be a URL to a file found
|
5452
5154
|
* online. For security reasons, a Processing sketch found online can only
|
5453
5155
|
* download files from the same server from which it came. Getting around
|
5454
5156
|
* this restriction requires a <a
|
5455
5157
|
* href="http://wiki.processing.org/w/Sign_an_Applet">signed
|
5456
|
-
* applet</a
|
5457
|
-
*
|
5158
|
+
* applet</a>.
|
5159
|
+
* <b>extension</b> parameter is used to determine the image type in
|
5458
5160
|
* cases where the image filename does not end with a proper extension.
|
5459
5161
|
* Specify the extension as the second parameter to <b>loadImage()</b>, as
|
5460
|
-
* shown in the third example on this page
|
5461
|
-
*
|
5162
|
+
* shown in the third example on this page.
|
5163
|
+
* an image is not loaded successfully, the <b>null</b> value is
|
5462
5164
|
* returned and an error message will be printed to the console. The error
|
5463
5165
|
* message does not halt the program, however the null value may cause a
|
5464
5166
|
* NullPointerException if your code does not check whether the value
|
5465
|
-
* returned from <b>loadImage()</b> is null
|
5466
|
-
*
|
5167
|
+
* returned from <b>loadImage()</b> is null.
|
5168
|
+
* on the type of error, a <b>PImage</b> object may still be
|
5467
5169
|
* returned, but the width and height of the image will be set to -1. This
|
5468
5170
|
* happens if bad image data is returned or cannot be decoded properly.
|
5469
5171
|
* Sometimes this happens with image URLs that produce a 403 error or that
|
@@ -5480,29 +5182,14 @@ public class PApplet implements PConstants {
|
|
5480
5182
|
* @see PGraphics#background(float, float, float, float)
|
5481
5183
|
*/
|
5482
5184
|
public PImage loadImage(String filename) {
|
5483
|
-
// return loadImage(filename, null, null);
|
5484
5185
|
return loadImage(filename, null);
|
5485
5186
|
}
|
5486
5187
|
|
5487
|
-
// /**
|
5488
|
-
// * @param extension the type of image to load, for example "png", "gif", "jpg"
|
5489
|
-
// */
|
5490
|
-
// public PImage loadImage(String filename, String extension) {
|
5491
|
-
// return loadImage(filename, extension, null);
|
5492
|
-
// }
|
5493
|
-
|
5494
|
-
// /**
|
5495
|
-
// * @nowebref
|
5496
|
-
// */
|
5497
|
-
// public PImage loadImage(String filename, Object params) {
|
5498
|
-
// return loadImage(filename, null, params);
|
5499
|
-
// }
|
5500
5188
|
|
5501
5189
|
/**
|
5502
5190
|
* @param extension type of image to load, for example "png", "gif", "jpg"
|
5503
5191
|
*/
|
5504
|
-
public PImage loadImage(String filename, String extension) {
|
5505
|
-
|
5192
|
+
public PImage loadImage(String filename, String extension) {
|
5506
5193
|
// awaitAsyncSaveCompletion() has to run on the main thread, because P2D
|
5507
5194
|
// and P3D call GL functions. If this runs on background, requestImage()
|
5508
5195
|
// already called awaitAsyncSaveCompletion() on the main thread.
|
@@ -5510,127 +5197,7 @@ public class PApplet implements PConstants {
|
|
5510
5197
|
g.awaitAsyncSaveCompletion(filename);
|
5511
5198
|
}
|
5512
5199
|
|
5513
|
-
|
5514
|
-
String lower = filename.toLowerCase();
|
5515
|
-
int dot = filename.lastIndexOf('.');
|
5516
|
-
if (dot == -1) {
|
5517
|
-
extension = "unknown"; // no extension found
|
5518
|
-
|
5519
|
-
} else {
|
5520
|
-
extension = lower.substring(dot + 1);
|
5521
|
-
|
5522
|
-
// check for, and strip any parameters on the url, i.e.
|
5523
|
-
// filename.jpg?blah=blah&something=that
|
5524
|
-
int question = extension.indexOf('?');
|
5525
|
-
if (question != -1) {
|
5526
|
-
extension = extension.substring(0, question);
|
5527
|
-
}
|
5528
|
-
}
|
5529
|
-
}
|
5530
|
-
|
5531
|
-
// just in case. them users will try anything!
|
5532
|
-
extension = extension.toLowerCase();
|
5533
|
-
|
5534
|
-
if (extension.equals("tga")) {
|
5535
|
-
try {
|
5536
|
-
PImage image = loadImageTGA(filename);
|
5537
|
-
// if (params != null) {
|
5538
|
-
// image.setParams(g, params);
|
5539
|
-
// }
|
5540
|
-
return image;
|
5541
|
-
} catch (IOException e) {
|
5542
|
-
printStackTrace(e);
|
5543
|
-
return null;
|
5544
|
-
}
|
5545
|
-
}
|
5546
|
-
|
5547
|
-
if (extension.equals("tif") || extension.equals("tiff")) {
|
5548
|
-
byte bytes[] = loadBytes(filename);
|
5549
|
-
PImage image = (bytes == null) ? null : PImage.loadTIFF(bytes);
|
5550
|
-
// if (params != null) {
|
5551
|
-
// image.setParams(g, params);
|
5552
|
-
// }
|
5553
|
-
return image;
|
5554
|
-
}
|
5555
|
-
|
5556
|
-
// For jpeg, gif, and png, load them using createImage(),
|
5557
|
-
// because the javax.imageio code was found to be much slower.
|
5558
|
-
// http://dev.processing.org/bugs/show_bug.cgi?id=392
|
5559
|
-
try {
|
5560
|
-
if (extension.equals("jpg") || extension.equals("jpeg") ||
|
5561
|
-
extension.equals("gif") || extension.equals("png") ||
|
5562
|
-
extension.equals("unknown")) {
|
5563
|
-
byte bytes[] = loadBytes(filename);
|
5564
|
-
if (bytes == null) {
|
5565
|
-
return null;
|
5566
|
-
} else {
|
5567
|
-
//Image awtImage = Toolkit.getDefaultToolkit().createImage(bytes);
|
5568
|
-
Image awtImage = new ImageIcon(bytes).getImage();
|
5569
|
-
|
5570
|
-
if (awtImage instanceof BufferedImage) {
|
5571
|
-
BufferedImage buffImage = (BufferedImage) awtImage;
|
5572
|
-
int space = buffImage.getColorModel().getColorSpace().getType();
|
5573
|
-
if (space == ColorSpace.TYPE_CMYK) {
|
5574
|
-
System.err.println(filename + " is a CMYK image, " +
|
5575
|
-
"only RGB images are supported.");
|
5576
|
-
return null;
|
5577
|
-
/*
|
5578
|
-
// wishful thinking, appears to not be supported
|
5579
|
-
// https://community.oracle.com/thread/1272045?start=0&tstart=0
|
5580
|
-
BufferedImage destImage =
|
5581
|
-
new BufferedImage(buffImage.getWidth(),
|
5582
|
-
buffImage.getHeight(),
|
5583
|
-
BufferedImage.TYPE_3BYTE_BGR);
|
5584
|
-
ColorConvertOp op = new ColorConvertOp(null);
|
5585
|
-
op.filter(buffImage, destImage);
|
5586
|
-
image = new PImage(destImage);
|
5587
|
-
*/
|
5588
|
-
}
|
5589
|
-
}
|
5590
|
-
|
5591
|
-
PImage image = new PImage(awtImage);
|
5592
|
-
if (image.width == -1) {
|
5593
|
-
System.err.println("The file " + filename +
|
5594
|
-
" contains bad image data, or may not be an image.");
|
5595
|
-
}
|
5596
|
-
|
5597
|
-
// if it's a .gif image, test to see if it has transparency
|
5598
|
-
if (extension.equals("gif") || extension.equals("png") ||
|
5599
|
-
extension.equals("unknown")) {
|
5600
|
-
image.checkAlpha();
|
5601
|
-
}
|
5602
|
-
|
5603
|
-
// if (params != null) {
|
5604
|
-
// image.setParams(g, params);
|
5605
|
-
// }
|
5606
|
-
image.parent = this;
|
5607
|
-
return image;
|
5608
|
-
}
|
5609
|
-
}
|
5610
|
-
} catch (Exception e) {
|
5611
|
-
// show error, but move on to the stuff below, see if it'll work
|
5612
|
-
printStackTrace(e);
|
5613
|
-
}
|
5614
|
-
|
5615
|
-
if (loadImageFormats == null) {
|
5616
|
-
loadImageFormats = ImageIO.getReaderFormatNames();
|
5617
|
-
}
|
5618
|
-
if (loadImageFormats != null) {
|
5619
|
-
for (int i = 0; i < loadImageFormats.length; i++) {
|
5620
|
-
if (extension.equals(loadImageFormats[i])) {
|
5621
|
-
return loadImageIO(filename);
|
5622
|
-
// PImage image = loadImageIO(filename);
|
5623
|
-
// if (params != null) {
|
5624
|
-
// image.setParams(g, params);
|
5625
|
-
// }
|
5626
|
-
// return image;
|
5627
|
-
}
|
5628
|
-
}
|
5629
|
-
}
|
5630
|
-
|
5631
|
-
// failed, could not load image after all those attempts
|
5632
|
-
System.err.println("Could not find a method to load " + filename);
|
5633
|
-
return null;
|
5200
|
+
return surface.loadImage(filename, extension);
|
5634
5201
|
}
|
5635
5202
|
|
5636
5203
|
|
@@ -5653,8 +5220,8 @@ public class PApplet implements PConstants {
|
|
5653
5220
|
* loading the image, its width and height will be set to -1. You'll know
|
5654
5221
|
* when the image has loaded properly because its width and height will be
|
5655
5222
|
* greater than 0. Asynchronous image loading (particularly when
|
5656
|
-
* downloading from a server) can dramatically improve performance
|
5657
|
-
*
|
5223
|
+
* downloading from a server) can dramatically improve performance.
|
5224
|
+
* <b>extension</b> parameter is used to determine the image type in
|
5658
5225
|
* cases where the image filename does not end with a proper extension.
|
5659
5226
|
* Specify the extension as the second parameter to <b>requestImage()</b>.
|
5660
5227
|
*
|
@@ -5676,11 +5243,7 @@ public class PApplet implements PConstants {
|
|
5676
5243
|
|
5677
5244
|
// if the image loading thread pool hasn't been created, create it
|
5678
5245
|
if (requestImagePool == null) {
|
5679
|
-
ThreadFactory factory = new
|
5680
|
-
public Thread newThread(Runnable r) {
|
5681
|
-
return new Thread(r, REQUEST_IMAGE_THREAD_PREFIX);
|
5682
|
-
}
|
5683
|
-
};
|
5246
|
+
ThreadFactory factory = r -> new Thread(r, REQUEST_IMAGE_THREAD_PREFIX);
|
5684
5247
|
requestImagePool = Executors.newFixedThreadPool(4, factory);
|
5685
5248
|
}
|
5686
5249
|
requestImagePool.execute(() -> {
|
@@ -5706,250 +5269,6 @@ public class PApplet implements PConstants {
|
|
5706
5269
|
}
|
5707
5270
|
|
5708
5271
|
|
5709
|
-
/**
|
5710
|
-
* Use Java 1.4 ImageIO methods to load an image.
|
5711
|
-
*/
|
5712
|
-
protected PImage loadImageIO(String filename) {
|
5713
|
-
InputStream stream = createInput(filename);
|
5714
|
-
if (stream == null) {
|
5715
|
-
System.err.println("The image " + filename + " could not be found.");
|
5716
|
-
return null;
|
5717
|
-
}
|
5718
|
-
|
5719
|
-
try {
|
5720
|
-
BufferedImage bi = ImageIO.read(stream);
|
5721
|
-
PImage outgoing = new PImage(bi.getWidth(), bi.getHeight());
|
5722
|
-
outgoing.parent = this;
|
5723
|
-
|
5724
|
-
bi.getRGB(0, 0, outgoing.width, outgoing.height,
|
5725
|
-
outgoing.pixels, 0, outgoing.width);
|
5726
|
-
|
5727
|
-
// check the alpha for this image
|
5728
|
-
// was gonna call getType() on the image to see if RGB or ARGB,
|
5729
|
-
// but it's not actually useful, since gif images will come through
|
5730
|
-
// as TYPE_BYTE_INDEXED, which means it'll still have to check for
|
5731
|
-
// the transparency. also, would have to iterate through all the other
|
5732
|
-
// types and guess whether alpha was in there, so.. just gonna stick
|
5733
|
-
// with the old method.
|
5734
|
-
outgoing.checkAlpha();
|
5735
|
-
|
5736
|
-
stream.close();
|
5737
|
-
// return the image
|
5738
|
-
return outgoing;
|
5739
|
-
|
5740
|
-
} catch (Exception e) {
|
5741
|
-
printStackTrace(e);
|
5742
|
-
return null;
|
5743
|
-
}
|
5744
|
-
}
|
5745
|
-
|
5746
|
-
|
5747
|
-
/**
|
5748
|
-
* Targa image loader for RLE-compressed TGA files.
|
5749
|
-
* <p>
|
5750
|
-
* Rewritten for 0115 to read/write RLE-encoded targa images.
|
5751
|
-
* For 0125, non-RLE encoded images are now supported, along with
|
5752
|
-
* images whose y-order is reversed (which is standard for TGA files).
|
5753
|
-
* <p>
|
5754
|
-
* A version of this function is in MovieMaker.java. Any fixes here
|
5755
|
-
* should be applied over in MovieMaker as well.
|
5756
|
-
* <p>
|
5757
|
-
* Known issue with RLE encoding and odd behavior in some apps:
|
5758
|
-
* https://github.com/processing/processing/issues/2096
|
5759
|
-
* Please help!
|
5760
|
-
*/
|
5761
|
-
protected PImage loadImageTGA(String filename) throws IOException {
|
5762
|
-
InputStream is = createInput(filename);
|
5763
|
-
if (is == null) return null;
|
5764
|
-
|
5765
|
-
byte header[] = new byte[18];
|
5766
|
-
int offset = 0;
|
5767
|
-
do {
|
5768
|
-
int count = is.read(header, offset, header.length - offset);
|
5769
|
-
if (count == -1) return null;
|
5770
|
-
offset += count;
|
5771
|
-
} while (offset < 18);
|
5772
|
-
|
5773
|
-
/*
|
5774
|
-
header[2] image type code
|
5775
|
-
2 (0x02) - Uncompressed, RGB images.
|
5776
|
-
3 (0x03) - Uncompressed, black and white images.
|
5777
|
-
10 (0x0A) - Run-length encoded RGB images.
|
5778
|
-
11 (0x0B) - Compressed, black and white images. (grayscale?)
|
5779
|
-
|
5780
|
-
header[16] is the bit depth (8, 24, 32)
|
5781
|
-
|
5782
|
-
header[17] image descriptor (packed bits)
|
5783
|
-
0x20 is 32 = origin upper-left
|
5784
|
-
0x28 is 32 + 8 = origin upper-left + 32 bits
|
5785
|
-
|
5786
|
-
7 6 5 4 3 2 1 0
|
5787
|
-
128 64 32 16 8 4 2 1
|
5788
|
-
*/
|
5789
|
-
|
5790
|
-
int format = 0;
|
5791
|
-
|
5792
|
-
if (((header[2] == 3) || (header[2] == 11)) && // B&W, plus RLE or not
|
5793
|
-
(header[16] == 8) && // 8 bits
|
5794
|
-
((header[17] == 0x8) || (header[17] == 0x28))) { // origin, 32 bit
|
5795
|
-
format = ALPHA;
|
5796
|
-
|
5797
|
-
} else if (((header[2] == 2) || (header[2] == 10)) && // RGB, RLE or not
|
5798
|
-
(header[16] == 24) && // 24 bits
|
5799
|
-
((header[17] == 0x20) || (header[17] == 0))) { // origin
|
5800
|
-
format = RGB;
|
5801
|
-
|
5802
|
-
} else if (((header[2] == 2) || (header[2] == 10)) &&
|
5803
|
-
(header[16] == 32) &&
|
5804
|
-
((header[17] == 0x8) || (header[17] == 0x28))) { // origin, 32
|
5805
|
-
format = ARGB;
|
5806
|
-
}
|
5807
|
-
|
5808
|
-
if (format == 0) {
|
5809
|
-
System.err.println("Unknown .tga file format for " + filename);
|
5810
|
-
//" (" + header[2] + " " +
|
5811
|
-
//(header[16] & 0xff) + " " +
|
5812
|
-
//hex(header[17], 2) + ")");
|
5813
|
-
return null;
|
5814
|
-
}
|
5815
|
-
|
5816
|
-
int w = ((header[13] & 0xff) << 8) + (header[12] & 0xff);
|
5817
|
-
int h = ((header[15] & 0xff) << 8) + (header[14] & 0xff);
|
5818
|
-
PImage outgoing = createImage(w, h, format);
|
5819
|
-
|
5820
|
-
// where "reversed" means upper-left corner (normal for most of
|
5821
|
-
// the modernized world, but "reversed" for the tga spec)
|
5822
|
-
//boolean reversed = (header[17] & 0x20) != 0;
|
5823
|
-
// https://github.com/processing/processing/issues/1682
|
5824
|
-
boolean reversed = (header[17] & 0x20) == 0;
|
5825
|
-
|
5826
|
-
if ((header[2] == 2) || (header[2] == 3)) { // not RLE encoded
|
5827
|
-
if (reversed) {
|
5828
|
-
int index = (h-1) * w;
|
5829
|
-
switch (format) {
|
5830
|
-
case ALPHA:
|
5831
|
-
for (int y = h-1; y >= 0; y--) {
|
5832
|
-
for (int x = 0; x < w; x++) {
|
5833
|
-
outgoing.pixels[index + x] = is.read();
|
5834
|
-
}
|
5835
|
-
index -= w;
|
5836
|
-
}
|
5837
|
-
break;
|
5838
|
-
case RGB:
|
5839
|
-
for (int y = h-1; y >= 0; y--) {
|
5840
|
-
for (int x = 0; x < w; x++) {
|
5841
|
-
outgoing.pixels[index + x] =
|
5842
|
-
is.read() | (is.read() << 8) | (is.read() << 16) |
|
5843
|
-
0xff000000;
|
5844
|
-
}
|
5845
|
-
index -= w;
|
5846
|
-
}
|
5847
|
-
break;
|
5848
|
-
case ARGB:
|
5849
|
-
for (int y = h-1; y >= 0; y--) {
|
5850
|
-
for (int x = 0; x < w; x++) {
|
5851
|
-
outgoing.pixels[index + x] =
|
5852
|
-
is.read() | (is.read() << 8) | (is.read() << 16) |
|
5853
|
-
(is.read() << 24);
|
5854
|
-
}
|
5855
|
-
index -= w;
|
5856
|
-
}
|
5857
|
-
}
|
5858
|
-
} else { // not reversed
|
5859
|
-
int count = w * h;
|
5860
|
-
switch (format) {
|
5861
|
-
case ALPHA:
|
5862
|
-
for (int i = 0; i < count; i++) {
|
5863
|
-
outgoing.pixels[i] = is.read();
|
5864
|
-
}
|
5865
|
-
break;
|
5866
|
-
case RGB:
|
5867
|
-
for (int i = 0; i < count; i++) {
|
5868
|
-
outgoing.pixels[i] =
|
5869
|
-
is.read() | (is.read() << 8) | (is.read() << 16) |
|
5870
|
-
0xff000000;
|
5871
|
-
}
|
5872
|
-
break;
|
5873
|
-
case ARGB:
|
5874
|
-
for (int i = 0; i < count; i++) {
|
5875
|
-
outgoing.pixels[i] =
|
5876
|
-
is.read() | (is.read() << 8) | (is.read() << 16) |
|
5877
|
-
(is.read() << 24);
|
5878
|
-
}
|
5879
|
-
break;
|
5880
|
-
}
|
5881
|
-
}
|
5882
|
-
|
5883
|
-
} else { // header[2] is 10 or 11
|
5884
|
-
int index = 0;
|
5885
|
-
int px[] = outgoing.pixels;
|
5886
|
-
|
5887
|
-
while (index < px.length) {
|
5888
|
-
int num = is.read();
|
5889
|
-
boolean isRLE = (num & 0x80) != 0;
|
5890
|
-
if (isRLE) {
|
5891
|
-
num -= 127; // (num & 0x7F) + 1
|
5892
|
-
int pixel = 0;
|
5893
|
-
switch (format) {
|
5894
|
-
case ALPHA:
|
5895
|
-
pixel = is.read();
|
5896
|
-
break;
|
5897
|
-
case RGB:
|
5898
|
-
pixel = 0xFF000000 |
|
5899
|
-
is.read() | (is.read() << 8) | (is.read() << 16);
|
5900
|
-
//(is.read() << 16) | (is.read() << 8) | is.read();
|
5901
|
-
break;
|
5902
|
-
case ARGB:
|
5903
|
-
pixel = is.read() |
|
5904
|
-
(is.read() << 8) | (is.read() << 16) | (is.read() << 24);
|
5905
|
-
break;
|
5906
|
-
}
|
5907
|
-
for (int i = 0; i < num; i++) {
|
5908
|
-
px[index++] = pixel;
|
5909
|
-
if (index == px.length) break;
|
5910
|
-
}
|
5911
|
-
} else { // write up to 127 bytes as uncompressed
|
5912
|
-
num += 1;
|
5913
|
-
switch (format) {
|
5914
|
-
case ALPHA:
|
5915
|
-
for (int i = 0; i < num; i++) {
|
5916
|
-
px[index++] = is.read();
|
5917
|
-
}
|
5918
|
-
break;
|
5919
|
-
case RGB:
|
5920
|
-
for (int i = 0; i < num; i++) {
|
5921
|
-
px[index++] = 0xFF000000 |
|
5922
|
-
is.read() | (is.read() << 8) | (is.read() << 16);
|
5923
|
-
//(is.read() << 16) | (is.read() << 8) | is.read();
|
5924
|
-
}
|
5925
|
-
break;
|
5926
|
-
case ARGB:
|
5927
|
-
for (int i = 0; i < num; i++) {
|
5928
|
-
px[index++] = is.read() | //(is.read() << 24) |
|
5929
|
-
(is.read() << 8) | (is.read() << 16) | (is.read() << 24);
|
5930
|
-
//(is.read() << 16) | (is.read() << 8) | is.read();
|
5931
|
-
}
|
5932
|
-
break;
|
5933
|
-
}
|
5934
|
-
}
|
5935
|
-
}
|
5936
|
-
|
5937
|
-
if (!reversed) {
|
5938
|
-
int[] temp = new int[w];
|
5939
|
-
for (int y = 0; y < h/2; y++) {
|
5940
|
-
int z = (h-1) - y;
|
5941
|
-
System.arraycopy(px, y*w, temp, 0, w);
|
5942
|
-
System.arraycopy(px, z*w, px, y*w, w);
|
5943
|
-
System.arraycopy(temp, 0, px, z*w, w);
|
5944
|
-
}
|
5945
|
-
}
|
5946
|
-
}
|
5947
|
-
is.close();
|
5948
|
-
return outgoing;
|
5949
|
-
}
|
5950
|
-
|
5951
|
-
|
5952
|
-
|
5953
5272
|
//////////////////////////////////////////////////////////////
|
5954
5273
|
|
5955
5274
|
// DATA I/O
|
@@ -6004,13 +5323,7 @@ public class PApplet implements PConstants {
|
|
6004
5323
|
|
6005
5324
|
// can't use catch-all exception, since it might catch the
|
6006
5325
|
// RuntimeException about the incorrect case sensitivity
|
6007
|
-
} catch (IOException e) {
|
6008
|
-
throw new RuntimeException(e);
|
6009
|
-
|
6010
|
-
} catch (ParserConfigurationException e) {
|
6011
|
-
throw new RuntimeException(e);
|
6012
|
-
|
6013
|
-
} catch (SAXException e) {
|
5326
|
+
} catch (IOException | ParserConfigurationException | SAXException e) {
|
6014
5327
|
throw new RuntimeException(e);
|
6015
5328
|
}
|
6016
5329
|
}
|
@@ -6241,10 +5554,9 @@ public class PApplet implements PConstants {
|
|
6241
5554
|
String optionStr = Table.extensionOptions(true, filename, options);
|
6242
5555
|
String[] optionList = trim(split(optionStr, ','));
|
6243
5556
|
|
6244
|
-
Table dictionary = null;
|
6245
5557
|
for (String opt : optionList) {
|
6246
5558
|
if (opt.startsWith("dictionary=")) {
|
6247
|
-
dictionary = loadTable(opt.substring(opt.indexOf('=') + 1), "tsv");
|
5559
|
+
Table dictionary = loadTable(opt.substring(opt.indexOf('=') + 1), "tsv");
|
6248
5560
|
return dictionary.typedParse(createInput(filename), optionStr);
|
6249
5561
|
}
|
6250
5562
|
}
|
@@ -6314,19 +5626,19 @@ public class PApplet implements PConstants {
|
|
6314
5626
|
* fonts must be located in the data directory of the current sketch. To
|
6315
5627
|
* create a font to use with Processing, select "Create Font..." from the
|
6316
5628
|
* Tools menu. This will create a font in the format Processing requires
|
6317
|
-
* and also adds it to the current sketch's data directory
|
6318
|
-
*
|
5629
|
+
* and also adds it to the current sketch's data directory.
|
5630
|
+
*
|
6319
5631
|
* Like <b>loadImage()</b> and other functions that load data, the
|
6320
5632
|
* <b>loadFont()</b> function should not be used inside <b>draw()</b>,
|
6321
5633
|
* because it will slow down the sketch considerably, as the font will be
|
6322
|
-
* re-loaded from the disk (or network) on each frame
|
6323
|
-
*
|
5634
|
+
* re-loaded from the disk (or network) on each frame.
|
5635
|
+
*
|
6324
5636
|
* For most renderers, Processing displays fonts using the .vlw font
|
6325
5637
|
* format, which uses images for each letter, rather than defining them
|
6326
5638
|
* through vector data. When <b>hint(ENABLE_NATIVE_FONTS)</b> is used with
|
6327
5639
|
* the JAVA2D renderer, the native version of a font will be used if it is
|
6328
|
-
* installed on the user's machine
|
6329
|
-
*
|
5640
|
+
* installed on the user's machine.
|
5641
|
+
*
|
6330
5642
|
* Using <b>createFont()</b> (instead of loadFont) enables vector data to
|
6331
5643
|
* be used with the JAVA2D (default) renderer setting. This can be helpful
|
6332
5644
|
* when many font sizes are needed, or when using any renderer based on
|
@@ -6374,7 +5686,7 @@ public class PApplet implements PConstants {
|
|
6374
5686
|
* file inside the sketches "data" folder. This function is an advanced
|
6375
5687
|
* feature for precise control. On most occasions you should create fonts
|
6376
5688
|
* through selecting "Create Font..." from the Tools menu.
|
6377
|
-
*
|
5689
|
+
*
|
6378
5690
|
* Use the <b>PFont.list()</b> method to first determine the names for the
|
6379
5691
|
* fonts recognized by the computer and are compatible with this function.
|
6380
5692
|
* Because of limitations in Java, not all fonts can be used and some might
|
@@ -6384,12 +5696,12 @@ public class PApplet implements PConstants {
|
|
6384
5696
|
* because other people might not have the font installed on their
|
6385
5697
|
* computer. Only fonts that can legally be distributed should be included
|
6386
5698
|
* with a sketch.
|
6387
|
-
*
|
5699
|
+
*
|
6388
5700
|
* The <b>size</b> parameter states the font size you want to generate. The
|
6389
5701
|
* <b>smooth</b> parameter specifies if the font should be antialiased or
|
6390
5702
|
* not, and the <b>charset</b> parameter is an array of chars that
|
6391
5703
|
* specifies the characters to generate.
|
6392
|
-
*
|
5704
|
+
*
|
6393
5705
|
* This function creates a bitmapped version of a font in the same manner
|
6394
5706
|
* as the Create Font tool. It loads a font by name, and converts it to a
|
6395
5707
|
* series of images based on the size of the font. When possible, the
|
@@ -6454,25 +5766,6 @@ public class PApplet implements PConstants {
|
|
6454
5766
|
*/
|
6455
5767
|
|
6456
5768
|
|
6457
|
-
static private boolean lookAndFeelCheck;
|
6458
|
-
|
6459
|
-
/**
|
6460
|
-
* Initialize the Look & Feel if it hasn't been already.
|
6461
|
-
* Call this before using any Swing-related code in PApplet methods.
|
6462
|
-
*/
|
6463
|
-
static private void checkLookAndFeel() {
|
6464
|
-
if (!lookAndFeelCheck) {
|
6465
|
-
if (platform == WINDOWS) {
|
6466
|
-
// Windows is defaulting to Metal or something else awful.
|
6467
|
-
// Which also is not scaled properly with HiDPI interfaces.
|
6468
|
-
try {
|
6469
|
-
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
6470
|
-
} catch (Exception e) { }
|
6471
|
-
}
|
6472
|
-
lookAndFeelCheck = true;
|
6473
|
-
}
|
6474
|
-
}
|
6475
|
-
|
6476
5769
|
/**
|
6477
5770
|
* Open a platform-specific file chooser dialog to select a file for input.
|
6478
5771
|
* After the selection is made, the selected File will be passed to the
|
@@ -6514,10 +5807,12 @@ public class PApplet implements PConstants {
|
|
6514
5807
|
|
6515
5808
|
public void selectInput(String prompt, String callback,
|
6516
5809
|
File file, Object callbackObject) {
|
6517
|
-
selectInput(prompt, callback, file, callbackObject, null, this);
|
5810
|
+
//selectInput(prompt, callback, file, callbackObject, null, this);
|
5811
|
+
surface.selectInput(prompt, callback, file, callbackObject);
|
6518
5812
|
}
|
6519
5813
|
|
6520
5814
|
|
5815
|
+
/*
|
6521
5816
|
static public void selectInput(String prompt, String callbackMethod,
|
6522
5817
|
File file, Object callbackObject, Frame parent,
|
6523
5818
|
PApplet sketch) {
|
@@ -6529,6 +5824,7 @@ public class PApplet implements PConstants {
|
|
6529
5824
|
File file, Object callbackObject, Frame parent) {
|
6530
5825
|
selectImpl(prompt, callbackMethod, file, callbackObject, parent, FileDialog.LOAD, null);
|
6531
5826
|
}
|
5827
|
+
*/
|
6532
5828
|
|
6533
5829
|
|
6534
5830
|
/**
|
@@ -6550,10 +5846,12 @@ public class PApplet implements PConstants {
|
|
6550
5846
|
|
6551
5847
|
public void selectOutput(String prompt, String callback,
|
6552
5848
|
File file, Object callbackObject) {
|
6553
|
-
selectOutput(prompt, callback, file, callbackObject, null, this);
|
5849
|
+
//selectOutput(prompt, callback, file, callbackObject, null, this);
|
5850
|
+
surface.selectOutput(prompt, callback, file, callbackObject);
|
6554
5851
|
}
|
6555
5852
|
|
6556
5853
|
|
5854
|
+
/*
|
6557
5855
|
static public void selectOutput(String prompt, String callbackMethod,
|
6558
5856
|
File file, Object callbackObject, Frame parent) {
|
6559
5857
|
selectImpl(prompt, callbackMethod, file, callbackObject, parent, FileDialog.SAVE, null);
|
@@ -6621,6 +5919,7 @@ public class PApplet implements PConstants {
|
|
6621
5919
|
}
|
6622
5920
|
});
|
6623
5921
|
}
|
5922
|
+
*/
|
6624
5923
|
|
6625
5924
|
|
6626
5925
|
/**
|
@@ -6642,10 +5941,12 @@ public class PApplet implements PConstants {
|
|
6642
5941
|
|
6643
5942
|
public void selectFolder(String prompt, String callback,
|
6644
5943
|
File file, Object callbackObject) {
|
6645
|
-
selectFolder(prompt, callback, file, callbackObject, null, this);
|
5944
|
+
//selectFolder(prompt, callback, file, callbackObject, null, this);
|
5945
|
+
surface.selectFolder(prompt, callback, file, callbackObject);
|
6646
5946
|
}
|
6647
5947
|
|
6648
5948
|
|
5949
|
+
/*
|
6649
5950
|
static public void selectFolder(final String prompt,
|
6650
5951
|
final String callbackMethod,
|
6651
5952
|
final File defaultSelection,
|
@@ -6671,7 +5972,7 @@ public class PApplet implements PConstants {
|
|
6671
5972
|
(sketch.g instanceof PGraphicsOpenGL) && (platform == WINDOWS);
|
6672
5973
|
if (hide) sketch.surface.setVisible(false);
|
6673
5974
|
|
6674
|
-
if (platform ==
|
5975
|
+
if (platform == MACOS && useNativeSelect != false) {
|
6675
5976
|
FileDialog fileDialog =
|
6676
5977
|
new FileDialog(parentFrame, prompt, FileDialog.LOAD);
|
6677
5978
|
if (defaultSelection != null) {
|
@@ -6704,16 +6005,17 @@ public class PApplet implements PConstants {
|
|
6704
6005
|
}
|
6705
6006
|
});
|
6706
6007
|
}
|
6008
|
+
*/
|
6707
6009
|
|
6708
6010
|
|
6709
|
-
static
|
6710
|
-
|
6711
|
-
|
6011
|
+
static public void selectCallback(File selectedFile,
|
6012
|
+
String callbackMethod,
|
6013
|
+
Object callbackObject) {
|
6712
6014
|
try {
|
6713
6015
|
Class<?> callbackClass = callbackObject.getClass();
|
6714
6016
|
Method selectMethod =
|
6715
|
-
callbackClass.getMethod(callbackMethod,
|
6716
|
-
selectMethod.invoke(callbackObject,
|
6017
|
+
callbackClass.getMethod(callbackMethod, File.class);
|
6018
|
+
selectMethod.invoke(callbackObject, selectedFile);
|
6717
6019
|
|
6718
6020
|
} catch (IllegalAccessException iae) {
|
6719
6021
|
System.err.println(callbackMethod + "() must be public");
|
@@ -6727,7 +6029,6 @@ public class PApplet implements PConstants {
|
|
6727
6029
|
}
|
6728
6030
|
|
6729
6031
|
|
6730
|
-
|
6731
6032
|
//////////////////////////////////////////////////////////////
|
6732
6033
|
|
6733
6034
|
// LISTING DIRECTORIES
|
@@ -6891,7 +6192,7 @@ public class PApplet implements PConstants {
|
|
6891
6192
|
* Creates a <b>BufferedReader</b> object that can be used to read files
|
6892
6193
|
* line-by-line as individual <b>String</b> objects. This is the complement
|
6893
6194
|
* to the <b>createWriter()</b> function.
|
6894
|
-
*
|
6195
|
+
*
|
6895
6196
|
* Starting with Processing release 0134, all files loaded and saved by the
|
6896
6197
|
* Processing API use UTF-8 encoding. In previous releases, the default
|
6897
6198
|
* encoding for your platform was used, which causes problems when files
|
@@ -6967,7 +6268,7 @@ public class PApplet implements PConstants {
|
|
6967
6268
|
* to write to it. For the file to be made correctly, it should be flushed
|
6968
6269
|
* and must be closed with its <b>flush()</b> and <b>close()</b> methods
|
6969
6270
|
* (see above example).
|
6970
|
-
*
|
6271
|
+
*
|
6971
6272
|
* Starting with Processing release 0134, all files loaded and saved by the
|
6972
6273
|
* Processing API use UTF-8 encoding. In previous releases, the default
|
6973
6274
|
* encoding for your platform was used, which causes problems when files
|
@@ -7035,28 +6336,28 @@ public class PApplet implements PConstants {
|
|
7035
6336
|
* It's useful if you want to use the facilities provided by PApplet to
|
7036
6337
|
* easily open files from the data folder or from a URL, but want an
|
7037
6338
|
* InputStream object so that you can use other parts of Java to take more
|
7038
|
-
* control of how the stream is read
|
7039
|
-
*
|
7040
|
-
* The filename passed in can be
|
7041
|
-
* - A URL, for instance <b>openStream("http://processing.org/")</b
|
7042
|
-
* - A file in the sketch's <b>data</b> folder
|
6339
|
+
* control of how the stream is read.
|
6340
|
+
*
|
6341
|
+
* The filename passed in can be:
|
6342
|
+
* - A URL, for instance <b>openStream("http://processing.org/")</b>
|
6343
|
+
* - A file in the sketch's <b>data</b> folder
|
7043
6344
|
* - The full path to a file to be opened locally (when running as an
|
7044
|
-
* application)
|
7045
|
-
*
|
6345
|
+
* application)
|
6346
|
+
*
|
7046
6347
|
* If the requested item doesn't exist, null is returned. If not online,
|
7047
6348
|
* this will also check to see if the user is asking for a file whose name
|
7048
6349
|
* isn't properly capitalized. If capitalization is different, an error
|
7049
6350
|
* will be printed to the console. This helps prevent issues that appear
|
7050
6351
|
* when a sketch is exported to the web, where case sensitivity matters, as
|
7051
6352
|
* opposed to running from inside the Processing Development Environment on
|
7052
|
-
* Windows or Mac OS, where case sensitivity is preserved but ignored
|
7053
|
-
*
|
6353
|
+
* Windows or Mac OS, where case sensitivity is preserved but ignored.
|
6354
|
+
*
|
7054
6355
|
* If the file ends with <b>.gz</b>, the stream will automatically be gzip
|
7055
6356
|
* decompressed. If you don't want the automatic decompression, use the
|
7056
6357
|
* related function <b>createInputRaw()</b>.
|
7057
|
-
*
|
7058
|
-
* In earlier releases, this function was called <b>openStream()</b
|
7059
|
-
*
|
6358
|
+
*
|
6359
|
+
* In earlier releases, this function was called <b>openStream()</b>.
|
6360
|
+
*
|
7060
6361
|
*
|
7061
6362
|
* ( end auto-generated )
|
7062
6363
|
*
|
@@ -7173,7 +6474,7 @@ public class PApplet implements PConstants {
|
|
7173
6474
|
}
|
7174
6475
|
}
|
7175
6476
|
|
7176
|
-
InputStream stream
|
6477
|
+
InputStream stream;
|
7177
6478
|
|
7178
6479
|
// Moved this earlier than the getResourceAsStream() checks, because
|
7179
6480
|
// calling getResourceAsStream() on a directory lists its contents.
|
@@ -7207,17 +6508,15 @@ public class PApplet implements PConstants {
|
|
7207
6508
|
filename + ". Rename the file " +
|
7208
6509
|
"or change your code.");
|
7209
6510
|
}
|
7210
|
-
} catch (IOException
|
6511
|
+
} catch (IOException ignored) { }
|
7211
6512
|
}
|
7212
6513
|
|
7213
6514
|
// if this file is ok, may as well just load it
|
7214
|
-
|
7215
|
-
if (stream != null) return stream;
|
6515
|
+
return new FileInputStream(file);
|
7216
6516
|
|
7217
6517
|
// have to break these out because a general Exception might
|
7218
6518
|
// catch the RuntimeException being thrown above
|
7219
|
-
} catch (IOException
|
7220
|
-
} catch (SecurityException se) { }
|
6519
|
+
} catch (IOException | SecurityException ignored) { }
|
7221
6520
|
|
7222
6521
|
// Using getClassLoader() prevents java from converting dots
|
7223
6522
|
// to slashes or requiring a slash at the beginning.
|
@@ -7255,21 +6554,18 @@ public class PApplet implements PConstants {
|
|
7255
6554
|
// an application, or as a signed applet
|
7256
6555
|
try { // first try to catch any security exceptions
|
7257
6556
|
try {
|
7258
|
-
|
7259
|
-
|
7260
|
-
} catch (IOException e2) { }
|
6557
|
+
return new FileInputStream(dataPath(filename));
|
6558
|
+
} catch (IOException ignored) { }
|
7261
6559
|
|
7262
6560
|
try {
|
7263
|
-
|
7264
|
-
|
7265
|
-
} catch (Exception e) { } // ignored
|
6561
|
+
return new FileInputStream(sketchPath(filename));
|
6562
|
+
} catch (Exception ignored) { }
|
7266
6563
|
|
7267
6564
|
try {
|
7268
|
-
|
7269
|
-
|
7270
|
-
} catch (IOException e1) { }
|
6565
|
+
return new FileInputStream(filename);
|
6566
|
+
} catch (IOException ignored) { }
|
7271
6567
|
|
7272
|
-
} catch (SecurityException
|
6568
|
+
} catch (SecurityException ignored) { } // online, whups
|
7273
6569
|
|
7274
6570
|
} catch (Exception e) {
|
7275
6571
|
printStackTrace(e);
|
@@ -7311,8 +6607,8 @@ public class PApplet implements PConstants {
|
|
7311
6607
|
*
|
7312
6608
|
* Reads the contents of a file or url and places it in a byte array. If a
|
7313
6609
|
* file is specified, it must be located in the sketch's "data"
|
7314
|
-
* directory/folder
|
7315
|
-
*
|
6610
|
+
* directory/folder.
|
6611
|
+
*
|
7316
6612
|
* The filename parameter can also be a URL to a file found online. For
|
7317
6613
|
* security reasons, a Processing sketch found online can only download
|
7318
6614
|
* files from the same server from which it came. Getting around this
|
@@ -7361,7 +6657,7 @@ public class PApplet implements PConstants {
|
|
7361
6657
|
}
|
7362
6658
|
|
7363
6659
|
if (input != null) {
|
7364
|
-
byte[] buffer
|
6660
|
+
byte[] buffer;
|
7365
6661
|
if (length != -1) {
|
7366
6662
|
buffer = new byte[length];
|
7367
6663
|
int count;
|
@@ -7522,20 +6818,20 @@ public class PApplet implements PConstants {
|
|
7522
6818
|
*
|
7523
6819
|
* Reads the contents of a file or url and creates a String array of its
|
7524
6820
|
* individual lines. If a file is specified, it must be located in the
|
7525
|
-
* sketch's "data" directory/folder
|
7526
|
-
*
|
6821
|
+
* sketch's "data" directory/folder.
|
6822
|
+
*
|
7527
6823
|
* The filename parameter can also be a URL to a file found online. For
|
7528
6824
|
* security reasons, a Processing sketch found online can only download
|
7529
6825
|
* files from the same server from which it came. Getting around this
|
7530
6826
|
* restriction requires a <a
|
7531
6827
|
* href="http://wiki.processing.org/w/Sign_an_Applet">signed applet</a>.
|
7532
|
-
*
|
6828
|
+
*
|
7533
6829
|
* If the file is not available or an error occurs, <b>null</b> will be
|
7534
6830
|
* returned and an error message will be printed to the console. The error
|
7535
6831
|
* message does not halt the program, however the null value may cause a
|
7536
6832
|
* NullPointerException if your code does not check whether the value
|
7537
6833
|
* returned is null.
|
7538
|
-
*
|
6834
|
+
*
|
7539
6835
|
* Starting with Processing release 0134, all files loaded and saved by the
|
7540
6836
|
* Processing API use UTF-8 encoding. In previous releases, the default
|
7541
6837
|
* encoding for your platform was used, which causes problems when files
|
@@ -7584,25 +6880,20 @@ public class PApplet implements PConstants {
|
|
7584
6880
|
* @nowebref
|
7585
6881
|
*/
|
7586
6882
|
static public String[] loadStrings(InputStream input) {
|
7587
|
-
|
7588
|
-
BufferedReader
|
7589
|
-
|
7590
|
-
return loadStrings(reader);
|
7591
|
-
} catch (IOException e) {
|
7592
|
-
e.printStackTrace();
|
7593
|
-
}
|
7594
|
-
return null;
|
6883
|
+
BufferedReader reader =
|
6884
|
+
new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
|
6885
|
+
return loadStrings(reader);
|
7595
6886
|
}
|
7596
6887
|
|
7597
6888
|
|
7598
6889
|
static public String[] loadStrings(BufferedReader reader) {
|
7599
6890
|
try {
|
7600
|
-
String
|
6891
|
+
String[] lines = new String[100];
|
7601
6892
|
int lineCount = 0;
|
7602
|
-
String line
|
6893
|
+
String line;
|
7603
6894
|
while ((line = reader.readLine()) != null) {
|
7604
6895
|
if (lineCount == lines.length) {
|
7605
|
-
String
|
6896
|
+
String[] temp = new String[lineCount << 1];
|
7606
6897
|
System.arraycopy(lines, 0, temp, 0, lineCount);
|
7607
6898
|
lines = temp;
|
7608
6899
|
}
|
@@ -7615,7 +6906,7 @@ public class PApplet implements PConstants {
|
|
7615
6906
|
}
|
7616
6907
|
|
7617
6908
|
// resize array to appropriate amount for these lines
|
7618
|
-
String
|
6909
|
+
String[] output = new String[lineCount];
|
7619
6910
|
System.arraycopy(lines, 0, output, 0, lineCount);
|
7620
6911
|
return output;
|
7621
6912
|
|
@@ -7639,16 +6930,16 @@ public class PApplet implements PConstants {
|
|
7639
6930
|
* Similar to <b>createInput()</b>, this creates a Java <b>OutputStream</b>
|
7640
6931
|
* for a given filename or path. The file will be created in the sketch
|
7641
6932
|
* folder, or in the same folder as an exported application.
|
7642
|
-
*
|
6933
|
+
*
|
7643
6934
|
* If the path does not exist, intermediate folders will be created. If an
|
7644
6935
|
* exception occurs, it will be printed to the console, and <b>null</b>
|
7645
6936
|
* will be returned.
|
7646
|
-
*
|
6937
|
+
*
|
7647
6938
|
* This function is a convenience over the Java approach that requires you
|
7648
6939
|
* to 1) create a FileOutputStream object, 2) determine the exact file
|
7649
6940
|
* location, and 3) handle exceptions. Exceptions are handled internally by
|
7650
6941
|
* the function, which is more appropriate for "sketch" projects.
|
7651
|
-
*
|
6942
|
+
*
|
7652
6943
|
* If the output filename ends with <b>.gz</b>, the output will be
|
7653
6944
|
* automatically GZIP compressed as it is written.
|
7654
6945
|
*
|
@@ -7686,8 +6977,8 @@ public class PApplet implements PConstants {
|
|
7686
6977
|
*
|
7687
6978
|
* Save the contents of a stream to a file in the sketch folder. This is
|
7688
6979
|
* basically <b>saveBytes(blah, loadBytes())</b>, but done more efficiently
|
7689
|
-
* (and with less confusing syntax)
|
7690
|
-
*
|
6980
|
+
* (and with less confusing syntax).
|
6981
|
+
*
|
7691
6982
|
* When using the <b>targetFile</b> parameter, it writes to a <b>File</b>
|
7692
6983
|
* object for greater control over the file location. (Note that unlike
|
7693
6984
|
* some other functions, this will not automatically compress or uncompress
|
@@ -7707,7 +6998,7 @@ public class PApplet implements PConstants {
|
|
7707
6998
|
/**
|
7708
6999
|
* Identical to the other saveStream(), but writes to a File
|
7709
7000
|
* object, for greater control over the file location.
|
7710
|
-
*
|
7001
|
+
*
|
7711
7002
|
* Note that unlike other api methods, this will not automatically
|
7712
7003
|
* compress or uncompress gzip files.
|
7713
7004
|
*/
|
@@ -7735,24 +7026,23 @@ public class PApplet implements PConstants {
|
|
7735
7026
|
|
7736
7027
|
saveStream(targetStream, source);
|
7737
7028
|
targetStream.close();
|
7738
|
-
targetStream = null;
|
7739
7029
|
|
7740
7030
|
if (target.exists()) {
|
7741
7031
|
if (!target.delete()) {
|
7742
|
-
System.err.println("Could not replace " +
|
7743
|
-
target.getAbsolutePath() + ".");
|
7032
|
+
System.err.println("Could not replace " + target);
|
7744
7033
|
}
|
7745
7034
|
}
|
7746
7035
|
if (!tempFile.renameTo(target)) {
|
7747
|
-
System.err.println("Could not rename temporary file " +
|
7748
|
-
tempFile.getAbsolutePath());
|
7036
|
+
System.err.println("Could not rename temporary file " + tempFile);
|
7749
7037
|
return false;
|
7750
7038
|
}
|
7751
7039
|
return true;
|
7752
7040
|
|
7753
7041
|
} catch (IOException e) {
|
7754
7042
|
if (tempFile != null) {
|
7755
|
-
tempFile.delete()
|
7043
|
+
if (!tempFile.delete()) {
|
7044
|
+
System.err.println("Could not rename temporary file " + tempFile);
|
7045
|
+
}
|
7756
7046
|
}
|
7757
7047
|
e.printStackTrace();
|
7758
7048
|
return false;
|
@@ -7783,8 +7073,8 @@ public class PApplet implements PConstants {
|
|
7783
7073
|
* Opposite of <b>loadBytes()</b>, will write an entire array of bytes to a
|
7784
7074
|
* file. The data is saved in binary format. This file is saved to the
|
7785
7075
|
* sketch's folder, which is opened by selecting "Show sketch folder" from
|
7786
|
-
* the "Sketch" menu
|
7787
|
-
*
|
7076
|
+
* the "Sketch" menu.
|
7077
|
+
*
|
7788
7078
|
* It is not possible to use saveXxxxx() functions inside a web browser
|
7789
7079
|
* unless the sketch is <a
|
7790
7080
|
* href="http://wiki.processing.org/w/Sign_an_Applet">signed applet</A>. To
|
@@ -7816,7 +7106,9 @@ public class PApplet implements PConstants {
|
|
7816
7106
|
static private File createTempFile(File file) throws IOException {
|
7817
7107
|
File parentDir = file.getParentFile();
|
7818
7108
|
if (!parentDir.exists()) {
|
7819
|
-
parentDir.mkdirs()
|
7109
|
+
if (!parentDir.mkdirs()) {
|
7110
|
+
throw new IOException("Could not make directories for " + parentDir);
|
7111
|
+
}
|
7820
7112
|
}
|
7821
7113
|
String name = file.getName();
|
7822
7114
|
String prefix;
|
@@ -7847,25 +7139,29 @@ public class PApplet implements PConstants {
|
|
7847
7139
|
tempFile = createTempFile(file);
|
7848
7140
|
|
7849
7141
|
OutputStream output = createOutput(tempFile);
|
7850
|
-
|
7851
|
-
|
7852
|
-
|
7142
|
+
if (output != null) {
|
7143
|
+
saveBytes(output, data);
|
7144
|
+
output.close();
|
7145
|
+
} else {
|
7146
|
+
System.err.println("Could not write to " + tempFile);
|
7147
|
+
}
|
7853
7148
|
|
7854
7149
|
if (file.exists()) {
|
7855
7150
|
if (!file.delete()) {
|
7856
|
-
System.err.println("Could not replace " + file
|
7151
|
+
System.err.println("Could not replace " + file);
|
7857
7152
|
}
|
7858
7153
|
}
|
7859
7154
|
|
7860
7155
|
if (!tempFile.renameTo(file)) {
|
7861
|
-
System.err.println("Could not rename temporary file " +
|
7862
|
-
tempFile.getAbsolutePath());
|
7156
|
+
System.err.println("Could not rename temporary file " + tempFile);
|
7863
7157
|
}
|
7864
7158
|
|
7865
7159
|
} catch (IOException e) {
|
7866
7160
|
System.err.println("error saving bytes to " + file);
|
7867
7161
|
if (tempFile != null) {
|
7868
|
-
tempFile.delete()
|
7162
|
+
if (!tempFile.delete()) {
|
7163
|
+
System.err.println("Could not delete temporary file " + tempFile);
|
7164
|
+
}
|
7869
7165
|
}
|
7870
7166
|
e.printStackTrace();
|
7871
7167
|
}
|
@@ -7894,14 +7190,14 @@ public class PApplet implements PConstants {
|
|
7894
7190
|
*
|
7895
7191
|
* Writes an array of strings to a file, one line per string. This file is
|
7896
7192
|
* saved to the sketch's folder, which is opened by selecting "Show sketch
|
7897
|
-
* folder" from the "Sketch" menu
|
7898
|
-
*
|
7193
|
+
* folder" from the "Sketch" menu.
|
7194
|
+
*
|
7899
7195
|
* It is not possible to use saveXxxxx() functions inside a web browser
|
7900
7196
|
* unless the sketch is <a
|
7901
7197
|
* href="http://wiki.processing.org/w/Sign_an_Applet">signed applet</A>. To
|
7902
7198
|
* save a file back to a server, see the <a
|
7903
7199
|
* href="http://wiki.processing.org/w/Saving_files_to_a_web-server">save to
|
7904
|
-
* web</A> code snippet on the Processing Wiki
|
7200
|
+
* web</A> code snippet on the Processing Wiki.
|
7905
7201
|
* <br/ >
|
7906
7202
|
* Starting with Processing 1.0, all files loaded and saved by the
|
7907
7203
|
* Processing API use UTF-8 encoding. In previous releases, the default
|
@@ -7916,7 +7212,7 @@ public class PApplet implements PConstants {
|
|
7916
7212
|
* @see PApplet#loadBytes(String)
|
7917
7213
|
* @see PApplet#saveBytes(String, byte[])
|
7918
7214
|
*/
|
7919
|
-
public void saveStrings(String filename, String data
|
7215
|
+
public void saveStrings(String filename, String[] data) {
|
7920
7216
|
saveStrings(saveFile(filename), data);
|
7921
7217
|
}
|
7922
7218
|
|
@@ -7924,7 +7220,7 @@ public class PApplet implements PConstants {
|
|
7924
7220
|
/**
|
7925
7221
|
* @nowebref
|
7926
7222
|
*/
|
7927
|
-
static public void saveStrings(File file, String data
|
7223
|
+
static public void saveStrings(File file, String[] data) {
|
7928
7224
|
saveStrings(createOutput(file), data);
|
7929
7225
|
}
|
7930
7226
|
|
@@ -7960,13 +7256,7 @@ public class PApplet implements PConstants {
|
|
7960
7256
|
|
7961
7257
|
// Workaround for bug in Java for OS X from Oracle (7u51)
|
7962
7258
|
// https://github.com/processing/processing/issues/2181
|
7963
|
-
|
7964
|
-
if (jarPath.contains("Contents/Java/")) {
|
7965
|
-
String appPath = jarPath.substring(0, jarPath.indexOf(".app") + 4);
|
7966
|
-
File containingFolder = new File(appPath).getParentFile();
|
7967
|
-
folder = containingFolder.getAbsolutePath();
|
7968
|
-
}
|
7969
|
-
} else {
|
7259
|
+
|
7970
7260
|
// Working directory may not be set properly, try some options
|
7971
7261
|
// https://github.com/processing/processing/issues/2195
|
7972
7262
|
if (jarPath.contains("/lib/")) {
|
@@ -7974,8 +7264,7 @@ public class PApplet implements PConstants {
|
|
7974
7264
|
folder = new File(jarPath, "../..").getCanonicalPath();
|
7975
7265
|
}
|
7976
7266
|
}
|
7977
|
-
|
7978
|
-
e.printStackTrace();
|
7267
|
+
catch (IOException | URISyntaxException e) {
|
7979
7268
|
}
|
7980
7269
|
return folder;
|
7981
7270
|
}
|
@@ -7993,11 +7282,11 @@ public class PApplet implements PConstants {
|
|
7993
7282
|
* Prepend the sketch folder path to the filename (or path) that is
|
7994
7283
|
* passed in. External libraries should use this function to save to
|
7995
7284
|
* the sketch folder.
|
7996
|
-
*
|
7285
|
+
*
|
7997
7286
|
* Note that when running as an applet inside a web browser,
|
7998
7287
|
* the sketchPath will be set to null, because security restrictions
|
7999
7288
|
* prevent applets from accessing that information.
|
8000
|
-
*
|
7289
|
+
*
|
8001
7290
|
* This will also cause an error if the sketch is not inited properly,
|
8002
7291
|
* meaning that init() was never called on the PApplet when hosted
|
8003
7292
|
* my some other main() or by other code. For proper use of init(),
|
@@ -8026,7 +7315,7 @@ public class PApplet implements PConstants {
|
|
8026
7315
|
/**
|
8027
7316
|
* Returns a path inside the applet folder to save to. Like sketchPath(),
|
8028
7317
|
* but creates any in-between folders so that things save properly.
|
8029
|
-
*
|
7318
|
+
*
|
8030
7319
|
* All saveXxxx() functions use the path to the sketch folder, rather than
|
8031
7320
|
* its data folder. Once exported, the data folder will be found inside the
|
8032
7321
|
* jar file of the exported application or applet. In this case, it's not
|
@@ -8054,17 +7343,15 @@ public class PApplet implements PConstants {
|
|
8054
7343
|
|
8055
7344
|
static File desktopFolder;
|
8056
7345
|
|
8057
|
-
/** Not a supported function. For testing use only. */
|
8058
7346
|
static public File desktopFile(String what) {
|
8059
7347
|
if (desktopFolder == null) {
|
8060
7348
|
// Should work on Linux and OS X (on OS X, even with the localized version).
|
8061
7349
|
desktopFolder = new File(System.getProperty("user.home"), "Desktop");
|
8062
7350
|
if (!desktopFolder.exists()) {
|
8063
|
-
if (platform == WINDOWS) {
|
8064
|
-
|
8065
|
-
desktopFolder = filesys.getHomeDirectory();
|
7351
|
+
if (platform == WINDOWS && !disableAWT) {
|
7352
|
+
desktopFolder = ShimAWT.getWindowsDesktop();
|
8066
7353
|
} else {
|
8067
|
-
throw new UnsupportedOperationException("Could not find a suitable
|
7354
|
+
throw new UnsupportedOperationException("Could not find a suitable Desktop foldder");
|
8068
7355
|
}
|
8069
7356
|
}
|
8070
7357
|
}
|
@@ -8072,7 +7359,6 @@ public class PApplet implements PConstants {
|
|
8072
7359
|
}
|
8073
7360
|
|
8074
7361
|
|
8075
|
-
/** Not a supported function. For testing use only. */
|
8076
7362
|
static public String desktopPath(String what) {
|
8077
7363
|
return desktopFile(what).getAbsolutePath();
|
8078
7364
|
}
|
@@ -8208,11 +7494,7 @@ public class PApplet implements PConstants {
|
|
8208
7494
|
// using toURI() and URI.toURL()."
|
8209
7495
|
// https://docs.oracle.com/javase/8/docs/api/java/net/URL.html
|
8210
7496
|
static public String urlDecode(String str) {
|
8211
|
-
|
8212
|
-
return URLDecoder.decode(str, "UTF-8");
|
8213
|
-
} catch (UnsupportedEncodingException e) { // safe per the JDK source
|
8214
|
-
return null;
|
8215
|
-
}
|
7497
|
+
return URLDecoder.decode(str, StandardCharsets.UTF_8);
|
8216
7498
|
}
|
8217
7499
|
|
8218
7500
|
|
@@ -8238,7 +7520,7 @@ public class PApplet implements PConstants {
|
|
8238
7520
|
* @param list array to sort
|
8239
7521
|
* @see PApplet#reverse(boolean[])
|
8240
7522
|
*/
|
8241
|
-
static public byte[] sort(byte list
|
7523
|
+
static public byte[] sort(byte[] list) {
|
8242
7524
|
return sort(list, list.length);
|
8243
7525
|
}
|
8244
7526
|
|
@@ -8252,7 +7534,7 @@ public class PApplet implements PConstants {
|
|
8252
7534
|
return outgoing;
|
8253
7535
|
}
|
8254
7536
|
|
8255
|
-
static public char[] sort(char list
|
7537
|
+
static public char[] sort(char[] list) {
|
8256
7538
|
return sort(list, list.length);
|
8257
7539
|
}
|
8258
7540
|
|
@@ -8263,7 +7545,7 @@ public class PApplet implements PConstants {
|
|
8263
7545
|
return outgoing;
|
8264
7546
|
}
|
8265
7547
|
|
8266
|
-
static public int[] sort(int list
|
7548
|
+
static public int[] sort(int[] list) {
|
8267
7549
|
return sort(list, list.length);
|
8268
7550
|
}
|
8269
7551
|
|
@@ -8274,7 +7556,7 @@ public class PApplet implements PConstants {
|
|
8274
7556
|
return outgoing;
|
8275
7557
|
}
|
8276
7558
|
|
8277
|
-
static public float[] sort(float list
|
7559
|
+
static public float[] sort(float[] list) {
|
8278
7560
|
return sort(list, list.length);
|
8279
7561
|
}
|
8280
7562
|
|
@@ -8285,7 +7567,7 @@ public class PApplet implements PConstants {
|
|
8285
7567
|
return outgoing;
|
8286
7568
|
}
|
8287
7569
|
|
8288
|
-
static public String[] sort(String list
|
7570
|
+
static public String[] sort(String[] list) {
|
8289
7571
|
return sort(list, list.length);
|
8290
7572
|
}
|
8291
7573
|
|
@@ -8381,7 +7663,7 @@ public class PApplet implements PConstants {
|
|
8381
7663
|
* Increases the size of an array. By default, this function doubles the
|
8382
7664
|
* size of the array, but the optional <b>newSize</b> parameter provides
|
8383
7665
|
* precise control over the increase in size.
|
8384
|
-
*
|
7666
|
+
*
|
8385
7667
|
* When using an array of objects, the data returned from the function must
|
8386
7668
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8387
7669
|
* items = (SomeClass[]) expand(originalArray)</em>.
|
@@ -8392,85 +7674,85 @@ public class PApplet implements PConstants {
|
|
8392
7674
|
* @param list the array to expand
|
8393
7675
|
* @see PApplet#shorten(boolean[])
|
8394
7676
|
*/
|
8395
|
-
static public boolean[] expand(boolean list
|
7677
|
+
static public boolean[] expand(boolean[] list) {
|
8396
7678
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8397
7679
|
}
|
8398
7680
|
|
8399
7681
|
/**
|
8400
7682
|
* @param newSize new size for the array
|
8401
7683
|
*/
|
8402
|
-
static public boolean[] expand(boolean list
|
8403
|
-
boolean
|
7684
|
+
static public boolean[] expand(boolean[] list, int newSize) {
|
7685
|
+
boolean[] temp = new boolean[newSize];
|
8404
7686
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8405
7687
|
return temp;
|
8406
7688
|
}
|
8407
7689
|
|
8408
|
-
static public byte[] expand(byte list
|
7690
|
+
static public byte[] expand(byte[] list) {
|
8409
7691
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8410
7692
|
}
|
8411
7693
|
|
8412
|
-
static public byte[] expand(byte list
|
8413
|
-
byte
|
7694
|
+
static public byte[] expand(byte[] list, int newSize) {
|
7695
|
+
byte[] temp = new byte[newSize];
|
8414
7696
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8415
7697
|
return temp;
|
8416
7698
|
}
|
8417
7699
|
|
8418
|
-
static public char[] expand(char list
|
7700
|
+
static public char[] expand(char[] list) {
|
8419
7701
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8420
7702
|
}
|
8421
7703
|
|
8422
|
-
static public char[] expand(char list
|
8423
|
-
char
|
7704
|
+
static public char[] expand(char[] list, int newSize) {
|
7705
|
+
char[] temp = new char[newSize];
|
8424
7706
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8425
7707
|
return temp;
|
8426
7708
|
}
|
8427
7709
|
|
8428
|
-
static public int[] expand(int list
|
7710
|
+
static public int[] expand(int[] list) {
|
8429
7711
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8430
7712
|
}
|
8431
7713
|
|
8432
|
-
static public int[] expand(int list
|
8433
|
-
int
|
7714
|
+
static public int[] expand(int[] list, int newSize) {
|
7715
|
+
int[] temp = new int[newSize];
|
8434
7716
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8435
7717
|
return temp;
|
8436
7718
|
}
|
8437
7719
|
|
8438
|
-
static public long[] expand(long list
|
7720
|
+
static public long[] expand(long[] list) {
|
8439
7721
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8440
7722
|
}
|
8441
7723
|
|
8442
|
-
static public long[] expand(long list
|
8443
|
-
long
|
7724
|
+
static public long[] expand(long[] list, int newSize) {
|
7725
|
+
long[] temp = new long[newSize];
|
8444
7726
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8445
7727
|
return temp;
|
8446
7728
|
}
|
8447
7729
|
|
8448
|
-
static public float[] expand(float list
|
7730
|
+
static public float[] expand(float[] list) {
|
8449
7731
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8450
7732
|
}
|
8451
7733
|
|
8452
|
-
static public float[] expand(float list
|
8453
|
-
float
|
7734
|
+
static public float[] expand(float[] list, int newSize) {
|
7735
|
+
float[] temp = new float[newSize];
|
8454
7736
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8455
7737
|
return temp;
|
8456
7738
|
}
|
8457
7739
|
|
8458
|
-
static public double[] expand(double list
|
7740
|
+
static public double[] expand(double[] list) {
|
8459
7741
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8460
7742
|
}
|
8461
7743
|
|
8462
|
-
static public double[] expand(double list
|
8463
|
-
double
|
7744
|
+
static public double[] expand(double[] list, int newSize) {
|
7745
|
+
double[] temp = new double[newSize];
|
8464
7746
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8465
7747
|
return temp;
|
8466
7748
|
}
|
8467
7749
|
|
8468
|
-
static public String[] expand(String list
|
7750
|
+
static public String[] expand(String[] list) {
|
8469
7751
|
return expand(list, list.length > 0 ? list.length << 1 : 1);
|
8470
7752
|
}
|
8471
7753
|
|
8472
|
-
static public String[] expand(String list
|
8473
|
-
String
|
7754
|
+
static public String[] expand(String[] list, int newSize) {
|
7755
|
+
String[] temp = new String[newSize];
|
8474
7756
|
// in case the new size is smaller than list.length
|
8475
7757
|
System.arraycopy(list, 0, temp, 0, Math.min(newSize, list.length));
|
8476
7758
|
return temp;
|
@@ -8501,7 +7783,7 @@ public class PApplet implements PConstants {
|
|
8501
7783
|
* Expands an array by one element and adds data to the new position. The
|
8502
7784
|
* datatype of the <b>element</b> parameter must be the same as the
|
8503
7785
|
* datatype of the array.
|
8504
|
-
*
|
7786
|
+
*
|
8505
7787
|
* When using an array of objects, the data returned from the function must
|
8506
7788
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8507
7789
|
* items = (SomeClass[]) append(originalArray, element)</em>.
|
@@ -8514,31 +7796,31 @@ public class PApplet implements PConstants {
|
|
8514
7796
|
* @see PApplet#shorten(boolean[])
|
8515
7797
|
* @see PApplet#expand(boolean[])
|
8516
7798
|
*/
|
8517
|
-
static public byte[] append(byte array
|
7799
|
+
static public byte[] append(byte[] array, byte value) {
|
8518
7800
|
array = expand(array, array.length + 1);
|
8519
7801
|
array[array.length-1] = value;
|
8520
7802
|
return array;
|
8521
7803
|
}
|
8522
7804
|
|
8523
|
-
static public char[] append(char array
|
7805
|
+
static public char[] append(char[] array, char value) {
|
8524
7806
|
array = expand(array, array.length + 1);
|
8525
7807
|
array[array.length-1] = value;
|
8526
7808
|
return array;
|
8527
7809
|
}
|
8528
7810
|
|
8529
|
-
static public int[] append(int array
|
7811
|
+
static public int[] append(int[] array, int value) {
|
8530
7812
|
array = expand(array, array.length + 1);
|
8531
7813
|
array[array.length-1] = value;
|
8532
7814
|
return array;
|
8533
7815
|
}
|
8534
7816
|
|
8535
|
-
static public float[] append(float array
|
7817
|
+
static public float[] append(float[] array, float value) {
|
8536
7818
|
array = expand(array, array.length + 1);
|
8537
7819
|
array[array.length-1] = value;
|
8538
7820
|
return array;
|
8539
7821
|
}
|
8540
7822
|
|
8541
|
-
static public String[] append(String array
|
7823
|
+
static public String[] append(String[] array, String value) {
|
8542
7824
|
array = expand(array, array.length + 1);
|
8543
7825
|
array[array.length-1] = value;
|
8544
7826
|
return array;
|
@@ -8556,7 +7838,7 @@ public class PApplet implements PConstants {
|
|
8556
7838
|
* ( begin auto-generated from shorten.xml )
|
8557
7839
|
*
|
8558
7840
|
* Decreases an array by one element and returns the shortened array.
|
8559
|
-
*
|
7841
|
+
*
|
8560
7842
|
* When using an array of objects, the data returned from the function must
|
8561
7843
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8562
7844
|
* items = (SomeClass[]) shorten(originalArray)</em>.
|
@@ -8568,27 +7850,27 @@ public class PApplet implements PConstants {
|
|
8568
7850
|
* @see PApplet#append(byte[], byte)
|
8569
7851
|
* @see PApplet#expand(boolean[])
|
8570
7852
|
*/
|
8571
|
-
static public boolean[] shorten(boolean list
|
7853
|
+
static public boolean[] shorten(boolean[] list) {
|
8572
7854
|
return subset(list, 0, list.length-1);
|
8573
7855
|
}
|
8574
7856
|
|
8575
|
-
static public byte[] shorten(byte list
|
7857
|
+
static public byte[] shorten(byte[] list) {
|
8576
7858
|
return subset(list, 0, list.length-1);
|
8577
7859
|
}
|
8578
7860
|
|
8579
|
-
static public char[] shorten(char list
|
7861
|
+
static public char[] shorten(char[] list) {
|
8580
7862
|
return subset(list, 0, list.length-1);
|
8581
7863
|
}
|
8582
7864
|
|
8583
|
-
static public int[] shorten(int list
|
7865
|
+
static public int[] shorten(int[] list) {
|
8584
7866
|
return subset(list, 0, list.length-1);
|
8585
7867
|
}
|
8586
7868
|
|
8587
|
-
static public float[] shorten(float list
|
7869
|
+
static public float[] shorten(float[] list) {
|
8588
7870
|
return subset(list, 0, list.length-1);
|
8589
7871
|
}
|
8590
7872
|
|
8591
|
-
static public String[] shorten(String list
|
7873
|
+
static public String[] shorten(String[] list) {
|
8592
7874
|
return subset(list, 0, list.length-1);
|
8593
7875
|
}
|
8594
7876
|
|
@@ -8605,7 +7887,7 @@ public class PApplet implements PConstants {
|
|
8605
7887
|
* parameters must be of the same datatype. The <b>array</b> parameter
|
8606
7888
|
* defines the array which will be modified and the second parameter
|
8607
7889
|
* defines the data which will be inserted.
|
8608
|
-
*
|
7890
|
+
*
|
8609
7891
|
* When using an array of objects, the data returned from the function must
|
8610
7892
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8611
7893
|
* items = (SomeClass[]) splice(array1, array2, index)</em>.
|
@@ -8618,9 +7900,9 @@ public class PApplet implements PConstants {
|
|
8618
7900
|
* @see PApplet#concat(boolean[], boolean[])
|
8619
7901
|
* @see PApplet#subset(boolean[], int, int)
|
8620
7902
|
*/
|
8621
|
-
static final public boolean[] splice(boolean list
|
7903
|
+
static final public boolean[] splice(boolean[] list,
|
8622
7904
|
boolean value, int index) {
|
8623
|
-
boolean
|
7905
|
+
boolean[] outgoing = new boolean[list.length + 1];
|
8624
7906
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8625
7907
|
outgoing[index] = value;
|
8626
7908
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8628,9 +7910,9 @@ public class PApplet implements PConstants {
|
|
8628
7910
|
return outgoing;
|
8629
7911
|
}
|
8630
7912
|
|
8631
|
-
static final public boolean[] splice(boolean list
|
8632
|
-
boolean value
|
8633
|
-
boolean
|
7913
|
+
static final public boolean[] splice(boolean[] list,
|
7914
|
+
boolean[] value, int index) {
|
7915
|
+
boolean[] outgoing = new boolean[list.length + value.length];
|
8634
7916
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8635
7917
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8636
7918
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8638,9 +7920,9 @@ public class PApplet implements PConstants {
|
|
8638
7920
|
return outgoing;
|
8639
7921
|
}
|
8640
7922
|
|
8641
|
-
static final public byte[] splice(byte list
|
7923
|
+
static final public byte[] splice(byte[] list,
|
8642
7924
|
byte value, int index) {
|
8643
|
-
byte
|
7925
|
+
byte[] outgoing = new byte[list.length + 1];
|
8644
7926
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8645
7927
|
outgoing[index] = value;
|
8646
7928
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8648,9 +7930,9 @@ public class PApplet implements PConstants {
|
|
8648
7930
|
return outgoing;
|
8649
7931
|
}
|
8650
7932
|
|
8651
|
-
static final public byte[] splice(byte list
|
8652
|
-
byte value
|
8653
|
-
byte
|
7933
|
+
static final public byte[] splice(byte[] list,
|
7934
|
+
byte[] value, int index) {
|
7935
|
+
byte[] outgoing = new byte[list.length + value.length];
|
8654
7936
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8655
7937
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8656
7938
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8659,9 +7941,9 @@ public class PApplet implements PConstants {
|
|
8659
7941
|
}
|
8660
7942
|
|
8661
7943
|
|
8662
|
-
static final public char[] splice(char list
|
7944
|
+
static final public char[] splice(char[] list,
|
8663
7945
|
char value, int index) {
|
8664
|
-
char
|
7946
|
+
char[] outgoing = new char[list.length + 1];
|
8665
7947
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8666
7948
|
outgoing[index] = value;
|
8667
7949
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8669,9 +7951,9 @@ public class PApplet implements PConstants {
|
|
8669
7951
|
return outgoing;
|
8670
7952
|
}
|
8671
7953
|
|
8672
|
-
static final public char[] splice(char list
|
8673
|
-
char value
|
8674
|
-
char
|
7954
|
+
static final public char[] splice(char[] list,
|
7955
|
+
char[] value, int index) {
|
7956
|
+
char[] outgoing = new char[list.length + value.length];
|
8675
7957
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8676
7958
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8677
7959
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8679,9 +7961,9 @@ public class PApplet implements PConstants {
|
|
8679
7961
|
return outgoing;
|
8680
7962
|
}
|
8681
7963
|
|
8682
|
-
static final public int[] splice(int list
|
7964
|
+
static final public int[] splice(int[] list,
|
8683
7965
|
int value, int index) {
|
8684
|
-
int
|
7966
|
+
int[] outgoing = new int[list.length + 1];
|
8685
7967
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8686
7968
|
outgoing[index] = value;
|
8687
7969
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8689,9 +7971,9 @@ public class PApplet implements PConstants {
|
|
8689
7971
|
return outgoing;
|
8690
7972
|
}
|
8691
7973
|
|
8692
|
-
static final public int[] splice(int list
|
8693
|
-
int value
|
8694
|
-
int
|
7974
|
+
static final public int[] splice(int[] list,
|
7975
|
+
int[] value, int index) {
|
7976
|
+
int[] outgoing = new int[list.length + value.length];
|
8695
7977
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8696
7978
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8697
7979
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8699,9 +7981,9 @@ public class PApplet implements PConstants {
|
|
8699
7981
|
return outgoing;
|
8700
7982
|
}
|
8701
7983
|
|
8702
|
-
static final public float[] splice(float list
|
7984
|
+
static final public float[] splice(float[] list,
|
8703
7985
|
float value, int index) {
|
8704
|
-
float
|
7986
|
+
float[] outgoing = new float[list.length + 1];
|
8705
7987
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8706
7988
|
outgoing[index] = value;
|
8707
7989
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8709,9 +7991,9 @@ public class PApplet implements PConstants {
|
|
8709
7991
|
return outgoing;
|
8710
7992
|
}
|
8711
7993
|
|
8712
|
-
static final public float[] splice(float list
|
8713
|
-
float value
|
8714
|
-
float
|
7994
|
+
static final public float[] splice(float[] list,
|
7995
|
+
float[] value, int index) {
|
7996
|
+
float[] outgoing = new float[list.length + value.length];
|
8715
7997
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8716
7998
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8717
7999
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8719,9 +8001,9 @@ public class PApplet implements PConstants {
|
|
8719
8001
|
return outgoing;
|
8720
8002
|
}
|
8721
8003
|
|
8722
|
-
static final public String[] splice(String list
|
8004
|
+
static final public String[] splice(String[] list,
|
8723
8005
|
String value, int index) {
|
8724
|
-
String
|
8006
|
+
String[] outgoing = new String[list.length + 1];
|
8725
8007
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8726
8008
|
outgoing[index] = value;
|
8727
8009
|
System.arraycopy(list, index, outgoing, index + 1,
|
@@ -8729,9 +8011,9 @@ public class PApplet implements PConstants {
|
|
8729
8011
|
return outgoing;
|
8730
8012
|
}
|
8731
8013
|
|
8732
|
-
static final public String[] splice(String list
|
8733
|
-
String value
|
8734
|
-
String
|
8014
|
+
static final public String[] splice(String[] list,
|
8015
|
+
String[] value, int index) {
|
8016
|
+
String[] outgoing = new String[list.length + value.length];
|
8735
8017
|
System.arraycopy(list, 0, outgoing, 0, index);
|
8736
8018
|
System.arraycopy(value, 0, outgoing, index, value.length);
|
8737
8019
|
System.arraycopy(list, index, outgoing, index + value.length,
|
@@ -8777,7 +8059,7 @@ public class PApplet implements PConstants {
|
|
8777
8059
|
* from the <b>offset</b> to the end of the array. When specifying the
|
8778
8060
|
* <b>offset</b> remember the first array element is 0. This function does
|
8779
8061
|
* not change the source array.
|
8780
|
-
*
|
8062
|
+
*
|
8781
8063
|
* When using an array of objects, the data returned from the function must
|
8782
8064
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8783
8065
|
* items = (SomeClass[]) subset(originalArray, 0, 4)</em>.
|
@@ -8900,7 +8182,7 @@ public class PApplet implements PConstants {
|
|
8900
8182
|
* Concatenates two arrays. For example, concatenating the array { 1, 2, 3
|
8901
8183
|
* } and the array { 4, 5, 6 } yields { 1, 2, 3, 4, 5, 6 }. Both parameters
|
8902
8184
|
* must be arrays of the same datatype.
|
8903
|
-
*
|
8185
|
+
*
|
8904
8186
|
* When using an array of objects, the data returned from the function must
|
8905
8187
|
* be cast to the object array's data type. For example: <em>SomeClass[]
|
8906
8188
|
* items = (SomeClass[]) concat(array1, array2)</em>.
|
@@ -8912,43 +8194,43 @@ public class PApplet implements PConstants {
|
|
8912
8194
|
* @see PApplet#splice(boolean[], boolean, int)
|
8913
8195
|
* @see PApplet#arrayCopy(Object, int, Object, int, int)
|
8914
8196
|
*/
|
8915
|
-
static public boolean[] concat(boolean a
|
8916
|
-
boolean
|
8197
|
+
static public boolean[] concat(boolean[] a, boolean[] b) {
|
8198
|
+
boolean[] c = new boolean[a.length + b.length];
|
8917
8199
|
System.arraycopy(a, 0, c, 0, a.length);
|
8918
8200
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8919
8201
|
return c;
|
8920
8202
|
}
|
8921
8203
|
|
8922
|
-
static public byte[] concat(byte a
|
8923
|
-
byte
|
8204
|
+
static public byte[] concat(byte[] a, byte[] b) {
|
8205
|
+
byte[] c = new byte[a.length + b.length];
|
8924
8206
|
System.arraycopy(a, 0, c, 0, a.length);
|
8925
8207
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8926
8208
|
return c;
|
8927
8209
|
}
|
8928
8210
|
|
8929
|
-
static public char[] concat(char a
|
8930
|
-
char
|
8211
|
+
static public char[] concat(char[] a, char[] b) {
|
8212
|
+
char[] c = new char[a.length + b.length];
|
8931
8213
|
System.arraycopy(a, 0, c, 0, a.length);
|
8932
8214
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8933
8215
|
return c;
|
8934
8216
|
}
|
8935
8217
|
|
8936
|
-
static public int[] concat(int a
|
8937
|
-
int
|
8218
|
+
static public int[] concat(int[] a, int[] b) {
|
8219
|
+
int[] c = new int[a.length + b.length];
|
8938
8220
|
System.arraycopy(a, 0, c, 0, a.length);
|
8939
8221
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8940
8222
|
return c;
|
8941
8223
|
}
|
8942
8224
|
|
8943
|
-
static public float[] concat(float a
|
8944
|
-
float
|
8225
|
+
static public float[] concat(float[] a, float[] b) {
|
8226
|
+
float[] c = new float[a.length + b.length];
|
8945
8227
|
System.arraycopy(a, 0, c, 0, a.length);
|
8946
8228
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8947
8229
|
return c;
|
8948
8230
|
}
|
8949
8231
|
|
8950
|
-
static public String[] concat(String a
|
8951
|
-
String
|
8232
|
+
static public String[] concat(String[] a, String[] b) {
|
8233
|
+
String[] c = new String[a.length + b.length];
|
8952
8234
|
System.arraycopy(a, 0, c, 0, a.length);
|
8953
8235
|
System.arraycopy(b, 0, c, a.length, b.length);
|
8954
8236
|
return c;
|
@@ -8977,8 +8259,8 @@ public class PApplet implements PConstants {
|
|
8977
8259
|
* @param list booleans[], bytes[], chars[], ints[], floats[], or Strings[]
|
8978
8260
|
* @see PApplet#sort(String[], int)
|
8979
8261
|
*/
|
8980
|
-
static public boolean[] reverse(boolean list
|
8981
|
-
boolean
|
8262
|
+
static public boolean[] reverse(boolean[] list) {
|
8263
|
+
boolean[] outgoing = new boolean[list.length];
|
8982
8264
|
int length1 = list.length - 1;
|
8983
8265
|
for (int i = 0; i < list.length; i++) {
|
8984
8266
|
outgoing[i] = list[length1 - i];
|
@@ -8986,8 +8268,8 @@ public class PApplet implements PConstants {
|
|
8986
8268
|
return outgoing;
|
8987
8269
|
}
|
8988
8270
|
|
8989
|
-
static public byte[] reverse(byte list
|
8990
|
-
byte
|
8271
|
+
static public byte[] reverse(byte[] list) {
|
8272
|
+
byte[] outgoing = new byte[list.length];
|
8991
8273
|
int length1 = list.length - 1;
|
8992
8274
|
for (int i = 0; i < list.length; i++) {
|
8993
8275
|
outgoing[i] = list[length1 - i];
|
@@ -8995,8 +8277,8 @@ public class PApplet implements PConstants {
|
|
8995
8277
|
return outgoing;
|
8996
8278
|
}
|
8997
8279
|
|
8998
|
-
static public char[] reverse(char list
|
8999
|
-
char
|
8280
|
+
static public char[] reverse(char[] list) {
|
8281
|
+
char[] outgoing = new char[list.length];
|
9000
8282
|
int length1 = list.length - 1;
|
9001
8283
|
for (int i = 0; i < list.length; i++) {
|
9002
8284
|
outgoing[i] = list[length1 - i];
|
@@ -9004,8 +8286,8 @@ public class PApplet implements PConstants {
|
|
9004
8286
|
return outgoing;
|
9005
8287
|
}
|
9006
8288
|
|
9007
|
-
static public int[] reverse(int list
|
9008
|
-
int
|
8289
|
+
static public int[] reverse(int[] list) {
|
8290
|
+
int[] outgoing = new int[list.length];
|
9009
8291
|
int length1 = list.length - 1;
|
9010
8292
|
for (int i = 0; i < list.length; i++) {
|
9011
8293
|
outgoing[i] = list[length1 - i];
|
@@ -9013,8 +8295,8 @@ public class PApplet implements PConstants {
|
|
9013
8295
|
return outgoing;
|
9014
8296
|
}
|
9015
8297
|
|
9016
|
-
static public float[] reverse(float list
|
9017
|
-
float
|
8298
|
+
static public float[] reverse(float[] list) {
|
8299
|
+
float[] outgoing = new float[list.length];
|
9018
8300
|
int length1 = list.length - 1;
|
9019
8301
|
for (int i = 0; i < list.length; i++) {
|
9020
8302
|
outgoing[i] = list[length1 - i];
|
@@ -9022,8 +8304,8 @@ public class PApplet implements PConstants {
|
|
9022
8304
|
return outgoing;
|
9023
8305
|
}
|
9024
8306
|
|
9025
|
-
static public String[] reverse(String list
|
9026
|
-
String
|
8307
|
+
static public String[] reverse(String[] list) {
|
8308
|
+
String[] outgoing = new String[list.length];
|
9027
8309
|
int length1 = list.length - 1;
|
9028
8310
|
for (int i = 0; i < list.length; i++) {
|
9029
8311
|
outgoing[i] = list[length1 - i];
|
@@ -9129,7 +8411,7 @@ public class PApplet implements PConstants {
|
|
9129
8411
|
* The splitTokens() function splits a String at one or many character
|
9130
8412
|
* "tokens." The <b>tokens</b> parameter specifies the character or
|
9131
8413
|
* characters to be used as a boundary.
|
9132
|
-
*
|
8414
|
+
*
|
9133
8415
|
* If no <b>tokens</b> character is specified, any whitespace character is
|
9134
8416
|
* used to split. Whitespace characters include tab (\\t), line feed (\\n),
|
9135
8417
|
* carriage return (\\r), form feed (\\f), and space. To convert a String
|
@@ -9146,7 +8428,7 @@ public class PApplet implements PConstants {
|
|
9146
8428
|
*/
|
9147
8429
|
static public String[] splitTokens(String value, String delim) {
|
9148
8430
|
StringTokenizer toker = new StringTokenizer(value, delim);
|
9149
|
-
String
|
8431
|
+
String[] pieces = new String[toker.countTokens()];
|
9150
8432
|
|
9151
8433
|
int index = 0;
|
9152
8434
|
while (toker.hasMoreTokens()) {
|
@@ -9163,15 +8445,15 @@ public class PApplet implements PConstants {
|
|
9163
8445
|
* string as the divider. The <b>delim</b> parameter specifies the
|
9164
8446
|
* character or characters that mark the boundaries between each piece. A
|
9165
8447
|
* String[] array is returned that contains each of the pieces.
|
9166
|
-
*
|
8448
|
+
*
|
9167
8449
|
* If the result is a set of numbers, you can convert the String[] array to
|
9168
8450
|
* to a float[] or int[] array using the datatype conversion functions
|
9169
8451
|
* <b>int()</b> and <b>float()</b> (see example above).
|
9170
|
-
*
|
8452
|
+
*
|
9171
8453
|
* The <b>splitTokens()</b> function works in a similar fashion, except
|
9172
8454
|
* that it splits using a range of characters instead of a specific
|
9173
8455
|
* character or sequence.
|
9174
|
-
* <!--
|
8456
|
+
* <!-- />
|
9175
8457
|
* This function uses regular expressions to determine how the <b>delim</b>
|
9176
8458
|
* parameter divides the <b>str</b> parameter. Therefore, if you use
|
9177
8459
|
* characters such parentheses and brackets that are used with regular
|
@@ -9196,10 +8478,10 @@ public class PApplet implements PConstants {
|
|
9196
8478
|
if (value == null) return null;
|
9197
8479
|
//return split(what, String.valueOf(delim)); // huh
|
9198
8480
|
|
9199
|
-
char
|
8481
|
+
char[] chars = value.toCharArray();
|
9200
8482
|
int splitCount = 0; //1;
|
9201
|
-
for (
|
9202
|
-
if (
|
8483
|
+
for (char ch : chars) {
|
8484
|
+
if (ch == delim) splitCount++;
|
9203
8485
|
}
|
9204
8486
|
// make sure that there is something in the input string
|
9205
8487
|
//if (chars.length > 0) {
|
@@ -9208,12 +8490,12 @@ public class PApplet implements PConstants {
|
|
9208
8490
|
// on second thought, i don't agree with this, will disable
|
9209
8491
|
//}
|
9210
8492
|
if (splitCount == 0) {
|
9211
|
-
String
|
8493
|
+
String[] splits = new String[1];
|
9212
8494
|
splits[0] = value;
|
9213
8495
|
return splits;
|
9214
8496
|
}
|
9215
8497
|
//int pieceCount = splitCount + 1;
|
9216
|
-
String
|
8498
|
+
String[] splits = new String[splitCount + 1];
|
9217
8499
|
int splitIndex = 0;
|
9218
8500
|
int startIndex = 0;
|
9219
8501
|
for (int i = 0; i < chars.length; i++) {
|
@@ -9251,7 +8533,7 @@ public class PApplet implements PConstants {
|
|
9251
8533
|
static Pattern matchPattern(String regexp) {
|
9252
8534
|
Pattern p = null;
|
9253
8535
|
if (matchPatterns == null) {
|
9254
|
-
matchPatterns = new LinkedHashMap
|
8536
|
+
matchPatterns = new LinkedHashMap<>(16, 0.75f, true) {
|
9255
8537
|
@Override
|
9256
8538
|
protected boolean removeEldestEntry(Map.Entry<String, Pattern> eldest) {
|
9257
8539
|
// Limit the number of match patterns at 10 most recently used
|
@@ -9276,8 +8558,8 @@ public class PApplet implements PConstants {
|
|
9276
8558
|
* text, and return matching groups (elements found inside parentheses) as
|
9277
8559
|
* a String array. No match will return null. If no groups are specified in
|
9278
8560
|
* the regexp, but the sequence matches, an array of length one (with the
|
9279
|
-
* matched text as the first element of the array) will be returned
|
9280
|
-
*
|
8561
|
+
* matched text as the first element of the array) will be returned.
|
8562
|
+
*
|
9281
8563
|
* To use the function, first check to see if the result is null. If the
|
9282
8564
|
* result is null, then the sequence did not match. If the sequence did
|
9283
8565
|
* match, an array is returned.
|
@@ -9285,8 +8567,8 @@ public class PApplet implements PConstants {
|
|
9285
8567
|
* then the contents of each will be returned in the array.
|
9286
8568
|
* Element [0] of a regexp match returns the entire matching string, and
|
9287
8569
|
* the match groups start at element [1] (the first group is [1], the
|
9288
|
-
* second [2], and so on)
|
9289
|
-
*
|
8570
|
+
* second [2], and so on).
|
8571
|
+
*
|
9290
8572
|
* The syntax can be found in the reference for Java's <a
|
9291
8573
|
* href="http://download.oracle.com/javase/6/docs/api/">Pattern</a> class.
|
9292
8574
|
* For regular expression syntax, read the <a
|
@@ -9326,8 +8608,8 @@ public class PApplet implements PConstants {
|
|
9326
8608
|
* as a two-dimensional String array. No matches will return null. If no
|
9327
8609
|
* groups are specified in the regexp, but the sequence matches, a two
|
9328
8610
|
* dimensional array is still returned, but the second dimension is only of
|
9329
|
-
* length one
|
9330
|
-
*
|
8611
|
+
* length one.
|
8612
|
+
*
|
9331
8613
|
* To use the function, first check to see if the result is null. If the
|
9332
8614
|
* result is null, then the sequence did not match at all. If the sequence
|
9333
8615
|
* did match, a 2D array is returned. If there are groups (specified by
|
@@ -9336,8 +8618,8 @@ public class PApplet implements PConstants {
|
|
9336
8618
|
* Assuming, a loop with counter variable i, element [i][0] of a regexp
|
9337
8619
|
* match returns the entire matching string, and the match groups start at
|
9338
8620
|
* element [i][1] (the first group is [i][1], the second [i][2], and so
|
9339
|
-
* on)
|
9340
|
-
*
|
8621
|
+
* on).
|
8622
|
+
*
|
9341
8623
|
* The syntax can be found in the reference for Java's <a
|
9342
8624
|
* href="http://download.oracle.com/javase/6/docs/api/">Pattern</a> class.
|
9343
8625
|
* For regular expression syntax, read the <a
|
@@ -9454,8 +8736,8 @@ public class PApplet implements PConstants {
|
|
9454
8736
|
* to zero will return false, and any other value will return true.
|
9455
8737
|
* @return array of boolean elements
|
9456
8738
|
*/
|
9457
|
-
static final public boolean[] parseBoolean(int what
|
9458
|
-
boolean
|
8739
|
+
static final public boolean[] parseBoolean(int[] what) {
|
8740
|
+
boolean[] outgoing = new boolean[what.length];
|
9459
8741
|
for (int i = 0; i < what.length; i++) {
|
9460
8742
|
outgoing[i] = (what[i] != 0);
|
9461
8743
|
}
|
@@ -9473,8 +8755,8 @@ public class PApplet implements PConstants {
|
|
9473
8755
|
}
|
9474
8756
|
*/
|
9475
8757
|
|
9476
|
-
static final public boolean[] parseBoolean(String what
|
9477
|
-
boolean
|
8758
|
+
static final public boolean[] parseBoolean(String[] what) {
|
8759
|
+
boolean[] outgoing = new boolean[what.length];
|
9478
8760
|
for (int i = 0; i < what.length; i++) {
|
9479
8761
|
outgoing[i] = Boolean.parseBoolean(what[i]);
|
9480
8762
|
}
|
@@ -9508,32 +8790,32 @@ public class PApplet implements PConstants {
|
|
9508
8790
|
|
9509
8791
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
9510
8792
|
|
9511
|
-
static final public byte[] parseByte(boolean what
|
9512
|
-
byte
|
8793
|
+
static final public byte[] parseByte(boolean[] what) {
|
8794
|
+
byte[] outgoing = new byte[what.length];
|
9513
8795
|
for (int i = 0; i < what.length; i++) {
|
9514
8796
|
outgoing[i] = what[i] ? (byte)1 : 0;
|
9515
8797
|
}
|
9516
8798
|
return outgoing;
|
9517
8799
|
}
|
9518
8800
|
|
9519
|
-
static final public byte[] parseByte(char what
|
9520
|
-
byte
|
8801
|
+
static final public byte[] parseByte(char[] what) {
|
8802
|
+
byte[] outgoing = new byte[what.length];
|
9521
8803
|
for (int i = 0; i < what.length; i++) {
|
9522
8804
|
outgoing[i] = (byte) what[i];
|
9523
8805
|
}
|
9524
8806
|
return outgoing;
|
9525
8807
|
}
|
9526
8808
|
|
9527
|
-
static final public byte[] parseByte(int what
|
9528
|
-
byte
|
8809
|
+
static final public byte[] parseByte(int[] what) {
|
8810
|
+
byte[] outgoing = new byte[what.length];
|
9529
8811
|
for (int i = 0; i < what.length; i++) {
|
9530
8812
|
outgoing[i] = (byte) what[i];
|
9531
8813
|
}
|
9532
8814
|
return outgoing;
|
9533
8815
|
}
|
9534
8816
|
|
9535
|
-
static final public byte[] parseByte(float what
|
9536
|
-
byte
|
8817
|
+
static final public byte[] parseByte(float[] what) {
|
8818
|
+
byte[] outgoing = new byte[what.length];
|
9537
8819
|
for (int i = 0; i < what.length; i++) {
|
9538
8820
|
outgoing[i] = (byte) what[i];
|
9539
8821
|
}
|
@@ -9588,8 +8870,8 @@ public class PApplet implements PConstants {
|
|
9588
8870
|
}
|
9589
8871
|
*/
|
9590
8872
|
|
9591
|
-
static final public char[] parseChar(byte what
|
9592
|
-
char
|
8873
|
+
static final public char[] parseChar(byte[] what) {
|
8874
|
+
char[] outgoing = new char[what.length];
|
9593
8875
|
for (int i = 0; i < what.length; i++) {
|
9594
8876
|
outgoing[i] = (char) (what[i] & 0xff);
|
9595
8877
|
}
|
@@ -9605,8 +8887,8 @@ public class PApplet implements PConstants {
|
|
9605
8887
|
}
|
9606
8888
|
|
9607
8889
|
/*
|
9608
|
-
static final public char[] parseChar(
|
9609
|
-
char
|
8890
|
+
static final public char[] parseChar(int[] what) {
|
8891
|
+
char[] outgoing = new char[what.length];
|
9610
8892
|
for (int i = 0; i < what.length; i++) {
|
9611
8893
|
outgoing[i] = (char) what[i];
|
9612
8894
|
}
|
@@ -9676,32 +8958,32 @@ public class PApplet implements PConstants {
|
|
9676
8958
|
|
9677
8959
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
9678
8960
|
|
9679
|
-
static final public int[] parseInt(boolean what
|
9680
|
-
int
|
8961
|
+
static final public int[] parseInt(boolean[] what) {
|
8962
|
+
int[] list = new int[what.length];
|
9681
8963
|
for (int i = 0; i < what.length; i++) {
|
9682
8964
|
list[i] = what[i] ? 1 : 0;
|
9683
8965
|
}
|
9684
8966
|
return list;
|
9685
8967
|
}
|
9686
8968
|
|
9687
|
-
static final public int[] parseInt(byte what
|
9688
|
-
int
|
8969
|
+
static final public int[] parseInt(byte[] what) { // note this unsigns
|
8970
|
+
int[] list = new int[what.length];
|
9689
8971
|
for (int i = 0; i < what.length; i++) {
|
9690
8972
|
list[i] = (what[i] & 0xff);
|
9691
8973
|
}
|
9692
8974
|
return list;
|
9693
8975
|
}
|
9694
8976
|
|
9695
|
-
static final public int[] parseInt(char what
|
9696
|
-
int
|
8977
|
+
static final public int[] parseInt(char[] what) {
|
8978
|
+
int[] list = new int[what.length];
|
9697
8979
|
for (int i = 0; i < what.length; i++) {
|
9698
8980
|
list[i] = what[i];
|
9699
8981
|
}
|
9700
8982
|
return list;
|
9701
8983
|
}
|
9702
8984
|
|
9703
|
-
static public int[] parseInt(float what
|
9704
|
-
int
|
8985
|
+
static public int[] parseInt(float[] what) {
|
8986
|
+
int[] inties = new int[what.length];
|
9705
8987
|
for (int i = 0; i < what.length; i++) {
|
9706
8988
|
inties[i] = (int)what[i];
|
9707
8989
|
}
|
@@ -9717,7 +8999,7 @@ public class PApplet implements PConstants {
|
|
9717
8999
|
*
|
9718
9000
|
* numbers will contain { 1, 300, 44 }
|
9719
9001
|
*/
|
9720
|
-
static public int[] parseInt(String what
|
9002
|
+
static public int[] parseInt(String[] what) {
|
9721
9003
|
return parseInt(what, 0);
|
9722
9004
|
}
|
9723
9005
|
|
@@ -9731,8 +9013,8 @@ public class PApplet implements PConstants {
|
|
9731
9013
|
*
|
9732
9014
|
* numbers will contain { 1, 300, 9999, 44 }
|
9733
9015
|
*/
|
9734
|
-
static public int[] parseInt(String what
|
9735
|
-
int
|
9016
|
+
static public int[] parseInt(String[] what, int missing) {
|
9017
|
+
int[] output = new int[what.length];
|
9736
9018
|
for (int i = 0; i < what.length; i++) {
|
9737
9019
|
try {
|
9738
9020
|
output[i] = Integer.parseInt(what[i]);
|
@@ -9773,46 +9055,28 @@ public class PApplet implements PConstants {
|
|
9773
9055
|
|
9774
9056
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
9775
9057
|
|
9776
|
-
|
9777
|
-
|
9778
|
-
float floaties[] = new float[what.length];
|
9779
|
-
for (int i = 0; i < what.length; i++) {
|
9780
|
-
floaties[i] = what[i] ? 1 : 0;
|
9781
|
-
}
|
9782
|
-
return floaties;
|
9783
|
-
}
|
9784
|
-
|
9785
|
-
static final public float[] parseFloat(char what[]) {
|
9786
|
-
float floaties[] = new float[what.length];
|
9787
|
-
for (int i = 0; i < what.length; i++) {
|
9788
|
-
floaties[i] = (char) what[i];
|
9789
|
-
}
|
9790
|
-
return floaties;
|
9791
|
-
}
|
9792
|
-
*/
|
9793
|
-
|
9794
|
-
static final public float[] parseFloat(byte what[]) {
|
9795
|
-
float floaties[] = new float[what.length];
|
9058
|
+
static final public float[] parseFloat(byte[] what) {
|
9059
|
+
float[] floaties = new float[what.length];
|
9796
9060
|
for (int i = 0; i < what.length; i++) {
|
9797
9061
|
floaties[i] = what[i];
|
9798
9062
|
}
|
9799
9063
|
return floaties;
|
9800
9064
|
}
|
9801
9065
|
|
9802
|
-
static final public float[] parseFloat(int what
|
9803
|
-
float
|
9066
|
+
static final public float[] parseFloat(int[] what) {
|
9067
|
+
float[] floaties = new float[what.length];
|
9804
9068
|
for (int i = 0; i < what.length; i++) {
|
9805
9069
|
floaties[i] = what[i];
|
9806
9070
|
}
|
9807
9071
|
return floaties;
|
9808
9072
|
}
|
9809
9073
|
|
9810
|
-
static final public float[] parseFloat(String what
|
9074
|
+
static final public float[] parseFloat(String[] what) {
|
9811
9075
|
return parseFloat(what, Float.NaN);
|
9812
9076
|
}
|
9813
9077
|
|
9814
|
-
static final public float[] parseFloat(String what
|
9815
|
-
float
|
9078
|
+
static final public float[] parseFloat(String[] what, float missing) {
|
9079
|
+
float[] output = new float[what.length];
|
9816
9080
|
for (int i = 0; i < what.length; i++) {
|
9817
9081
|
try {
|
9818
9082
|
output[i] = Float.parseFloat(what[i]);
|
@@ -9847,32 +9111,32 @@ public class PApplet implements PConstants {
|
|
9847
9111
|
|
9848
9112
|
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
9849
9113
|
|
9850
|
-
static final public String[] str(boolean x
|
9851
|
-
String
|
9114
|
+
static final public String[] str(boolean[] x) {
|
9115
|
+
String[] s = new String[x.length];
|
9852
9116
|
for (int i = 0; i < x.length; i++) s[i] = String.valueOf(x[i]);
|
9853
9117
|
return s;
|
9854
9118
|
}
|
9855
9119
|
|
9856
|
-
static final public String[] str(byte x
|
9857
|
-
String
|
9120
|
+
static final public String[] str(byte[] x) {
|
9121
|
+
String[] s = new String[x.length];
|
9858
9122
|
for (int i = 0; i < x.length; i++) s[i] = String.valueOf(x[i]);
|
9859
9123
|
return s;
|
9860
9124
|
}
|
9861
9125
|
|
9862
|
-
static final public String[] str(char x
|
9863
|
-
String
|
9126
|
+
static final public String[] str(char[] x) {
|
9127
|
+
String[] s = new String[x.length];
|
9864
9128
|
for (int i = 0; i < x.length; i++) s[i] = String.valueOf(x[i]);
|
9865
9129
|
return s;
|
9866
9130
|
}
|
9867
9131
|
|
9868
|
-
static final public String[] str(int x
|
9869
|
-
String
|
9132
|
+
static final public String[] str(int[] x) {
|
9133
|
+
String[] s = new String[x.length];
|
9870
9134
|
for (int i = 0; i < x.length; i++) s[i] = String.valueOf(x[i]);
|
9871
9135
|
return s;
|
9872
9136
|
}
|
9873
9137
|
|
9874
|
-
static final public String[] str(float x
|
9875
|
-
String
|
9138
|
+
static final public String[] str(float[] x) {
|
9139
|
+
String[] s = new String[x.length];
|
9876
9140
|
for (int i = 0; i < x.length; i++) s[i] = String.valueOf(x[i]);
|
9877
9141
|
return s;
|
9878
9142
|
}
|
@@ -9912,7 +9176,7 @@ public class PApplet implements PConstants {
|
|
9912
9176
|
* Utility function for formatting numbers into strings. There are two
|
9913
9177
|
* versions, one for formatting floats and one for formatting ints. The
|
9914
9178
|
* values for the <b>digits</b>, <b>left</b>, and <b>right</b> parameters
|
9915
|
-
* should always be positive integers
|
9179
|
+
* should always be positive integers.As shown in the above
|
9916
9180
|
* example, <b>nf()</b> is used to add zeros to the left and/or right of a
|
9917
9181
|
* number. This is typically for aligning a list of numbers. To
|
9918
9182
|
* <em>remove</em> digits from a floating-point number, use the
|
@@ -9929,8 +9193,8 @@ public class PApplet implements PConstants {
|
|
9929
9193
|
* @see <a href="https://processing.org/reference/intconvert_.html">int(float)</a>
|
9930
9194
|
*/
|
9931
9195
|
|
9932
|
-
static public String[] nf(int nums
|
9933
|
-
String
|
9196
|
+
static public String[] nf(int[] nums, int digits) {
|
9197
|
+
String[] formatted = new String[nums.length];
|
9934
9198
|
for (int i = 0; i < formatted.length; i++) {
|
9935
9199
|
formatted[i] = nf(nums[i], digits);
|
9936
9200
|
}
|
@@ -9962,7 +9226,7 @@ public class PApplet implements PConstants {
|
|
9962
9226
|
* appropriate commas to mark units of 1000. There are two versions, one
|
9963
9227
|
* for formatting ints and one for formatting an array of ints. The value
|
9964
9228
|
* for the <b>digits</b> parameter should always be a positive integer.
|
9965
|
-
*
|
9229
|
+
*
|
9966
9230
|
* For a non-US locale, this will insert periods instead of commas, or
|
9967
9231
|
* whatever is apprioriate for that region.
|
9968
9232
|
*
|
@@ -9973,8 +9237,8 @@ public class PApplet implements PConstants {
|
|
9973
9237
|
* @see PApplet#nfp(float, int, int)
|
9974
9238
|
* @see PApplet#nfs(float, int, int)
|
9975
9239
|
*/
|
9976
|
-
static public String[] nfc(int nums
|
9977
|
-
String
|
9240
|
+
static public String[] nfc(int[] nums) {
|
9241
|
+
String[] formatted = new String[nums.length];
|
9978
9242
|
for (int i = 0; i < formatted.length; i++) {
|
9979
9243
|
formatted[i] = nfc(nums[i]);
|
9980
9244
|
}
|
@@ -10033,8 +9297,8 @@ public class PApplet implements PConstants {
|
|
10033
9297
|
/**
|
10034
9298
|
* @param nums the numbers to format
|
10035
9299
|
*/
|
10036
|
-
static public String[] nfs(int nums
|
10037
|
-
String
|
9300
|
+
static public String[] nfs(int[] nums, int digits) {
|
9301
|
+
String[] formatted = new String[nums.length];
|
10038
9302
|
for (int i = 0; i < formatted.length; i++) {
|
10039
9303
|
formatted[i] = nfs(nums[i], digits);
|
10040
9304
|
}
|
@@ -10071,8 +9335,8 @@ public class PApplet implements PConstants {
|
|
10071
9335
|
/**
|
10072
9336
|
* @param nums the numbers to format
|
10073
9337
|
*/
|
10074
|
-
static public String[] nfp(int nums
|
10075
|
-
String
|
9338
|
+
static public String[] nfp(int[] nums, int digits) {
|
9339
|
+
String[] formatted = new String[nums.length];
|
10076
9340
|
for (int i = 0; i < formatted.length; i++) {
|
10077
9341
|
formatted[i] = nfp(nums[i], digits);
|
10078
9342
|
}
|
@@ -10093,8 +9357,8 @@ public class PApplet implements PConstants {
|
|
10093
9357
|
* @param left number of digits to the left of the decimal point
|
10094
9358
|
* @param right number of digits to the right of the decimal point
|
10095
9359
|
*/
|
10096
|
-
static public String[] nf(float nums
|
10097
|
-
String
|
9360
|
+
static public String[] nf(float[] nums, int left, int right) {
|
9361
|
+
String[] formatted = new String[nums.length];
|
10098
9362
|
for (int i = 0; i < formatted.length; i++) {
|
10099
9363
|
formatted[i] = nf(nums[i], left, right);
|
10100
9364
|
}
|
@@ -10126,8 +9390,8 @@ public class PApplet implements PConstants {
|
|
10126
9390
|
/**
|
10127
9391
|
* @param right number of digits to the right of the decimal point
|
10128
9392
|
*/
|
10129
|
-
static public String[] nfc(float nums
|
10130
|
-
String
|
9393
|
+
static public String[] nfc(float[] nums, int right) {
|
9394
|
+
String[] formatted = new String[nums.length];
|
10131
9395
|
for (int i = 0; i < formatted.length; i++) {
|
10132
9396
|
formatted[i] = nfc(nums[i], right);
|
10133
9397
|
}
|
@@ -10160,8 +9424,8 @@ public class PApplet implements PConstants {
|
|
10160
9424
|
* @param left the number of digits to the left of the decimal point
|
10161
9425
|
* @param right the number of digits to the right of the decimal point
|
10162
9426
|
*/
|
10163
|
-
static public String[] nfs(float nums
|
10164
|
-
String
|
9427
|
+
static public String[] nfs(float[] nums, int left, int right) {
|
9428
|
+
String[] formatted = new String[nums.length];
|
10165
9429
|
for (int i = 0; i < formatted.length; i++) {
|
10166
9430
|
formatted[i] = nfs(nums[i], left, right);
|
10167
9431
|
}
|
@@ -10176,8 +9440,8 @@ public class PApplet implements PConstants {
|
|
10176
9440
|
* @param left the number of digits to the left of the decimal point
|
10177
9441
|
* @param right the number of digits to the right of the decimal point
|
10178
9442
|
*/
|
10179
|
-
static public String[] nfp(float nums
|
10180
|
-
String
|
9443
|
+
static public String[] nfp(float[] nums, int left, int right) {
|
9444
|
+
String[] formatted = new String[nums.length];
|
10181
9445
|
for (int i = 0; i < formatted.length; i++) {
|
10182
9446
|
formatted[i] = nfp(nums[i], left, right);
|
10183
9447
|
}
|
@@ -10202,7 +9466,7 @@ public class PApplet implements PConstants {
|
|
10202
9466
|
* equivalent hexadecimal notation. For example color(0, 102, 153) will
|
10203
9467
|
* convert to the String "FF006699". This function can help make your geeky
|
10204
9468
|
* debugging sessions much happier.
|
10205
|
-
*
|
9469
|
+
*
|
10206
9470
|
* Note that the maximum number of digits is 8, because an int value can
|
10207
9471
|
* only represent up to 32 bits. Specifying more than eight digits will
|
10208
9472
|
* simply shorten the string to eight anyway.
|
@@ -10303,7 +9567,7 @@ public class PApplet implements PConstants {
|
|
10303
9567
|
* equivalent binary notation. For example color(0, 102, 153, 255) will
|
10304
9568
|
* convert to the String "11111111000000000110011010011001". This function
|
10305
9569
|
* can help make your geeky debugging sessions much happier.
|
10306
|
-
*
|
9570
|
+
*
|
10307
9571
|
* Note that the maximum number of digits is 32, because an int value can
|
10308
9572
|
* only represent up to 32 bits. Specifying more than 32 digits will simply
|
10309
9573
|
* shorten the string to 32 anyway.
|
@@ -10655,36 +9919,12 @@ public class PApplet implements PConstants {
|
|
10655
9919
|
}
|
10656
9920
|
|
10657
9921
|
|
10658
|
-
// Moving this back off the EDT for alpha 10. Not sure if we're helping
|
10659
|
-
// hurting, but unless we do, errors inside settings() are never passed
|
9922
|
+
// Moving this back off the EDT for 3.0 alpha 10. Not sure if we're helping
|
9923
|
+
// or hurting, but unless we do, errors inside settings() are never passed
|
10660
9924
|
// through to the PDE. There are other ways around that, no doubt, but I'm
|
10661
9925
|
// also suspecting that these "not showing up" bugs might be EDT issues.
|
10662
9926
|
static public void runSketch(final String[] args,
|
10663
9927
|
final PApplet constructedSketch) {
|
10664
|
-
// EventQueue.invokeLater(new Runnable() {
|
10665
|
-
// public void run() {
|
10666
|
-
// runSketchEDT(args, constructedSketch);
|
10667
|
-
// }
|
10668
|
-
// });
|
10669
|
-
// }
|
10670
|
-
//
|
10671
|
-
//
|
10672
|
-
// /**
|
10673
|
-
// * Moving this to the EDT for 3.0a6 because that's the proper thing to do
|
10674
|
-
// * when messing with Swing components. But mostly we're AWT, so who knows.
|
10675
|
-
// */
|
10676
|
-
// static protected void runSketchEDT(final String[] args,
|
10677
|
-
// final PApplet constructedSketch) {
|
10678
|
-
// Supposed to help with flicker, but no effect on OS X.
|
10679
|
-
// TODO IIRC this helped on Windows, but need to double check.
|
10680
|
-
System.setProperty("sun.awt.noerasebackground", "true");
|
10681
|
-
|
10682
|
-
// Remove 60fps limit on the JavaFX "pulse" timer
|
10683
|
-
System.setProperty("javafx.animation.fullspeed", "true");
|
10684
|
-
|
10685
|
-
// Doesn't seem to do anything helpful here (that can't be done via Runner)
|
10686
|
-
//System.setProperty("com.apple.mrj.application.apple.menu.about.name", "potato");
|
10687
|
-
|
10688
9928
|
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
10689
9929
|
public void uncaughtException(Thread t, Throwable e) {
|
10690
9930
|
e.printStackTrace();
|
@@ -10713,16 +9953,6 @@ public class PApplet implements PConstants {
|
|
10713
9953
|
}
|
10714
9954
|
*/
|
10715
9955
|
|
10716
|
-
// Catch any HeadlessException to provide more useful feedback
|
10717
|
-
try {
|
10718
|
-
// Call validate() while resize events are in progress
|
10719
|
-
Toolkit.getDefaultToolkit().setDynamicLayout(true);
|
10720
|
-
} catch (HeadlessException e) {
|
10721
|
-
System.err.println("Cannot run sketch without a display. Read this for possible solutions:");
|
10722
|
-
System.err.println("https://github.com/processing/processing/wiki/Running-without-a-Display");
|
10723
|
-
System.exit(1);
|
10724
|
-
}
|
10725
|
-
|
10726
9956
|
// So that the system proxy setting are used by default
|
10727
9957
|
System.setProperty("java.net.useSystemProxies", "true");
|
10728
9958
|
|
@@ -10769,6 +9999,9 @@ public class PApplet implements PConstants {
|
|
10769
9999
|
displayNum = -1; // use the default
|
10770
10000
|
}
|
10771
10001
|
|
10002
|
+
} else if (param.equals(ARGS_DISABLE_AWT)) {
|
10003
|
+
disableAWT = true;
|
10004
|
+
|
10772
10005
|
} else if (param.equals(ARGS_WINDOW_COLOR)) {
|
10773
10006
|
if (value.charAt(0) == '#' && value.length() == 7) {
|
10774
10007
|
value = value.substring(1);
|
@@ -10822,16 +10055,9 @@ public class PApplet implements PConstants {
|
|
10822
10055
|
argIndex++;
|
10823
10056
|
}
|
10824
10057
|
|
10825
|
-
|
10826
|
-
|
10827
|
-
|
10828
|
-
// // https://github.com/processing/processing/commit/0a14835e6f5f4766b022e73a8fe562318636727c
|
10829
|
-
// // TODO this is a hack added for PDE X and needs to be removed [fry 141104]
|
10830
|
-
// for (int i = 0; i < args.length; i++) {
|
10831
|
-
// if (args[i].startsWith(ARGS_SKETCH_FOLDER)){
|
10832
|
-
// folder = args[i].substring(args[i].indexOf('=') + 1);
|
10833
|
-
// }
|
10834
|
-
// }
|
10058
|
+
if (!disableAWT) {
|
10059
|
+
ShimAWT.initRun();
|
10060
|
+
}
|
10835
10061
|
|
10836
10062
|
final PApplet sketch;
|
10837
10063
|
if (constructedSketch != null) {
|
@@ -10844,25 +10070,12 @@ public class PApplet implements PConstants {
|
|
10844
10070
|
} catch (RuntimeException re) {
|
10845
10071
|
// Don't re-package runtime exceptions
|
10846
10072
|
throw re;
|
10847
|
-
} catch (
|
10073
|
+
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | NoSuchMethodException | InvocationTargetException e) {
|
10848
10074
|
// Package non-runtime exceptions so we can throw them freely
|
10849
10075
|
throw new RuntimeException(e);
|
10850
10076
|
}
|
10851
10077
|
}
|
10852
10078
|
|
10853
|
-
if (platform == MACOSX) {
|
10854
|
-
try {
|
10855
|
-
final String td = "processing.core.ThinkDifferent";
|
10856
|
-
Class<?> thinkDifferent =
|
10857
|
-
Thread.currentThread().getContextClassLoader().loadClass(td);
|
10858
|
-
Method method =
|
10859
|
-
thinkDifferent.getMethod("init", new Class[] { PApplet.class });
|
10860
|
-
method.invoke(null, new Object[] { sketch });
|
10861
|
-
} catch (Exception e) {
|
10862
|
-
e.printStackTrace(); // That's unfortunate
|
10863
|
-
}
|
10864
|
-
}
|
10865
|
-
|
10866
10079
|
// Set the suggested display that's coming from the command line
|
10867
10080
|
// (and most likely, from the PDE's preference setting).
|
10868
10081
|
sketch.display = displayNum;
|
@@ -10890,25 +10103,7 @@ public class PApplet implements PConstants {
|
|
10890
10103
|
}
|
10891
10104
|
|
10892
10105
|
// Call the settings() method which will give us our size() call
|
10893
|
-
// try {
|
10894
10106
|
sketch.handleSettings();
|
10895
|
-
// } catch (Throwable t) {
|
10896
|
-
// System.err.println("I think I'm gonna hurl");
|
10897
|
-
// }
|
10898
|
-
|
10899
|
-
//// sketch.spanDisplays = spanDisplays;
|
10900
|
-
// // If spanning screens, that means we're also full screen.
|
10901
|
-
//// fullScreen |= spanDisplays;
|
10902
|
-
// if (spanDisplays) {
|
10903
|
-
// displayIndex = SPAN;
|
10904
|
-
//// fullScreen = true;
|
10905
|
-
// }
|
10906
|
-
|
10907
|
-
// // If the applet doesn't call for full screen, but the command line does,
|
10908
|
-
// // enable it. Conversely, if the command line does not, don't disable it.
|
10909
|
-
// // Query the applet to see if it wants to be full screen all the time.
|
10910
|
-
// //fullScreen |= sketch.sketchFullScreen();
|
10911
|
-
// sketch.fullScreen |= fullScreen;
|
10912
10107
|
|
10913
10108
|
sketch.external = external;
|
10914
10109
|
|
@@ -10917,22 +10112,6 @@ public class PApplet implements PConstants {
|
|
10917
10112
|
}
|
10918
10113
|
|
10919
10114
|
final PSurface surface = sketch.initSurface();
|
10920
|
-
// sketch.initSurface(windowColor, displayIndex, fullScreen, spanDisplays);
|
10921
|
-
|
10922
|
-
/*
|
10923
|
-
// Wait until the applet has figured out its width. In a static mode app,
|
10924
|
-
// everything happens inside setup(), so this will be after setup() has
|
10925
|
-
// completed, and the empty draw() has set "finished" to true.
|
10926
|
-
while (sketch.defaultSize && !sketch.finished) {
|
10927
|
-
//System.out.println("default size");
|
10928
|
-
try {
|
10929
|
-
Thread.sleep(5);
|
10930
|
-
|
10931
|
-
} catch (InterruptedException e) {
|
10932
|
-
//System.out.println("interrupt");
|
10933
|
-
}
|
10934
|
-
}
|
10935
|
-
*/
|
10936
10115
|
|
10937
10116
|
if (present) {
|
10938
10117
|
if (hideStop) {
|
@@ -10951,14 +10130,6 @@ public class PApplet implements PConstants {
|
|
10951
10130
|
|
10952
10131
|
sketch.showSurface();
|
10953
10132
|
sketch.startSurface();
|
10954
|
-
/*
|
10955
|
-
if (sketch.getGraphics().displayable()) {
|
10956
|
-
surface.setVisible(true);
|
10957
|
-
}
|
10958
|
-
|
10959
|
-
//sketch.init();
|
10960
|
-
surface.startThread();
|
10961
|
-
*/
|
10962
10133
|
}
|
10963
10134
|
|
10964
10135
|
|
@@ -10982,61 +10153,63 @@ public class PApplet implements PConstants {
|
|
10982
10153
|
|
10983
10154
|
// Create fake Frame object to warn user about the changes
|
10984
10155
|
if (g.displayable()) {
|
10985
|
-
|
10986
|
-
|
10987
|
-
|
10988
|
-
|
10989
|
-
|
10990
|
-
|
10991
|
-
|
10992
|
-
|
10993
|
-
public void setVisible(boolean visible) {
|
10994
|
-
deprecationWarning("setVisible");
|
10995
|
-
surface.setVisible(visible);
|
10996
|
-
}
|
10997
|
-
|
10998
|
-
@Override
|
10999
|
-
public void setTitle(String title) {
|
11000
|
-
deprecationWarning("setTitle");
|
11001
|
-
surface.setTitle(title);
|
11002
|
-
}
|
11003
|
-
|
11004
|
-
@Override
|
11005
|
-
public void setUndecorated(boolean ignored) {
|
11006
|
-
throw new RuntimeException("'frame' has been removed from Processing 3, " +
|
11007
|
-
"use fullScreen() to get an undecorated full screen frame");
|
11008
|
-
}
|
10156
|
+
/*
|
10157
|
+
if (!disableAWT) {
|
10158
|
+
frame = new Frame() {
|
10159
|
+
@Override
|
10160
|
+
public void setResizable(boolean resizable) {
|
10161
|
+
deprecationWarning("setResizable");
|
10162
|
+
surface.setResizable(resizable);
|
10163
|
+
}
|
11009
10164
|
|
11010
|
-
|
11011
|
-
|
11012
|
-
|
11013
|
-
|
11014
|
-
|
11015
|
-
surface.setLocation(x, y);
|
11016
|
-
}
|
11017
|
-
*/
|
10165
|
+
@Override
|
10166
|
+
public void setVisible(boolean visible) {
|
10167
|
+
deprecationWarning("setVisible");
|
10168
|
+
surface.setVisible(visible);
|
10169
|
+
}
|
11018
10170
|
|
11019
|
-
|
11020
|
-
|
11021
|
-
|
11022
|
-
|
11023
|
-
|
10171
|
+
@Override
|
10172
|
+
public void setTitle(String title) {
|
10173
|
+
deprecationWarning("setTitle");
|
10174
|
+
surface.setTitle(title);
|
10175
|
+
}
|
11024
10176
|
|
11025
|
-
|
11026
|
-
|
11027
|
-
|
11028
|
-
|
11029
|
-
|
11030
|
-
|
10177
|
+
@Override
|
10178
|
+
public void setUndecorated(boolean ignored) {
|
10179
|
+
throw new RuntimeException("'frame' has been removed from Processing 3, " +
|
10180
|
+
"use fullScreen() to get an undecorated full screen frame");
|
10181
|
+
}
|
10182
|
+
*/
|
10183
|
+
/*
|
10184
|
+
// Can't override this one because it's called by Window's constructor
|
10185
|
+
@Override
|
10186
|
+
public void setLocation(int x, int y) {
|
10187
|
+
deprecationWarning("setLocation");
|
10188
|
+
surface.setLocation(x, y);
|
10189
|
+
}
|
10190
|
+
*/
|
10191
|
+
/*
|
10192
|
+
@Override
|
10193
|
+
public void setSize(int w, int h) {
|
10194
|
+
deprecationWarning("setSize");
|
10195
|
+
surface.setSize(w, h);
|
10196
|
+
}
|
11031
10197
|
|
11032
|
-
|
11033
|
-
|
10198
|
+
private void deprecationWarning(String method) {
|
10199
|
+
PGraphics.showWarning("Use surface." + method + "() instead of " +
|
10200
|
+
"frame." + method + " in Processing 3");
|
10201
|
+
//new Exception(method).printStackTrace(System.out);
|
10202
|
+
}
|
10203
|
+
};
|
10204
|
+
}
|
10205
|
+
*/
|
10206
|
+
surface.initFrame(this);
|
10207
|
+
surface.setTitle("Picrate 2.0 Sketch");
|
11034
10208
|
|
11035
10209
|
} else {
|
11036
10210
|
surface.initOffscreen(this); // for PDF/PSurfaceNone and friends
|
11037
10211
|
}
|
11038
10212
|
|
11039
|
-
// init();
|
11040
10213
|
return surface;
|
11041
10214
|
}
|
11042
10215
|
|
@@ -11068,16 +10241,6 @@ public class PApplet implements PConstants {
|
|
11068
10241
|
// }
|
11069
10242
|
|
11070
10243
|
|
11071
|
-
/** Convenience method, should only be called by PSurface subclasses. */
|
11072
|
-
static public void hideMenuBar() {
|
11073
|
-
if (PApplet.platform == PConstants.MACOSX) {
|
11074
|
-
// Call some native code to remove the menu bar on OS X. Not necessary
|
11075
|
-
// on Linux and Windows, who are happy to make full screen windows.
|
11076
|
-
japplemenubar.JAppleMenuBar.hide();
|
11077
|
-
}
|
11078
|
-
}
|
11079
|
-
|
11080
|
-
|
11081
10244
|
/**
|
11082
10245
|
* Convenience method for Python Mode to run an already-constructed sketch.
|
11083
10246
|
* This makes it makes it easy to launch a sketch in Jython:
|
@@ -11098,7 +10261,7 @@ public class PApplet implements PConstants {
|
|
11098
10261
|
}
|
11099
10262
|
|
11100
10263
|
|
11101
|
-
/**
|
10264
|
+
/** Run the PiCrate sketch */
|
11102
10265
|
public void runPicrate() {
|
11103
10266
|
runSketch(new String[0]);
|
11104
10267
|
}
|
@@ -11115,7 +10278,7 @@ public class PApplet implements PConstants {
|
|
11115
10278
|
* requires two parameters, the first is the renderer and the second is the
|
11116
10279
|
* file name. This function is always used with <b>endRecord()</b> to stop
|
11117
10280
|
* the recording process and close the file.
|
11118
|
-
*
|
10281
|
+
*
|
11119
10282
|
* Note that beginRecord() will only pick up any settings that happen after
|
11120
10283
|
* it has been called. For instance, if you call textFont() before
|
11121
10284
|
* beginRecord(), then that font will not be set for the file that you're
|
@@ -11176,21 +10339,21 @@ public class PApplet implements PConstants {
|
|
11176
10339
|
* hundreds of triangles, rather than a single object. Or that a
|
11177
10340
|
* multi-segment line shape (such as a curve) will be rendered as
|
11178
10341
|
* individual segments.
|
11179
|
-
*
|
10342
|
+
*
|
11180
10343
|
* When using <b>beginRaw()</b> and <b>endRaw()</b>, it's possible to write
|
11181
10344
|
* to either a 2D or 3D renderer. For instance, <b>beginRaw()</b> with the
|
11182
10345
|
* PDF library will write the geometry as flattened triangles and lines,
|
11183
10346
|
* even if recording from the <b>P3D</b> renderer.
|
11184
|
-
*
|
10347
|
+
*
|
11185
10348
|
* If you want a background to show up in your files, use <b>rect(0, 0,
|
11186
10349
|
* width, height)</b> after setting the <b>fill()</b> to the background
|
11187
10350
|
* color. Otherwise the background will not be rendered to the file because
|
11188
10351
|
* the background is not shape.
|
11189
|
-
*
|
10352
|
+
*
|
11190
10353
|
* Using <b>hint(ENABLE_DEPTH_SORT)</b> can improve the appearance of 3D
|
11191
10354
|
* geometry drawn to 2D file formats. See the <b>hint()</b> reference for
|
11192
10355
|
* more details.
|
11193
|
-
*
|
10356
|
+
*
|
11194
10357
|
* See examples in the reference for the <b>PDF</b> and <b>DXF</b>
|
11195
10358
|
* libraries for more information.
|
11196
10359
|
*
|
@@ -11261,7 +10424,7 @@ public class PApplet implements PConstants {
|
|
11261
10424
|
* Loads the pixel data for the display window into the <b>pixels[]</b>
|
11262
10425
|
* array. This function must always be called before reading from or
|
11263
10426
|
* writing to <b>pixels[]</b>.
|
11264
|
-
*
|
10427
|
+
* renderers may or may not seem to require <b>loadPixels()</b>
|
11265
10428
|
* or <b>updatePixels()</b>. However, the rule is that any time you want to
|
11266
10429
|
* manipulate the <b>pixels[]</b> array, you must first call
|
11267
10430
|
* <b>loadPixels()</b>, and after changes have been made, call
|
@@ -11291,14 +10454,14 @@ public class PApplet implements PConstants {
|
|
11291
10454
|
* Use in conjunction with <b>loadPixels()</b>. If you're only reading
|
11292
10455
|
* pixels from the array, there's no need to call <b>updatePixels()</b>
|
11293
10456
|
* unless there are changes.
|
11294
|
-
*
|
10457
|
+
* renderers may or may not seem to require <b>loadPixels()</b>
|
11295
10458
|
* or <b>updatePixels()</b>. However, the rule is that any time you want to
|
11296
10459
|
* manipulate the <b>pixels[]</b> array, you must first call
|
11297
10460
|
* <b>loadPixels()</b>, and after changes have been made, call
|
11298
10461
|
* <b>updatePixels()</b>. Even if the renderer may not seem to use this
|
11299
10462
|
* function in the current Processing release, this will always be subject
|
11300
10463
|
* to change.
|
11301
|
-
*
|
10464
|
+
*
|
11302
10465
|
* Currently, none of the renderers use the additional parameters to
|
11303
10466
|
* <b>updatePixels()</b>, however this may be implemented in the future.
|
11304
10467
|
*
|
@@ -11380,12 +10543,12 @@ public class PApplet implements PConstants {
|
|
11380
10543
|
* specifies a position in 2D and the <b>vertex()</b> function with three
|
11381
10544
|
* parameters specifies a position in 3D. Each shape will be outlined with
|
11382
10545
|
* the current stroke color and filled with the fill color.
|
11383
|
-
*
|
10546
|
+
*
|
11384
10547
|
* Transformations such as <b>translate()</b>, <b>rotate()</b>, and
|
11385
10548
|
* <b>scale()</b> do not work within <b>beginShape()</b>. It is also not
|
11386
10549
|
* possible to use other shapes, such as <b>ellipse()</b> or <b>rect()</b>
|
11387
10550
|
* within <b>beginShape()</b>.
|
11388
|
-
*
|
10551
|
+
*
|
11389
10552
|
* The P3D renderer settings allow <b>stroke()</b> and <b>fill()</b>
|
11390
10553
|
* settings to be altered per-vertex, however the default P2D renderer does
|
11391
10554
|
* not. Settings such as <b>strokeWeight()</b>, <b>strokeCap()</b>, and
|
@@ -11525,7 +10688,7 @@ public class PApplet implements PConstants {
|
|
11525
10688
|
* Sets a texture to be applied to vertex points. The <b>texture()</b>
|
11526
10689
|
* function must be called between <b>beginShape()</b> and
|
11527
10690
|
* <b>endShape()</b> and before any calls to <b>vertex()</b>.
|
11528
|
-
*
|
10691
|
+
*
|
11529
10692
|
* When textures are in use, the fill color is ignored. Instead, use tint()
|
11530
10693
|
* to specify the color of the texture as it is applied to the shape.
|
11531
10694
|
*
|
@@ -11590,11 +10753,11 @@ public class PApplet implements PConstants {
|
|
11590
10753
|
* All shapes are constructed by connecting a series of vertices.
|
11591
10754
|
* <b>vertex()</b> is used to specify the vertex coordinates for points,
|
11592
10755
|
* lines, triangles, quads, and polygons and is used exclusively within the
|
11593
|
-
* <b>beginShape()</b> and <b>endShape()</b> function
|
11594
|
-
*
|
10756
|
+
* <b>beginShape()</b> and <b>endShape()</b> function.
|
10757
|
+
*
|
11595
10758
|
* Drawing a vertex in 3D using the <b>z</b> parameter requires the P3D
|
11596
|
-
* parameter in combination with size as shown in the above example
|
11597
|
-
*
|
10759
|
+
* parameter in combination with size as shown in the above example.
|
10760
|
+
*
|
11598
10761
|
* This function is also used to map a texture onto the geometry. The
|
11599
10762
|
* <b>texture()</b> function declares the texture to apply to the geometry
|
11600
10763
|
* and the <b>u</b> and <b>v</b> coordinates set define the mapping of this
|
@@ -12577,17 +11740,17 @@ public class PApplet implements PConstants {
|
|
12577
11740
|
* ( begin auto-generated from curvePoint.xml )
|
12578
11741
|
*
|
12579
11742
|
* Evalutes the curve at point t for points a, b, c, d. The parameter t
|
12580
|
-
* varies between 0 and 1, a and d are
|
12581
|
-
* the
|
11743
|
+
* varies between 0 and 1, a and d are the control points, and b and c are
|
11744
|
+
* the points on the curve. This can be done once with the x coordinates and a
|
12582
11745
|
* second time with the y coordinates to get the location of a curve at t.
|
12583
11746
|
*
|
12584
11747
|
* ( end auto-generated )
|
12585
11748
|
*
|
12586
11749
|
* @webref shape:curves
|
12587
|
-
* @param a coordinate of first point
|
12588
|
-
* @param b coordinate of
|
12589
|
-
* @param c coordinate of
|
12590
|
-
* @param d coordinate of
|
11750
|
+
* @param a coordinate of first control point
|
11751
|
+
* @param b coordinate of first point on the curve
|
11752
|
+
* @param c coordinate of second point on the curve
|
11753
|
+
* @param d coordinate of second control point
|
12591
11754
|
* @param t value between 0 and 1
|
12592
11755
|
* @see PGraphics#curve(float, float, float, float, float, float, float, float, float, float, float, float)
|
12593
11756
|
* @see PGraphics#curveVertex(float, float)
|
@@ -12748,8 +11911,8 @@ public class PApplet implements PConstants {
|
|
12748
11911
|
* <b>image()</b> to set the location of one corner of the image and uses
|
12749
11912
|
* the fourth and fifth parameters to set the opposite corner. Use
|
12750
11913
|
* <b>imageMode(CENTER)</b> to draw images centered at the given x and y
|
12751
|
-
* position
|
12752
|
-
*
|
11914
|
+
* position.
|
11915
|
+
*
|
12753
11916
|
* The parameter to <b>imageMode()</b> must be written in ALL CAPS because
|
12754
11917
|
* Processing is a case-sensitive language.
|
12755
11918
|
*
|
@@ -12778,13 +11941,13 @@ public class PApplet implements PConstants {
|
|
12778
11941
|
* <b>x</b> and <b>y</b> parameters define the location of the image from
|
12779
11942
|
* its upper-left corner. The image is displayed at its original size
|
12780
11943
|
* unless the <b>width</b> and <b>height</b> parameters specify a different
|
12781
|
-
* size
|
12782
|
-
*
|
11944
|
+
* size.
|
11945
|
+
*
|
12783
11946
|
* The <b>imageMode()</b> function changes the way the parameters work. For
|
12784
11947
|
* example, a call to <b>imageMode(CORNERS)</b> will change the
|
12785
11948
|
* <b>width</b> and <b>height</b> parameters to define the x and y values
|
12786
|
-
* of the opposite corner of the image
|
12787
|
-
*
|
11949
|
+
* of the opposite corner of the image.
|
11950
|
+
*
|
12788
11951
|
* The color of an image may be modified with the <b>tint()</b> function.
|
12789
11952
|
* This function will maintain transparency for GIF and PNG images.
|
12790
11953
|
*
|
@@ -12885,7 +12048,7 @@ public class PApplet implements PConstants {
|
|
12885
12048
|
* to <b>shapeMode(CORNERS)</b>, for example, will change the width and
|
12886
12049
|
* height parameters to define the x and y values of the opposite corner of
|
12887
12050
|
* the shape.
|
12888
|
-
*
|
12051
|
+
*
|
12889
12052
|
* Note complex shapes may draw awkwardly with P3D. This renderer does not
|
12890
12053
|
* yet support shapes that have holes or complicated breaks.
|
12891
12054
|
*
|
@@ -12932,7 +12095,7 @@ public class PApplet implements PConstants {
|
|
12932
12095
|
* CENTER, and RIGHT set the display characteristics of the letters in
|
12933
12096
|
* relation to the values for the <b>x</b> and <b>y</b> parameters of the
|
12934
12097
|
* <b>text()</b> function.
|
12935
|
-
*
|
12098
|
+
*
|
12936
12099
|
* In Processing 0125 and later, an optional second parameter can be used
|
12937
12100
|
* to vertically align the text. BASELINE is the default, and the vertical
|
12938
12101
|
* alignment will be reset to BASELINE if the second parameter is not used.
|
@@ -12940,12 +12103,12 @@ public class PApplet implements PConstants {
|
|
12940
12103
|
* offsets the line based on the current <b>textDescent()</b>. For multiple
|
12941
12104
|
* lines, the final line will be aligned to the bottom, with the previous
|
12942
12105
|
* lines appearing above it.
|
12943
|
-
*
|
12106
|
+
*
|
12944
12107
|
* When using <b>text()</b> with width and height parameters, BASELINE is
|
12945
12108
|
* ignored, and treated as TOP. (Otherwise, text would by default draw
|
12946
12109
|
* outside the box, since BASELINE is the default setting. BASELINE is not
|
12947
12110
|
* a useful drawing mode for text drawn in a rectangle.)
|
12948
|
-
*
|
12111
|
+
*
|
12949
12112
|
* The vertical alignment is based on the value of <b>textAscent()</b>,
|
12950
12113
|
* which many fonts do not specify correctly. It may be necessary to use a
|
12951
12114
|
* hack and offset by a few pixels by hand so that the offset looks
|
@@ -13016,10 +12179,10 @@ public class PApplet implements PConstants {
|
|
13016
12179
|
* <b>text()</b> function. If no <b>size</b> parameter is input, the font
|
13017
12180
|
* will appear at its original size (the size it was created at with the
|
13018
12181
|
* "Create Font..." tool) until it is changed with <b>textSize()</b>. <br
|
13019
|
-
* />
|
12182
|
+
* /> Because fonts are usually bitmaped, you should create fonts at
|
13020
12183
|
* the sizes that will be used most commonly. Using <b>textFont()</b>
|
13021
12184
|
* without the size parameter will result in the cleanest-looking text. <br
|
13022
|
-
*
|
12185
|
+
* /> With the default (JAVA2D) and PDF renderers, it's also possible
|
13023
12186
|
* to enable the use of native fonts via the command
|
13024
12187
|
* <b>hint(ENABLE_NATIVE_FONTS)</b>. This will produce vector text in
|
13025
12188
|
* JAVA2D sketches and PDF output in cases where the vector data is
|
@@ -13078,16 +12241,16 @@ public class PApplet implements PConstants {
|
|
13078
12241
|
*
|
13079
12242
|
* Sets the way text draws to the screen. In the default configuration, the
|
13080
12243
|
* <b>MODEL</b> mode, it's possible to rotate, scale, and place letters in
|
13081
|
-
* two and three dimensional space
|
13082
|
-
*
|
12244
|
+
* two and three dimensional space.
|
12245
|
+
*
|
13083
12246
|
* The <b>SHAPE</b> mode draws text using the the glyph outlines of
|
13084
12247
|
* individual characters rather than as textures. This mode is only
|
13085
12248
|
* supported with the <b>PDF</b> and <b>P3D</b> renderer settings. With the
|
13086
12249
|
* <b>PDF</b> renderer, you must call <b>textMode(SHAPE)</b> before any
|
13087
12250
|
* other drawing occurs. If the outlines are not available, then
|
13088
12251
|
* <b>textMode(SHAPE)</b> will be ignored and <b>textMode(MODEL)</b> will
|
13089
|
-
* be used instead
|
13090
|
-
*
|
12252
|
+
* be used instead.
|
12253
|
+
*
|
13091
12254
|
* The <b>textMode(SHAPE)</b> option in <b>P3D</b> can be combined with
|
13092
12255
|
* <b>beginRaw()</b> to write vector-accurate text to 2D and 3D output
|
13093
12256
|
* files, for instance <b>DXF</b> or <b>PDF</b>. The <b>SHAPE</b> mode is
|
@@ -13179,7 +12342,7 @@ public class PApplet implements PConstants {
|
|
13179
12342
|
* with the <b>fill()</b> function. The text displays in relation to the
|
13180
12343
|
* <b>textAlign()</b> function, which gives the option to draw to the left,
|
13181
12344
|
* right, and center of the coordinates.
|
13182
|
-
*
|
12345
|
+
*
|
13183
12346
|
* The <b>x2</b> and <b>y2</b> parameters define a rectangular area to
|
13184
12347
|
* display within and may only be used with string data. For text drawn
|
13185
12348
|
* inside a rectangle, the coordinates are interpreted based on the current
|
@@ -13267,11 +12430,11 @@ public class PApplet implements PConstants {
|
|
13267
12430
|
* Draw text in a box that is constrained to a particular size.
|
13268
12431
|
* The current rectMode() determines what the coordinates mean
|
13269
12432
|
* (whether x1/y1/x2/y2 or x/y/w/h).
|
13270
|
-
*
|
12433
|
+
*
|
13271
12434
|
* Note that the x,y coords of the start of the box
|
13272
12435
|
* will align with the *ascent* of the text, not the baseline,
|
13273
12436
|
* as is the case for the other text() functions.
|
13274
|
-
*
|
12437
|
+
*
|
13275
12438
|
* Newlines that are \n (Unix newline or linefeed char, ascii 10)
|
13276
12439
|
* are honored, and \r (carriage return, Windows and Mac OS) are
|
13277
12440
|
* ignored.
|
@@ -13329,8 +12492,8 @@ public class PApplet implements PConstants {
|
|
13329
12492
|
* They allow you to change the style and transformation settings
|
13330
12493
|
* and later return to what you had. When a new state is started
|
13331
12494
|
* with push(), it builds on the current style and transform
|
13332
|
-
* information
|
13333
|
-
*
|
12495
|
+
* information.
|
12496
|
+
*
|
13334
12497
|
* <b>push()</b> stores information related to the current
|
13335
12498
|
* transformation state and style settings controlled by the
|
13336
12499
|
* following functions: <b>rotate()</b>, <b>translate()</b>,
|
@@ -13338,8 +12501,8 @@ public class PApplet implements PConstants {
|
|
13338
12501
|
* <b>strokeWeight()</b>, <b>strokeCap()</b>, <b>strokeJoin()</b>,
|
13339
12502
|
* <b>imageMode()</b>, <b>rectMode()</b>, <b>ellipseMode()</b>,
|
13340
12503
|
* <b>colorMode()</b>, <b>textAlign()</b>, <b>textFont()</b>,
|
13341
|
-
* <b>textMode()</b>, <b>textSize()</b>, <b>textLeading()</b
|
13342
|
-
*
|
12504
|
+
* <b>textMode()</b>, <b>textSize()</b>, <b>textLeading()</b>.
|
12505
|
+
*
|
13343
12506
|
* The <b>push()</b> and <b>pop()</b> functions were added with
|
13344
12507
|
* Processing 3.5. They can be used in place of <b>pushMatrix()</b>,
|
13345
12508
|
* <b>popMatrix()</b>, <b>pushStyles()</b>, and <b>popStyles()</b>.
|
@@ -13366,9 +12529,9 @@ public class PApplet implements PConstants {
|
|
13366
12529
|
* Note that these functions are always used together. They allow
|
13367
12530
|
* you to change the style and transformation settings and later
|
13368
12531
|
* return to what you had. When a new state is started with push(),
|
13369
|
-
* it builds on the current style and transform information
|
13370
|
-
*
|
13371
|
-
*
|
12532
|
+
* it builds on the current style and transform information.
|
12533
|
+
*
|
12534
|
+
*
|
13372
12535
|
* <b>push()</b> stores information related to the current
|
13373
12536
|
* transformation state and style settings controlled by the
|
13374
12537
|
* following functions: <b>rotate()</b>, <b>translate()</b>,
|
@@ -13376,8 +12539,8 @@ public class PApplet implements PConstants {
|
|
13376
12539
|
* <b>strokeWeight()</b>, <b>strokeCap()</b>, <b>strokeJoin()</b>,
|
13377
12540
|
* <b>imageMode()</b>, <b>rectMode()</b>, <b>ellipseMode()</b>,
|
13378
12541
|
* <b>colorMode()</b>, <b>textAlign()</b>, <b>textFont()</b>,
|
13379
|
-
* <b>textMode()</b>, <b>textSize()</b>, <b>textLeading()</b
|
13380
|
-
*
|
12542
|
+
* <b>textMode()</b>, <b>textSize()</b>, <b>textLeading()</b>.
|
12543
|
+
*
|
13381
12544
|
* The <b>push()</b> and <b>pop()</b> functions were added with
|
13382
12545
|
* Processing 3.5. They can be used in place of <b>pushMatrix()</b>,
|
13383
12546
|
* <b>popMatrix()</b>, <b>pushStyles()</b>, and <b>popStyles()</b>.
|
@@ -13497,7 +12660,7 @@ public class PApplet implements PConstants {
|
|
13497
12660
|
* Rotates a shape the amount specified by the <b>angle</b> parameter.
|
13498
12661
|
* Angles should be specified in radians (values from 0 to TWO_PI) or
|
13499
12662
|
* converted to radians with the <b>radians()</b> function.
|
13500
|
-
*
|
12663
|
+
*
|
13501
12664
|
* Objects are always rotated around their relative position to the origin
|
13502
12665
|
* and positive numbers rotate objects in a clockwise direction.
|
13503
12666
|
* Transformations apply to everything that happens after and subsequent
|
@@ -13505,7 +12668,7 @@ public class PApplet implements PConstants {
|
|
13505
12668
|
* <b>rotate(HALF_PI)</b> and then <b>rotate(HALF_PI)</b> is the same as
|
13506
12669
|
* <b>rotate(PI)</b>. All tranformations are reset when <b>draw()</b>
|
13507
12670
|
* begins again.
|
13508
|
-
*
|
12671
|
+
*
|
13509
12672
|
* Technically, <b>rotate()</b> multiplies the current transformation
|
13510
12673
|
* matrix by a rotation matrix. This function can be further controlled by
|
13511
12674
|
* the <b>pushMatrix()</b> and <b>popMatrix()</b>.
|
@@ -13716,7 +12879,7 @@ public class PApplet implements PConstants {
|
|
13716
12879
|
* <b>shearX(PI/2)</b> and then <b>shearX(PI/2)</b> is the same as
|
13717
12880
|
* <b>shearX(PI)</b>. If <b>shearX()</b> is called within the
|
13718
12881
|
* <b>draw()</b>, the transformation is reset when the loop begins again.
|
13719
|
-
*
|
12882
|
+
*
|
13720
12883
|
* Technically, <b>shearX()</b> multiplies the current transformation
|
13721
12884
|
* matrix by a rotation matrix. This function can be further controlled by
|
13722
12885
|
* the <b>pushMatrix()</b> and <b>popMatrix()</b> functions.
|
@@ -13751,7 +12914,7 @@ public class PApplet implements PConstants {
|
|
13751
12914
|
* <b>shearY(PI/2)</b> and then <b>shearY(PI/2)</b> is the same as
|
13752
12915
|
* <b>shearY(PI)</b>. If <b>shearY()</b> is called within the
|
13753
12916
|
* <b>draw()</b>, the transformation is reset when the loop begins again.
|
13754
|
-
*
|
12917
|
+
*
|
13755
12918
|
* Technically, <b>shearY()</b> multiplies the current transformation
|
13756
12919
|
* matrix by a rotation matrix. This function can be further controlled by
|
13757
12920
|
* the <b>pushMatrix()</b> and <b>popMatrix()</b> functions.
|
@@ -13940,14 +13103,14 @@ public class PApplet implements PConstants {
|
|
13940
13103
|
* The <b>beginCamera()</b> and <b>endCamera()</b> functions enable
|
13941
13104
|
* advanced customization of the camera space. The functions are useful if
|
13942
13105
|
* you want to more control over camera movement, however for most users,
|
13943
|
-
* the <b>camera()</b> function will be sufficient
|
13106
|
+
* the <b>camera()</b> function will be sufficient.The camera
|
13944
13107
|
* functions will replace any transformations (such as <b>rotate()</b> or
|
13945
13108
|
* <b>translate()</b>) that occur before them in <b>draw()</b>, but they
|
13946
13109
|
* will not automatically replace the camera transform itself. For this
|
13947
13110
|
* reason, camera functions should be placed at the beginning of
|
13948
13111
|
* <b>draw()</b> (so that transformations happen afterwards), and the
|
13949
13112
|
* <b>camera()</b> function can be used after <b>beginCamera()</b> if you
|
13950
|
-
* want to reset the camera before applying transformations.<br
|
13113
|
+
* want to reset the camera before applying transformations.<br
|
13951
13114
|
* />This function sets the matrix mode to the camera matrix so calls such
|
13952
13115
|
* as <b>translate()</b>, <b>rotate()</b>, applyMatrix() and resetMatrix()
|
13953
13116
|
* affect the camera. <b>beginCamera()</b> should always be used with a
|
@@ -14261,7 +13424,7 @@ public class PApplet implements PConstants {
|
|
14261
13424
|
* transformations (scale, rotate, translate, etc.) The X value can be used
|
14262
13425
|
* to place an object in space relative to the location of the original
|
14263
13426
|
* point once the transformations are no longer in use.
|
14264
|
-
*
|
13427
|
+
*
|
14265
13428
|
* In the example, the <b>modelX()</b>, <b>modelY()</b>, and
|
14266
13429
|
* <b>modelZ()</b> functions record the location of a box in space after
|
14267
13430
|
* being placed using a series of translate and rotate commands. After
|
@@ -14290,8 +13453,8 @@ public class PApplet implements PConstants {
|
|
14290
13453
|
* returns the Y value for a given coordinate based on the current set of
|
14291
13454
|
* transformations (scale, rotate, translate, etc.) The Y value can be used
|
14292
13455
|
* to place an object in space relative to the location of the original
|
14293
|
-
* point once the transformations are no longer in use
|
14294
|
-
*
|
13456
|
+
* point once the transformations are no longer in use.
|
13457
|
+
*
|
14295
13458
|
* In the example, the <b>modelX()</b>, <b>modelY()</b>, and
|
14296
13459
|
* <b>modelZ()</b> functions record the location of a box in space after
|
14297
13460
|
* being placed using a series of translate and rotate commands. After
|
@@ -14320,8 +13483,8 @@ public class PApplet implements PConstants {
|
|
14320
13483
|
* returns the Z value for a given coordinate based on the current set of
|
14321
13484
|
* transformations (scale, rotate, translate, etc.) The Z value can be used
|
14322
13485
|
* to place an object in space relative to the location of the original
|
14323
|
-
* point once the transformations are no longer in use
|
14324
|
-
*
|
13486
|
+
* point once the transformations are no longer in use.
|
13487
|
+
*
|
14325
13488
|
* In the example, the <b>modelX()</b>, <b>modelY()</b>, and
|
14326
13489
|
* <b>modelZ()</b> functions record the location of a box in space after
|
14327
13490
|
* being placed using a series of translate and rotate commands. After
|
@@ -14353,7 +13516,7 @@ public class PApplet implements PConstants {
|
|
14353
13516
|
* <b>pushStyle()</b>, it builds on the current style information. The
|
14354
13517
|
* <b>pushStyle()</b> and <b>popStyle()</b> functions can be embedded to
|
14355
13518
|
* provide more control (see the second example above for a demonstration.)
|
14356
|
-
*
|
13519
|
+
*
|
14357
13520
|
* The style information controlled by the following functions are included
|
14358
13521
|
* in the style:
|
14359
13522
|
* fill(), stroke(), tint(), strokeWeight(), strokeCap(), strokeJoin(),
|
@@ -14405,7 +13568,7 @@ public class PApplet implements PConstants {
|
|
14405
13568
|
*
|
14406
13569
|
* Sets the width of the stroke used for lines, points, and the border
|
14407
13570
|
* around shapes. All widths are set in units of pixels.
|
14408
|
-
*
|
13571
|
+
*
|
14409
13572
|
* When drawing with P3D, series of connected lines (such as the stroke
|
14410
13573
|
* around a polygon, triangle, or ellipse) produce unattractive results
|
14411
13574
|
* when a thick stroke weight is set (<a
|
@@ -14436,7 +13599,7 @@ public class PApplet implements PConstants {
|
|
14436
13599
|
* are either mitered, beveled, or rounded and specified with the
|
14437
13600
|
* corresponding parameters MITER, BEVEL, and ROUND. The default joint is
|
14438
13601
|
* MITER.
|
14439
|
-
*
|
13602
|
+
*
|
14440
13603
|
* This function is not available with the P3D renderer, (<a
|
14441
13604
|
* href="http://code.google.com/p/processing/issues/detail?id=123">see
|
14442
13605
|
* Issue 123</a>). More information about the renderers can be found in the
|
@@ -14462,7 +13625,7 @@ public class PApplet implements PConstants {
|
|
14462
13625
|
* Sets the style for rendering line endings. These ends are either
|
14463
13626
|
* squared, extended, or rounded and specified with the corresponding
|
14464
13627
|
* parameters SQUARE, PROJECT, and ROUND. The default cap is ROUND.
|
14465
|
-
*
|
13628
|
+
*
|
14466
13629
|
* This function is not available with the P3D renderer (<a
|
14467
13630
|
* href="http://code.google.com/p/processing/issues/detail?id=123">see
|
14468
13631
|
* Issue 123</a>). More information about the renderers can be found in the
|
@@ -14509,7 +13672,7 @@ public class PApplet implements PConstants {
|
|
14509
13672
|
* is either specified in terms of the RGB or HSB color depending on the
|
14510
13673
|
* current <b>colorMode()</b> (the default color space is RGB, with each
|
14511
13674
|
* value in the range from 0 to 255).
|
14512
|
-
*
|
13675
|
+
*
|
14513
13676
|
* When using hexadecimal notation to specify a color, use "#" or "0x"
|
14514
13677
|
* before the values (e.g. #CCFFAA, 0xFFCCFFAA). The # syntax uses six
|
14515
13678
|
* digits to specify a color (the way colors are specified in HTML and
|
@@ -14517,7 +13680,7 @@ public class PApplet implements PConstants {
|
|
14517
13680
|
* hexadecimal value must be specified with eight characters; the first two
|
14518
13681
|
* characters define the alpha component and the remainder the red, green,
|
14519
13682
|
* and blue components.
|
14520
|
-
*
|
13683
|
+
*
|
14521
13684
|
* The value for the parameter "gray" must be less than or equal to the
|
14522
13685
|
* current maximum value as specified by <b>colorMode()</b>. The default
|
14523
13686
|
* maximum value is 255.
|
@@ -14606,25 +13769,25 @@ public class PApplet implements PConstants {
|
|
14606
13769
|
* ( begin auto-generated from tint.xml )
|
14607
13770
|
*
|
14608
13771
|
* Sets the fill value for displaying images. Images can be tinted to
|
14609
|
-
* specified colors or made transparent by setting the alpha
|
14610
|
-
*
|
13772
|
+
* specified colors or made transparent by setting the alpha.
|
13773
|
+
*
|
14611
13774
|
* To make an image transparent, but not change it's color, use white as
|
14612
13775
|
* the tint color and specify an alpha value. For instance, tint(255, 128)
|
14613
13776
|
* will make an image 50% transparent (unless <b>colorMode()</b> has been
|
14614
|
-
* used)
|
14615
|
-
*
|
13777
|
+
* used).
|
13778
|
+
*
|
14616
13779
|
* When using hexadecimal notation to specify a color, use "#" or "0x"
|
14617
13780
|
* before the values (e.g. #CCFFAA, 0xFFCCFFAA). The # syntax uses six
|
14618
13781
|
* digits to specify a color (the way colors are specified in HTML and
|
14619
13782
|
* CSS). When using the hexadecimal notation starting with "0x", the
|
14620
13783
|
* hexadecimal value must be specified with eight characters; the first two
|
14621
13784
|
* characters define the alpha component and the remainder the red, green,
|
14622
|
-
* and blue components
|
14623
|
-
*
|
13785
|
+
* and blue components.
|
13786
|
+
*
|
14624
13787
|
* The value for the parameter "gray" must be less than or equal to the
|
14625
13788
|
* current maximum value as specified by <b>colorMode()</b>. The default
|
14626
|
-
* maximum value is 255
|
14627
|
-
*
|
13789
|
+
* maximum value is 255.
|
13790
|
+
*
|
14628
13791
|
* The <b>tint()</b> function is also used to control the coloring of
|
14629
13792
|
* textures in 3D.
|
14630
13793
|
*
|
@@ -14711,7 +13874,7 @@ public class PApplet implements PConstants {
|
|
14711
13874
|
* color is either specified in terms of the RGB or HSB color depending on
|
14712
13875
|
* the current <b>colorMode()</b> (the default color space is RGB, with
|
14713
13876
|
* each value in the range from 0 to 255).
|
14714
|
-
*
|
13877
|
+
*
|
14715
13878
|
* When using hexadecimal notation to specify a color, use "#" or "0x"
|
14716
13879
|
* before the values (e.g. #CCFFAA, 0xFFCCFFAA). The # syntax uses six
|
14717
13880
|
* digits to specify a color (the way colors are specified in HTML and
|
@@ -14719,11 +13882,11 @@ public class PApplet implements PConstants {
|
|
14719
13882
|
* hexadecimal value must be specified with eight characters; the first two
|
14720
13883
|
* characters define the alpha component and the remainder the red, green,
|
14721
13884
|
* and blue components.
|
14722
|
-
*
|
13885
|
+
*
|
14723
13886
|
* The value for the parameter "gray" must be less than or equal to the
|
14724
13887
|
* current maximum value as specified by <b>colorMode()</b>. The default
|
14725
13888
|
* maximum value is 255.
|
14726
|
-
*
|
13889
|
+
*
|
14727
13890
|
* To change the color of an image (or a texture), use tint().
|
14728
13891
|
*
|
14729
13892
|
* ( end auto-generated )
|
@@ -14859,6 +14022,8 @@ public class PApplet implements PConstants {
|
|
14859
14022
|
|
14860
14023
|
/**
|
14861
14024
|
* gray number specifying value between white and black
|
14025
|
+
*
|
14026
|
+
* @param gray value between black and white, by default 0 to 255
|
14862
14027
|
*/
|
14863
14028
|
public void specular(float gray) {
|
14864
14029
|
if (recorder != null) recorder.specular(gray);
|
@@ -14924,6 +14089,8 @@ public class PApplet implements PConstants {
|
|
14924
14089
|
|
14925
14090
|
/**
|
14926
14091
|
* gray number specifying value between white and black
|
14092
|
+
*
|
14093
|
+
* @param gray value between black and white, by default 0 to 255
|
14927
14094
|
*/
|
14928
14095
|
public void emissive(float gray) {
|
14929
14096
|
if (recorder != null) recorder.emissive(gray);
|
@@ -15148,9 +14315,9 @@ public class PApplet implements PConstants {
|
|
15148
14315
|
*
|
15149
14316
|
* Sets the falloff rates for point lights, spot lights, and ambient
|
15150
14317
|
* lights. The parameters are used to determine the falloff with the
|
15151
|
-
* following equation
|
15152
|
-
* vertex
|
15153
|
-
* QUADRATIC)
|
14318
|
+
* following equation:d = distance from light position to
|
14319
|
+
* vertex positionfalloff = 1 / (CONSTANT + d * LINEAR + (d*d) *
|
14320
|
+
* QUADRATIC)Like <b>fill()</b>, it affects only the elements
|
15154
14321
|
* which are created after it in the code. The default value if
|
15155
14322
|
* <b>LightFalloff(1.0, 0.0, 0.0)</b>. Thinking about an ambient light with
|
15156
14323
|
* a falloff can be tricky. It is used, for example, if you wanted a region
|
@@ -15215,13 +14382,13 @@ public class PApplet implements PConstants {
|
|
15215
14382
|
* of the Processing window. The default background is light gray. In the
|
15216
14383
|
* <b>draw()</b> function, the background color is used to clear the
|
15217
14384
|
* display window at the beginning of each frame.
|
15218
|
-
*
|
14385
|
+
*
|
15219
14386
|
* An image can also be used as the background for a sketch, however its
|
15220
14387
|
* width and height must be the same size as the sketch window. To resize
|
15221
14388
|
* an image 'b' to the size of the sketch window, use b.resize(width, height).
|
15222
|
-
*
|
14389
|
+
*
|
15223
14390
|
* Images used as background will ignore the current <b>tint()</b> setting.
|
15224
|
-
*
|
14391
|
+
*
|
15225
14392
|
* It is not possible to use transparency (alpha) in background colors with
|
15226
14393
|
* the main drawing surface, however they will work properly with <b>createGraphics()</b>.
|
15227
14394
|
*
|
@@ -15304,13 +14471,13 @@ public class PApplet implements PConstants {
|
|
15304
14471
|
/**
|
15305
14472
|
* Takes an RGB or ARGB image and sets it as the background.
|
15306
14473
|
* The width and height of the image must be the same size as the sketch.
|
15307
|
-
* Use image.resize(width, height) to make short work of such a task
|
15308
|
-
*
|
14474
|
+
* Use image.resize(width, height) to make short work of such a task.
|
14475
|
+
*
|
15309
14476
|
* Note that even if the image is set as RGB, the high 8 bits of each pixel
|
15310
14477
|
* should be set opaque (0xFF000000) because the image data will be copied
|
15311
14478
|
* directly to the screen, and non-opaque background images may have strange
|
15312
|
-
* behavior. Use image.filter(OPAQUE) to handle this easily
|
15313
|
-
*
|
14479
|
+
* behavior. Use image.filter(OPAQUE) to handle this easily.
|
14480
|
+
*
|
15314
14481
|
* When using 3D, this will also clear the zbuffer (if it exists).
|
15315
14482
|
*
|
15316
14483
|
* @param image PImage to set as background (must be same size as the sketch window)
|
@@ -15404,12 +14571,12 @@ public class PApplet implements PConstants {
|
|
15404
14571
|
*
|
15405
14572
|
* Extracts the red value from a color, scaled to match current
|
15406
14573
|
* <b>colorMode()</b>. This value is always returned as a float so be
|
15407
|
-
* careful not to assign it to an int value
|
14574
|
+
* careful not to assign it to an int value.The red() function
|
15408
14575
|
* is easy to use and undestand, but is slower than another technique. To
|
15409
14576
|
* achieve the same results when working in <b>colorMode(RGB, 255)</b>, but
|
15410
14577
|
* with greater speed, use the >> (right shift) operator with a bit
|
15411
14578
|
* mask. For example, the following two lines of code are equivalent:<br
|
15412
|
-
* /><pre>float r1 = red(myColor)
|
14579
|
+
* /><pre>float r1 = red(myColor);float r2 = myColor >> 16
|
15413
14580
|
* & 0xFF;</pre>
|
15414
14581
|
*
|
15415
14582
|
* ( end auto-generated )
|
@@ -15435,12 +14602,12 @@ public class PApplet implements PConstants {
|
|
15435
14602
|
*
|
15436
14603
|
* Extracts the green value from a color, scaled to match current
|
15437
14604
|
* <b>colorMode()</b>. This value is always returned as a float so be
|
15438
|
-
* careful not to assign it to an int value
|
14605
|
+
* careful not to assign it to an int value.The <b>green()</b>
|
15439
14606
|
* function is easy to use and undestand, but is slower than another
|
15440
14607
|
* technique. To achieve the same results when working in <b>colorMode(RGB,
|
15441
14608
|
* 255)</b>, but with greater speed, use the >> (right shift)
|
15442
14609
|
* operator with a bit mask. For example, the following two lines of code
|
15443
|
-
* are equivalent:<
|
14610
|
+
* are equivalent:<pre>float r1 = green(myColor);float r2 =
|
15444
14611
|
* myColor >> 8 & 0xFF;</pre>
|
15445
14612
|
*
|
15446
14613
|
* ( end auto-generated )
|
@@ -15466,12 +14633,12 @@ public class PApplet implements PConstants {
|
|
15466
14633
|
*
|
15467
14634
|
* Extracts the blue value from a color, scaled to match current
|
15468
14635
|
* <b>colorMode()</b>. This value is always returned as a float so be
|
15469
|
-
* careful not to assign it to an int value
|
14636
|
+
* careful not to assign it to an int value.The <b>blue()</b>
|
15470
14637
|
* function is easy to use and undestand, but is slower than another
|
15471
14638
|
* technique. To achieve the same results when working in <b>colorMode(RGB,
|
15472
14639
|
* 255)</b>, but with greater speed, use a bit mask to remove the other
|
15473
14640
|
* color components. For example, the following two lines of code are
|
15474
|
-
* equivalent:<
|
14641
|
+
* equivalent:<pre>float r1 = blue(myColor);float r2 = myColor
|
15475
14642
|
* & 0xFF;</pre>
|
15476
14643
|
*
|
15477
14644
|
* ( end auto-generated )
|
@@ -15613,6 +14780,15 @@ public class PApplet implements PConstants {
|
|
15613
14780
|
}
|
15614
14781
|
|
15615
14782
|
|
14783
|
+
/**
|
14784
|
+
* Check the alpha on an image, using a really primitive loop.
|
14785
|
+
*/
|
14786
|
+
public void checkAlpha() {
|
14787
|
+
if (recorder != null) recorder.checkAlpha();
|
14788
|
+
g.checkAlpha();
|
14789
|
+
}
|
14790
|
+
|
14791
|
+
|
15616
14792
|
/**
|
15617
14793
|
* ( begin auto-generated from PImage_get.xml )
|
15618
14794
|
*
|
@@ -15622,14 +14798,14 @@ public class PApplet implements PConstants {
|
|
15622
14798
|
* the display window by specifying an additional <b>width</b> and
|
15623
14799
|
* <b>height</b> parameter. When getting an image, the <b>x</b> and
|
15624
14800
|
* <b>y</b> parameters define the coordinates for the upper-left corner of
|
15625
|
-
* the image, regardless of the current <b>imageMode()</b
|
15626
|
-
*
|
14801
|
+
* the image, regardless of the current <b>imageMode()</b>.
|
14802
|
+
*
|
15627
14803
|
* If the pixel requested is outside of the image window, black is
|
15628
14804
|
* returned. The numbers returned are scaled according to the current color
|
15629
14805
|
* ranges, but only RGB values are returned by this function. For example,
|
15630
14806
|
* even though you may have drawn a shape with <b>colorMode(HSB)</b>, the
|
15631
|
-
* numbers returned will be in RGB format
|
15632
|
-
*
|
14807
|
+
* numbers returned will be in RGB format.
|
14808
|
+
*
|
15633
14809
|
* Getting the color of a single pixel with <b>get(x, y)</b> is easy, but
|
15634
14810
|
* not as fast as grabbing the data directly from <b>pixels[]</b>. The
|
15635
14811
|
* equivalent statement to <b>get(x, y)</b> using <b>pixels[]</b> is
|
@@ -15696,15 +14872,15 @@ public class PApplet implements PConstants {
|
|
15696
14872
|
* ( begin auto-generated from PImage_set.xml )
|
15697
14873
|
*
|
15698
14874
|
* Changes the color of any pixel or writes an image directly into the
|
15699
|
-
* display window
|
15700
|
-
*
|
14875
|
+
* display window.
|
14876
|
+
*
|
15701
14877
|
* The <b>x</b> and <b>y</b> parameters specify the pixel to change and the
|
15702
14878
|
* <b>color</b> parameter specifies the color value. The color parameter is
|
15703
14879
|
* affected by the current color mode (the default is RGB values from 0 to
|
15704
14880
|
* 255). When setting an image, the <b>x</b> and <b>y</b> parameters define
|
15705
14881
|
* the coordinates for the upper-left corner of the image, regardless of
|
15706
14882
|
* the current <b>imageMode()</b>.
|
15707
|
-
*
|
14883
|
+
*
|
15708
14884
|
* Setting the color of a single pixel with <b>set(x, y)</b> is easy, but
|
15709
14885
|
* not as fast as putting the data directly into <b>pixels[]</b>. The
|
15710
14886
|
* equivalent statement to <b>set(x, y, #000000)</b> using <b>pixels[]</b>
|
@@ -15749,8 +14925,8 @@ public class PApplet implements PConstants {
|
|
15749
14925
|
* Masks part of an image from displaying by loading another image and
|
15750
14926
|
* using it as an alpha channel. This mask image should only contain
|
15751
14927
|
* grayscale data, but only the blue color channel is used. The mask image
|
15752
|
-
* needs to be the same size as the image to which it is applied
|
15753
|
-
*
|
14928
|
+
* needs to be the same size as the image to which it is applied.
|
14929
|
+
*
|
15754
14930
|
* In addition to using a mask image, an integer array containing the alpha
|
15755
14931
|
* channel data can be specified directly. This method is useful for
|
15756
14932
|
* creating dynamically generated alpha masks. This array must be of the
|
@@ -15793,28 +14969,28 @@ public class PApplet implements PConstants {
|
|
15793
14969
|
/**
|
15794
14970
|
* ( begin auto-generated from PImage_filter.xml )
|
15795
14971
|
*
|
15796
|
-
* Filters an image as defined by one of the following modes
|
15797
|
-
*
|
14972
|
+
* Filters an image as defined by one of the following modes:
|
14973
|
+
* THRESHOLD - converts the image to black and white pixels depending if
|
15798
14974
|
* they are above or below the threshold defined by the level parameter.
|
15799
14975
|
* The level must be between 0.0 (black) and 1.0(white). If no level is
|
15800
|
-
* specified, 0.5 is used
|
15801
|
-
*
|
15802
|
-
* GRAY - converts any colors in the image to grayscale equivalents
|
15803
|
-
*
|
15804
|
-
* INVERT - sets each pixel to its inverse value
|
15805
|
-
*
|
14976
|
+
* specified, 0.5 is used.
|
14977
|
+
*
|
14978
|
+
* GRAY - converts any colors in the image to grayscale equivalents
|
14979
|
+
*
|
14980
|
+
* INVERT - sets each pixel to its inverse value
|
14981
|
+
*
|
15806
14982
|
* POSTERIZE - limits each channel of the image to the number of colors
|
15807
|
-
* specified as the level parameter
|
15808
|
-
*
|
14983
|
+
* specified as the level parameter
|
14984
|
+
*
|
15809
14985
|
* BLUR - executes a Guassian blur with the level parameter specifying the
|
15810
14986
|
* extent of the blurring. If no level parameter is used, the blur is
|
15811
|
-
* equivalent to Guassian blur of radius 1
|
15812
|
-
*
|
15813
|
-
* OPAQUE - sets the alpha channel to entirely opaque
|
15814
|
-
*
|
14987
|
+
* equivalent to Guassian blur of radius 1
|
14988
|
+
*
|
14989
|
+
* OPAQUE - sets the alpha channel to entirely opaque
|
14990
|
+
*
|
15815
14991
|
* ERODE - reduces the light areas with the amount defined by the level
|
15816
|
-
* parameter
|
15817
|
-
*
|
14992
|
+
* parameter
|
14993
|
+
*
|
15818
14994
|
* DILATE - increases the light areas with the amount defined by the level parameter
|
15819
14995
|
*
|
15820
14996
|
* ( end auto-generated )
|
@@ -15833,7 +15009,7 @@ public class PApplet implements PConstants {
|
|
15833
15009
|
* </UL>
|
15834
15010
|
* Luminance conversion code contributed by
|
15835
15011
|
* <A HREF="http://www.toxi.co.uk">toxi</A>
|
15836
|
-
*
|
15012
|
+
*
|
15837
15013
|
* Gaussian blur code contributed by
|
15838
15014
|
* <A HREF="http://incubator.quasimondo.com">Mario Klingemann</A>
|
15839
15015
|
*
|
@@ -15857,7 +15033,7 @@ public class PApplet implements PConstants {
|
|
15857
15033
|
* source pixels to fit the specified target region. No alpha information
|
15858
15034
|
* is used in the process, however if the source image has an alpha channel
|
15859
15035
|
* set, it will be copied as well.
|
15860
|
-
*
|
15036
|
+
*
|
15861
15037
|
* As of release 0149, this function ignores <b>imageMode()</b>.
|
15862
15038
|
*
|
15863
15039
|
* ( end auto-generated )
|
@@ -15907,47 +15083,47 @@ public class PApplet implements PConstants {
|
|
15907
15083
|
* Blends a region of pixels into the image specified by the <b>img</b>
|
15908
15084
|
* parameter. These copies utilize full alpha channel support and a choice
|
15909
15085
|
* of the following modes to blend the colors of source pixels (A) with the
|
15910
|
-
* ones of pixels in the destination image (B)
|
15911
|
-
*
|
15912
|
-
* BLEND - linear interpolation of colours: C = A*factor + B
|
15913
|
-
*
|
15914
|
-
* ADD - additive blending with white clip: C = min(A*factor + B, 255)
|
15915
|
-
*
|
15086
|
+
* ones of pixels in the destination image (B):
|
15087
|
+
*
|
15088
|
+
* BLEND - linear interpolation of colours: C = A*factor + B
|
15089
|
+
*
|
15090
|
+
* ADD - additive blending with white clip: C = min(A*factor + B, 255)
|
15091
|
+
*
|
15916
15092
|
* SUBTRACT - subtractive blending with black clip: C = max(B - A*factor,
|
15917
|
-
* 0)
|
15918
|
-
*
|
15919
|
-
* DARKEST - only the darkest colour succeeds: C = min(A*factor, B)
|
15920
|
-
*
|
15921
|
-
* LIGHTEST - only the lightest colour succeeds: C = max(A*factor, B)
|
15922
|
-
*
|
15923
|
-
* DIFFERENCE - subtract colors from underlying image
|
15924
|
-
*
|
15925
|
-
* EXCLUSION - similar to DIFFERENCE, but less extreme
|
15926
|
-
*
|
15927
|
-
* MULTIPLY - Multiply the colors, result will always be darker
|
15928
|
-
*
|
15929
|
-
* SCREEN - Opposite multiply, uses inverse values of the colors
|
15930
|
-
*
|
15093
|
+
* 0)
|
15094
|
+
*
|
15095
|
+
* DARKEST - only the darkest colour succeeds: C = min(A*factor, B)
|
15096
|
+
*
|
15097
|
+
* LIGHTEST - only the lightest colour succeeds: C = max(A*factor, B)
|
15098
|
+
*
|
15099
|
+
* DIFFERENCE - subtract colors from underlying image.
|
15100
|
+
*
|
15101
|
+
* EXCLUSION - similar to DIFFERENCE, but less extreme.
|
15102
|
+
*
|
15103
|
+
* MULTIPLY - Multiply the colors, result will always be darker.
|
15104
|
+
*
|
15105
|
+
* SCREEN - Opposite multiply, uses inverse values of the colors.
|
15106
|
+
*
|
15931
15107
|
* OVERLAY - A mix of MULTIPLY and SCREEN. Multiplies dark values,
|
15932
|
-
* and screens light values
|
15933
|
-
*
|
15934
|
-
* HARD_LIGHT - SCREEN when greater than 50% gray, MULTIPLY when lower
|
15935
|
-
*
|
15108
|
+
* and screens light values.
|
15109
|
+
*
|
15110
|
+
* HARD_LIGHT - SCREEN when greater than 50% gray, MULTIPLY when lower.
|
15111
|
+
*
|
15936
15112
|
* SOFT_LIGHT - Mix of DARKEST and LIGHTEST.
|
15937
|
-
* Works like OVERLAY, but not as harsh
|
15938
|
-
*
|
15113
|
+
* Works like OVERLAY, but not as harsh.
|
15114
|
+
*
|
15939
15115
|
* DODGE - Lightens light tones and increases contrast, ignores darks.
|
15940
|
-
* Called "Color Dodge" in Illustrator and Photoshop
|
15941
|
-
*
|
15116
|
+
* Called "Color Dodge" in Illustrator and Photoshop.
|
15117
|
+
*
|
15942
15118
|
* BURN - Darker areas are applied, increasing contrast, ignores lights.
|
15943
|
-
* Called "Color Burn" in Illustrator and Photoshop
|
15944
|
-
*
|
15119
|
+
* Called "Color Burn" in Illustrator and Photoshop.
|
15120
|
+
*
|
15945
15121
|
* All modes use the alpha information (highest byte) of source image
|
15946
15122
|
* pixels as the blending factor. If the source and destination regions are
|
15947
15123
|
* different sizes, the image will be automatically resized to match the
|
15948
15124
|
* destination size. If the <b>srcImg</b> parameter is not used, the
|
15949
|
-
* display window is used as the source image
|
15950
|
-
*
|
15125
|
+
* display window is used as the source image.
|
15126
|
+
*
|
15951
15127
|
* As of release 0149, this function ignores <b>imageMode()</b>.
|
15952
15128
|
*
|
15953
15129
|
* ( end auto-generated )
|