From f09bda22e6f0d316a4e5d3b47ed26a15501c19a8 Mon Sep 17 00:00:00 2001 From: Quin Kennedy Date: Sun, 29 Apr 2018 10:51:31 -0700 Subject: [PATCH 001/299] Including SVG renderer in documentation --- content/api_en/createGraphics.xml | 4 ++-- content/api_en/size.xml | 2 ++ content/static/tutorials/p3d/index.html | 2 +- templates/template.cover.html | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/content/api_en/createGraphics.xml b/content/api_en/createGraphics.xml index 9cd5a982b..c817adad6 100755 --- a/content/api_en/createGraphics.xml +++ b/content/api_en/createGraphics.xml @@ -30,9 +30,9 @@ void draw() { PGraphics object. Use this class if you need to draw into an off-screen graphics buffer. The first two parameters define the width and height in pixels. The third, optional parameter specifies the renderer. It can be defined as P2D, P3D, or PDF. If the third parameter isn't used, the default renderer is set. The PDF renderer requires the filename parameter.
+Creates and returns a new PGraphics object. Use this class if you need to draw into an off-screen graphics buffer. The first two parameters define the width and height in pixels. The third, optional parameter specifies the renderer. It can be defined as P2D, P3D, PDF, or SVG. If the third parameter isn't used, the default renderer is set. The PDF and SVG renderers require the filename parameter.

-It's important to consider the renderer used with createGraphics() in relation to the main renderer specified in size(). For example, it's only possible to use P2D or P3D with createGraphics() when one of them is defined in size(). Unlike Processing 1.0, P2D and P3D use OpenGL for drawing, and when using an OpenGL renderer it's necessary for the main drawing surface to be OpenGL-based. If P2D or P3D are used as the renderer in size(), then any of the options can be used with createGraphics(). If the default renderer is used in size(), then only the default or PDF can be used with createGraphics().
+It's important to consider the renderer used with createGraphics() in relation to the main renderer specified in size(). For example, it's only possible to use P2D or P3D with createGraphics() when one of them is defined in size(). Unlike Processing 1.0, P2D and P3D use OpenGL for drawing, and when using an OpenGL renderer it's necessary for the main drawing surface to be OpenGL-based. If P2D or P3D are used as the renderer in size(), then any of the options can be used with createGraphics(). If the default renderer is used in size(), then only the default, PDF, or SVG can be used with createGraphics().

It's important to call any drawing functions between beginDraw() and endDraw() statements. This is also true for any functions that affect drawing, such as smooth() or colorMode().

diff --git a/content/api_en/size.xml b/content/api_en/size.xml index 50ddae1f3..1f1a2b87e 100755 --- a/content/api_en/size.xml +++ b/content/api_en/size.xml @@ -73,6 +73,8 @@ The renderer parameter selects which rendering engine to use. For example
PDF: The PDF renderer draws 2D graphics directly to an Acrobat PDF file. This produces excellent results when you need vector shapes for high-resolution output or printing. You must first use Import Library → PDF to make use of the library. More information can be found in the PDF library reference.

+SVG: The SVG renderer draws 2D graphics directly to an SVG file. This is great for importing into other vector programs or using for digital fabrication. You must first use Import Library → SVG Export to make use of the library.
+
As of Processing 3.0, to use variables as the parameters to size() function, place the size() function within the settings() function (instead of setup()). There is more information about this on the settings() reference page.

]]>
diff --git a/content/static/tutorials/p3d/index.html b/content/static/tutorials/p3d/index.html index 586b55d24..22bfd8eb1 100644 --- a/content/static/tutorials/p3d/index.html +++ b/content/static/tutorials/p3d/index.html @@ -10,7 +10,7 @@

P3D

Daniel Shiffman

- There are four render modes: the default renderer, P2D, P3D, and PDF. To use a non-default renderer, you can specify via the size() function. + There are five render modes: the default renderer, P2D, P3D, PDF, and SVG. To use a non-default renderer, you can specify via the size() function.

diff --git a/templates/template.cover.html b/templates/template.cover.html
index 31fb8b668..14c2cf8ab 100755
--- a/templates/template.cover.html
+++ b/templates/template.cover.html
@@ -15,7 +15,7 @@
         
             

From 2785a455e5f00fe745cf6ffc00f9b03c40b7da0b Mon Sep 17 00:00:00 2001
From: gohai 
Date: Sun, 1 Jul 2018 12:45:42 -0700
Subject: [PATCH 006/299] IO: Use INPUT_PULLUP for digitalRead(), pinMode()
 examples

---
 content/api_en/LIB_io/GPIO_digitalRead.xml | 17 +++++++++--------
 content/api_en/LIB_io/GPIO_pinMode.xml     | 17 +++++++++--------
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/content/api_en/LIB_io/GPIO_digitalRead.xml b/content/api_en/LIB_io/GPIO_digitalRead.xml
index 2efc9fbb1..4a8c8d36d 100755
--- a/content/api_en/LIB_io/GPIO_digitalRead.xml
+++ b/content/api_en/LIB_io/GPIO_digitalRead.xml
@@ -14,20 +14,21 @@
 
Date: Wed, 4 Jul 2018 10:49:03 +0200
Subject: [PATCH 007/299] Set sound library docs to be built from rewrite
 repository

---
 generate/reference.php | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/generate/reference.php b/generate/reference.php
index b1a0aeeed..1f9f27b67 100644
--- a/generate/reference.php
+++ b/generate/reference.php
@@ -38,7 +38,9 @@ function out($output) {
 out("Pulling in latest changes from processing/processing-sound/...");
 
 $soundRepoPath = "{$path}../processing-sound";
-$shell_output = shell_exec("cd $soundRepoPath && /usr/bin/git pull https://github.com/processing/processing-sound/ 2>&1");
+//$shell_output = shell_exec("cd $soundRepoPath && /usr/bin/git pull https://github.com/processing/processing-sound/ 2>&1");
+// clone new processing-sound library from work-in-progress repository instead
+$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/kevinstadler/processing-sound.git . 2>&1");
 
 out($shell_output);
 out("---------------");
@@ -84,4 +86,4 @@ function out($output) {
 $execution_time = round($benchmark_end - $benchmark_start, 4);
 
 out("Generated files in $execution_time seconds.");
-?>
\ No newline at end of file
+?>

From 7f0917425b83ee3c98cd823bf1d7df746c57ff14 Mon Sep 17 00:00:00 2001
From: gohai 
Date: Wed, 4 Jul 2018 08:54:30 -0700
Subject: [PATCH 008/299] Revert to the previous processing-sound for the time
 being

---
 generate/reference.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/generate/reference.php b/generate/reference.php
index 1f9f27b67..5e2a7532c 100644
--- a/generate/reference.php
+++ b/generate/reference.php
@@ -40,7 +40,7 @@ function out($output) {
 $soundRepoPath = "{$path}../processing-sound";
 //$shell_output = shell_exec("cd $soundRepoPath && /usr/bin/git pull https://github.com/processing/processing-sound/ 2>&1");
 // clone new processing-sound library from work-in-progress repository instead
-$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/kevinstadler/processing-sound.git . 2>&1");
+$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/processing/processing-sound.git . 2>&1");
 
 out($shell_output);
 out("---------------");

From 885cae5590d9a5ff224cf14cd3033134c946f821 Mon Sep 17 00:00:00 2001
From: gohai 
Date: Sun, 22 Jul 2018 10:14:14 -0700
Subject: [PATCH 009/299] Update ARM point-release download link

---
 content/static/download.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/content/static/download.html b/content/static/download.html
index 25d1722a9..fdead2017 100644
--- a/content/static/download.html
+++ b/content/static/download.html
@@ -18,7 +18,7 @@ 

Download Processing. Process Linux 32-bit
- Linux ARM
+ Linux ARM
(running on Pi?)
  • Mac OS X
  • From 5979a1c62b2181cc385313a249134b41f13a6c05 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 26 Jul 2018 18:39:57 -0400 Subject: [PATCH 010/299] adding 3.4 --- content/static/download.html | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index fdead2017..75fa68a49 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -9,18 +9,16 @@

    Download Processing. Process
    - 3.3.7 + 3.4 (13 March 2018)
    @@ -41,6 +39,16 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.4 + (26 July 2018) + Win 32 + Win 64 + Linux 32 + Linux 64 + Linux ARMv6hf + Mac OS X +
  • 3.3.7 (13 March 2018) @@ -51,6 +59,7 @@

    Stable Releases

    Linux ARMv6hf Mac OS X
  • +
    3.4 - (13 March 2018) + (26 July 2018)
    • Windows 64-bit
      Windows 32-bit
    • From 907f7732d86d5e450e926c6d4f241118a7c8db5b Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 27 Jul 2018 09:53:35 -0400 Subject: [PATCH 012/299] Updated Python Mode URL. --- contrib_generate/sources.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 4a8afa5d7..0cf9cd732 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -302,8 +302,8 @@ 101 \ https://github.com/processing/processing-android/releases/download/latest/AndroidMode.txt # 122 \ http://galsasson.com/tweakmode/tweakmode.txt # 124 \ http://download.processing.org/pdeX.txt -142 \ http://py.processing.org/PythonMode.txt +# 142 \ http://py.processing.org/PythonMode.txt 162 \ https://github.com/joelmoniz/REPLmode/releases/download/latest/REPLMode.txt -169 \ http://py.processing.org/3/PythonMode.txt +169 \ https://py.processing.org/3/PythonMode.txt 199 \ https://github.com/fathominfo/processing-p5js-mode/releases/download/latest/p5jsMode.txt 220 \ http://gaocegege.com/Processing.R/RLangMode.txt From 8d25b045fc95dd84f494bd0a19a1374e8adf6bc8 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 27 Jul 2018 09:56:27 -0400 Subject: [PATCH 013/299] Fixed date in 3.4 version link. --- content/static/download.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/download.html b/content/static/download.html index 75fa68a49..ed0664dc1 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -10,7 +10,7 @@

      Download Processing. Process
      3.4 - (13 March 2018) + (26 July 2018)
      • Windows 64-bit
        Windows 32-bit
      • From 07e99f57ab02f2c243ed4fd16cc131e0dd79d9b2 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 10:31:09 +0200 Subject: [PATCH 014/299] Move sampleRate doc from SoundFile to AudioSample --- ...oundFile_sampleRate.xml => AudioSample_sampleRate.xml} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename content/api_en/LIB_sound/{SoundFile_sampleRate.xml => AudioSample_sampleRate.xml} (78%) diff --git a/content/api_en/LIB_sound/SoundFile_sampleRate.xml b/content/api_en/LIB_sound/AudioSample_sampleRate.xml similarity index 78% rename from content/api_en/LIB_sound/SoundFile_sampleRate.xml rename to content/api_en/LIB_sound/AudioSample_sampleRate.xml index 38e25aff2..f9b8b163e 100755 --- a/content/api_en/LIB_sound/SoundFile_sampleRate.xml +++ b/content/api_en/LIB_sound/AudioSample_sampleRate.xml @@ -13,15 +13,15 @@ From 46829af1728980ea9799736b7420502cda8d8122 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 10:40:02 +0200 Subject: [PATCH 015/299] Update SoundFile XML documentation (refs kevinstadler/processing-sound#8) --- content/api_en/LIB_sound/SoundFile.xml | 5 +++-- content/api_en/LIB_sound/SoundFile_add.xml | 6 +++--- content/api_en/LIB_sound/SoundFile_amp.xml | 2 +- .../api_en/LIB_sound/SoundFile_channels.xml | 4 ++-- content/api_en/LIB_sound/SoundFile_cue.xml | 4 ++-- .../api_en/LIB_sound/SoundFile_duration.xml | 4 ++-- content/api_en/LIB_sound/SoundFile_frames.xml | 6 +++--- content/api_en/LIB_sound/SoundFile_jump.xml | 4 ++-- content/api_en/LIB_sound/SoundFile_loop.xml | 2 +- content/api_en/LIB_sound/SoundFile_pan.xml | 4 ++-- content/api_en/LIB_sound/SoundFile_play.xml | 2 +- content/api_en/LIB_sound/SoundFile_rate.xml | 3 +-- content/api_en/LIB_sound/SoundFile_set.xml | 15 +++++++-------- content/api_en/LIB_sound/SoundFile_stop.xml | 18 +++++++++--------- 14 files changed, 39 insertions(+), 40 deletions(-) diff --git a/content/api_en/LIB_sound/SoundFile.xml b/content/api_en/LIB_sound/SoundFile.xml index db860e881..d2f1b022f 100755 --- a/content/api_en/LIB_sound/SoundFile.xml +++ b/content/api_en/LIB_sound/SoundFile.xml @@ -32,6 +32,7 @@ void draw() { This is a Soundfile Player which allows to play back and manipulate soundfiles. Supported formats are: WAV, AIF/AIFF, MP3. +MP3 decoding can be very slow on ARM processors (Android/Raspberry Pi), we generally recommend you use lossless WAV or AIF files. ]]> @@ -76,10 +77,10 @@ This is a Soundfile Player which allows to play back and manipulate soundfiles. Change the amplitude/volume of the player - + pan() diff --git a/content/api_en/LIB_sound/SoundFile_add.xml b/content/api_en/LIB_sound/SoundFile_add.xml index 28df56508..2b92734e5 100755 --- a/content/api_en/LIB_sound/SoundFile_add.xml +++ b/content/api_en/LIB_sound/SoundFile_add.xml @@ -18,12 +18,12 @@ SoundFile file; void setup() { size(640, 360); background(255); - + // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); file.play(); file.add(0.1); -} +} void draw() { } @@ -32,7 +32,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_amp.xml b/content/api_en/LIB_sound/SoundFile_amp.xml index 8fed77f35..34002bbd2 100755 --- a/content/api_en/LIB_sound/SoundFile_amp.xml +++ b/content/api_en/LIB_sound/SoundFile_amp.xml @@ -21,8 +21,8 @@ void setup() { // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); - file.play(); file.amp(0.5); + file.play(); } void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_channels.xml b/content/api_en/LIB_sound/SoundFile_channels.xml index 2e371f9e2..999ca0916 100755 --- a/content/api_en/LIB_sound/SoundFile_channels.xml +++ b/content/api_en/LIB_sound/SoundFile_channels.xml @@ -18,11 +18,11 @@ SoundFile file; void setup() { size(640, 360); background(255); - + // Load a soundfile from the /data folder of the sketch and get the number of channels file = new SoundFile(this, "sample.mp3"); println(file.channels()); -} +} void draw() { } diff --git a/content/api_en/LIB_sound/SoundFile_cue.xml b/content/api_en/LIB_sound/SoundFile_cue.xml index 347d45dc4..b776d4657 100755 --- a/content/api_en/LIB_sound/SoundFile_cue.xml +++ b/content/api_en/LIB_sound/SoundFile_cue.xml @@ -21,7 +21,7 @@ void setup() { // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); - file.cue(15); + file.cue(3.5); file.play(); } @@ -32,7 +32,7 @@ void draw() { second parameter supports only integer values. +Cues the playhead to a fixed position in the soundfile. ]]> diff --git a/content/api_en/LIB_sound/SoundFile_duration.xml b/content/api_en/LIB_sound/SoundFile_duration.xml index ca9e0e073..1b0001e75 100755 --- a/content/api_en/LIB_sound/SoundFile_duration.xml +++ b/content/api_en/LIB_sound/SoundFile_duration.xml @@ -21,7 +21,7 @@ void setup() { // Load a soundfile from the data folder of the sketch and get the duration of the file file = new SoundFile(this, "sample.mp3"); - println("SFDuration= " + file.duration() + " seconds"); + println("Duration= " + file.duration() + " seconds"); } void draw() { @@ -31,7 +31,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_frames.xml b/content/api_en/LIB_sound/SoundFile_frames.xml index eb464331f..3cd815c88 100755 --- a/content/api_en/LIB_sound/SoundFile_frames.xml +++ b/content/api_en/LIB_sound/SoundFile_frames.xml @@ -18,10 +18,10 @@ SoundFile file; void setup() { size(640, 360); background(255); - + // Load a soundfile from the data folder of the sketch and get the number of frames file = new SoundFile(this, "sample.mp3"); - println("SFSamples= " + file.frames() + " samples"); + println("Frames= " + file.frames() + " frames"); } void draw() { @@ -31,7 +31,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_jump.xml b/content/api_en/LIB_sound/SoundFile_jump.xml index caa6a01a9..195148440 100755 --- a/content/api_en/LIB_sound/SoundFile_jump.xml +++ b/content/api_en/LIB_sound/SoundFile_jump.xml @@ -21,7 +21,7 @@ void setup() { // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); - file.jump(15.3); + file.jump(3.5); } void draw() { @@ -31,7 +31,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_loop.xml b/content/api_en/LIB_sound/SoundFile_loop.xml index d66e81a83..8f42ae4d9 100755 --- a/content/api_en/LIB_sound/SoundFile_loop.xml +++ b/content/api_en/LIB_sound/SoundFile_loop.xml @@ -31,7 +31,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_pan.xml b/content/api_en/LIB_sound/SoundFile_pan.xml index 52fc29f6b..5ffd87f98 100755 --- a/content/api_en/LIB_sound/SoundFile_pan.xml +++ b/content/api_en/LIB_sound/SoundFile_pan.xml @@ -19,7 +19,7 @@ void setup() { size(640, 360); background(255); - // Load a soundfile from the data folder of the sketch and play it back + // Load a MONO soundfile from the data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); file.play(); } @@ -32,7 +32,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_play.xml b/content/api_en/LIB_sound/SoundFile_play.xml index 95f493497..f1dff831d 100755 --- a/content/api_en/LIB_sound/SoundFile_play.xml +++ b/content/api_en/LIB_sound/SoundFile_play.xml @@ -31,7 +31,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_rate.xml b/content/api_en/LIB_sound/SoundFile_rate.xml index 48ef77737..d986e0ca7 100755 --- a/content/api_en/LIB_sound/SoundFile_rate.xml +++ b/content/api_en/LIB_sound/SoundFile_rate.xml @@ -32,8 +32,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/SoundFile_set.xml b/content/api_en/LIB_sound/SoundFile_set.xml index e0b029462..b9f42ee74 100755 --- a/content/api_en/LIB_sound/SoundFile_set.xml +++ b/content/api_en/LIB_sound/SoundFile_set.xml @@ -19,27 +19,26 @@ void setup() { size(640, 360); background(255); - // Load a soundfile from the data folder of the sketch and get the number of channels + // Load a soundfile from the data folder of the sketch file = new SoundFile(this, "sample.mp3"); - println("SFSampleRate= " + file.sampleRate() + " Hz"); } void draw() { } void mousePressed() { - float rate=3; - float pos=0.5; - float amp=0.5; - float add=0; - file.set(rate, amp, add, pos); + float rate = 3; + float pos = 0.5; + float amp = 0.5; + float add = 0; + file.set(rate, pos, amp, add); } ]]> diff --git a/content/api_en/LIB_sound/SoundFile_stop.xml b/content/api_en/LIB_sound/SoundFile_stop.xml index d8648eda5..d4b3830e7 100755 --- a/content/api_en/LIB_sound/SoundFile_stop.xml +++ b/content/api_en/LIB_sound/SoundFile_stop.xml @@ -15,26 +15,26 @@ import processing.sound.*; SoundFile file; - void setup() { +void setup() { size(640, 360); background(255); - + // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); file.play(); - } +} - void(){ - } - - void mousePressed() { +void draw() { +} + +void mousePressed() { file.stop(); - } +} ]]> From cf356fee7bc956b87006116ca43d6a745fc984c7 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 12:41:37 +0200 Subject: [PATCH 016/299] Add minimal AudioSample.xml (refs kevinstadler/processing-sound#8) --- content/api_en/LIB_sound/AudioSample.xml | 56 ++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100755 content/api_en/LIB_sound/AudioSample.xml diff --git a/content/api_en/LIB_sound/AudioSample.xml b/content/api_en/LIB_sound/AudioSample.xml new file mode 100755 index 000000000..729c1f602 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample.xml @@ -0,0 +1,56 @@ + + +AudioSample + +Sound + +Audio Files + +Application + + + + + + + + + +pan() +Move the audiosample in a stereo panorama (only works for mono samples) + + +2.0 + +Object + +Library + + From 8ac00b71537d4e26e9f10ebbf3d2356c0381e742 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 12:42:23 +0200 Subject: [PATCH 017/299] Remove redundant specifications from TriOsc.xml for testing --- content/api_en/LIB_sound/TriOsc.xml | 56 ----------------------------- 1 file changed, 56 deletions(-) diff --git a/content/api_en/LIB_sound/TriOsc.xml b/content/api_en/LIB_sound/TriOsc.xml index 2ca49c832..9a0ded13b 100755 --- a/content/api_en/LIB_sound/TriOsc.xml +++ b/content/api_en/LIB_sound/TriOsc.xml @@ -32,62 +32,6 @@ void draw() { This is a simple Triangle Wave Oscillator ]]> - - - - - - - - -play() -Start the oscillator - - - -stop() -Stop the oscillator - - - -freq() -Change the frequency of the oscillator - - - -amp() -Change the amplitude/volume of the oscillator - - - -add() -Offset the output of the oscillator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -TriOsc(parent) - - - -parent -PApplet: typically use "this" - - - - - - - 1.0 Object From 5957af09d6254a433cbf99dd388d0b291dd0555b Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 12:56:33 +0200 Subject: [PATCH 018/299] Add Sound.xml for testing --- content/api_en/LIB_sound/AudioDevice.xml | 14 +------ content/api_en/LIB_sound/Sound.xml | 49 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 content/api_en/LIB_sound/Sound.xml diff --git a/content/api_en/LIB_sound/AudioDevice.xml b/content/api_en/LIB_sound/AudioDevice.xml index 5bb214dba..f32b4cbf0 100755 --- a/content/api_en/LIB_sound/AudioDevice.xml +++ b/content/api_en/LIB_sound/AudioDevice.xml @@ -29,16 +29,6 @@ void draw() { Audio Device allows for configuring the audio server. If you need a low latency server you can reduce the buffer size. Allowed values are power of 2. For changing the sample rate pass the appropriate value in the constructor. ]]> - - - - - - - - - - AudioDevice(parent, samplerate, buffersize) @@ -57,10 +47,8 @@ AudioDevice(parent, samplerate, buffersize) int: buffersize (i.e. 32/64/128 ..) - - - +Sound 1.0 diff --git a/content/api_en/LIB_sound/Sound.xml b/content/api_en/LIB_sound/Sound.xml new file mode 100644 index 000000000..859cae591 --- /dev/null +++ b/content/api_en/LIB_sound/Sound.xml @@ -0,0 +1,49 @@ + + +Sound + +Sound + +Configuration + +Application + + + + + + + + +AudioIn + + + \ No newline at end of file From 13b99201287b3c0abc73f11e1b8407f8dca376c7 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Tue, 7 Aug 2018 12:57:13 +0200 Subject: [PATCH 019/299] Add AudioSample/SoundFile crossreference --- content/api_en/LIB_sound/AudioSample.xml | 4 ++++ content/api_en/LIB_sound/SoundFile.xml | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/content/api_en/LIB_sound/AudioSample.xml b/content/api_en/LIB_sound/AudioSample.xml index 729c1f602..3c31a428d 100755 --- a/content/api_en/LIB_sound/AudioSample.xml +++ b/content/api_en/LIB_sound/AudioSample.xml @@ -47,6 +47,10 @@ This is just a placeholder to see which class descriptions are added by the refe Move the audiosample in a stereo panorama (only works for mono samples) + +SoundFile + + 2.0 Object diff --git a/content/api_en/LIB_sound/SoundFile.xml b/content/api_en/LIB_sound/SoundFile.xml index d2f1b022f..9b698dad8 100755 --- a/content/api_en/LIB_sound/SoundFile.xml +++ b/content/api_en/LIB_sound/SoundFile.xml @@ -9,7 +9,6 @@ Application - Date: Tue, 7 Aug 2018 15:22:28 -0300 Subject: [PATCH 020/299] Added ReferenceTool to contributions. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 0cf9cd732..2ff56edb5 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 234 +# Next ID: 235 # Increment after assigning ID to new contribution [Library : 3D] @@ -295,6 +295,7 @@ 221 \ http://jonathan.dahlberg.media/ecc/ecc.txt 228 \ https://perceptualcolor.org/distribution/PerceptualColorPicker/download/PerceptualColorPicker.txt 233 \ https://github.com/jaewhyun/GettingStarted/releases/download/latest/GettingStarted.txt +234 \ https://github.com/jaewhyun/ReferenceTool/releases/download/latest/ReferenceTool.txt [Mode : ] 070 \ http://bezier.de/processing/modes/CoffeeScriptMode.txt From bcdc17d369a8c348c7ba938fea3d84cdc82ad858 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 10 Aug 2018 18:32:44 +0200 Subject: [PATCH 021/299] Switch to new processing sound repository --- content/api_en/LIB_sound/SinOsc.xml | 2 +- generate/reference.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/api_en/LIB_sound/SinOsc.xml b/content/api_en/LIB_sound/SinOsc.xml index 1f6c8ad1e..3b9e8e4cc 100755 --- a/content/api_en/LIB_sound/SinOsc.xml +++ b/content/api_en/LIB_sound/SinOsc.xml @@ -9,7 +9,7 @@ Application - +sin_.png &1"); // clone new processing-sound library from work-in-progress repository instead -$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/processing/processing-sound.git . 2>&1"); +$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/kevinstadler/processing-sound.git . 2>&1"); out($shell_output); out("---------------"); From 29de1817bfb894f8d3940b0ea05765ab0712cff3 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 10 Aug 2018 19:30:20 +0200 Subject: [PATCH 022/299] Fix sine oscillator image path and Pulse oscillator description --- content/api_en/LIB_sound/Pulse.xml | 18 +----------------- content/api_en/LIB_sound/SinOsc.xml | 2 +- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/content/api_en/LIB_sound/Pulse.xml b/content/api_en/LIB_sound/Pulse.xml index 2bae58c81..3251181f1 100755 --- a/content/api_en/LIB_sound/Pulse.xml +++ b/content/api_en/LIB_sound/Pulse.xml @@ -32,9 +32,7 @@ void draw() { @@ -69,11 +67,6 @@ void draw() { Change the amplitude/volume of the oscillator - -add() -Offset the output of the oscillator by given value - - pan() Move the sound in a stereo panorama @@ -84,15 +77,6 @@ void draw() { Set multiple parameters at once - -Pulse(parent) - - - -parent -PApplet: typically use "this" - - diff --git a/content/api_en/LIB_sound/SinOsc.xml b/content/api_en/LIB_sound/SinOsc.xml index 3b9e8e4cc..6ee014047 100755 --- a/content/api_en/LIB_sound/SinOsc.xml +++ b/content/api_en/LIB_sound/SinOsc.xml @@ -9,7 +9,7 @@ Application -sin_.png +../../sin_.png Date: Fri, 10 Aug 2018 19:59:56 +0200 Subject: [PATCH 023/299] Add minimal AudioSample.read() XML --- content/api_en/LIB_sound/AudioSample_read.xml | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 content/api_en/LIB_sound/AudioSample_read.xml diff --git a/content/api_en/LIB_sound/AudioSample_read.xml b/content/api_en/LIB_sound/AudioSample_read.xml new file mode 100755 index 000000000..97e4c7f06 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_read.xml @@ -0,0 +1,41 @@ + + + +read() + +Sound Files + + + +Web & Application + + + + + + +write + +1.0 + +Method + +Library + + From 3f761cac4d405c97fdf2e679d07fc7fd705b8793 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 10 Aug 2018 20:01:41 +0200 Subject: [PATCH 024/299] Remove redundant content from Pulse.xml --- content/api_en/LIB_sound/Pulse.xml | 47 ------------------------------ 1 file changed, 47 deletions(-) diff --git a/content/api_en/LIB_sound/Pulse.xml b/content/api_en/LIB_sound/Pulse.xml index 3251181f1..3891ec5cd 100755 --- a/content/api_en/LIB_sound/Pulse.xml +++ b/content/api_en/LIB_sound/Pulse.xml @@ -35,53 +35,6 @@ void draw() { This is a simple Pulse Oscillator. You can control the width of the pulse using the width() function. A width of 0.5 makes this oscillator identical to a square wave. ]]> - - - - - - - - -play() -Start the oscillator - - - -stop() -Stop the oscillator - - - -freq() -Change the frequency of the oscillator - - - -width() -Change the pulse width of the oscillator - - - -amp() -Change the amplitude/volume of the oscillator - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - - - - - 1.0 Object From 15704e062f48787077baff490a26497e3609e113 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 10 Aug 2018 21:35:34 +0200 Subject: [PATCH 025/299] Add Sound library oscillator pictures --- content/api_en/LIB_sound/AudioDevice.xml | 2 +- content/api_en/LIB_sound/Pulse.xml | 2 +- content/api_en/LIB_sound/SawOsc.xml | 58 +---------------------- content/api_en/LIB_sound/SinOsc.xml | 58 +---------------------- content/api_en/LIB_sound/Sound.xml | 4 -- content/api_en/LIB_sound/SqrOsc.xml | 58 +---------------------- content/api_en/LIB_sound/TriOsc.xml | 2 +- content/api_media/LIB_sound/Pulse.png | Bin 0 -> 290 bytes content/api_media/LIB_sound/SawOsc.png | Bin 0 -> 449 bytes content/api_media/LIB_sound/SinOsc.png | Bin 0 -> 589 bytes content/api_media/LIB_sound/SqrOsc.png | Bin 0 -> 301 bytes content/api_media/LIB_sound/TriOsc.png | Bin 0 -> 439 bytes 12 files changed, 6 insertions(+), 178 deletions(-) create mode 100644 content/api_media/LIB_sound/Pulse.png create mode 100644 content/api_media/LIB_sound/SawOsc.png create mode 100644 content/api_media/LIB_sound/SinOsc.png create mode 100644 content/api_media/LIB_sound/SqrOsc.png create mode 100644 content/api_media/LIB_sound/TriOsc.png diff --git a/content/api_en/LIB_sound/AudioDevice.xml b/content/api_en/LIB_sound/AudioDevice.xml index f32b4cbf0..1172dc020 100755 --- a/content/api_en/LIB_sound/AudioDevice.xml +++ b/content/api_en/LIB_sound/AudioDevice.xml @@ -4,7 +4,7 @@ Sound -I/O +Configuration Application diff --git a/content/api_en/LIB_sound/Pulse.xml b/content/api_en/LIB_sound/Pulse.xml index 3891ec5cd..450f0e5f5 100755 --- a/content/api_en/LIB_sound/Pulse.xml +++ b/content/api_en/LIB_sound/Pulse.xml @@ -9,7 +9,7 @@ Application - +../../../images/LIB_sound/Pulse.png Application - +../../../images/LIB_sound/SawOsc.png - - - - - - - - -play() -Start the oscillator - - - -stop() -Stop the oscillator - - - -freq() -Change the frequency of the oscillator - - - -amp() -Change the amplitude/volume of the oscillator - - - -add() -Offset the output of the oscillator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -SqrOsc(parent) - - - -parent -PApplet: typically use "this" - - - - - - - 1.0 Object diff --git a/content/api_en/LIB_sound/SinOsc.xml b/content/api_en/LIB_sound/SinOsc.xml index 6ee014047..30f5cc13d 100755 --- a/content/api_en/LIB_sound/SinOsc.xml +++ b/content/api_en/LIB_sound/SinOsc.xml @@ -9,7 +9,7 @@ Application -../../sin_.png +../../../images/LIB_sound/SinOsc.png - - - - - - - - -play() -Start the oscillator - - - -stop() -Stop the oscillator - - - -freq() -Change the frequency of the oscillator - - - -amp() -Change the amplitude/volume of the oscillator - - - -add() -Offset the output of the oscillator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -SinOsc(parent) - - - -parent -PApplet: typically use "this" - - - - - - - 1.0 Object diff --git a/content/api_en/LIB_sound/Sound.xml b/content/api_en/LIB_sound/Sound.xml index 859cae591..26e8d1b0a 100644 --- a/content/api_en/LIB_sound/Sound.xml +++ b/content/api_en/LIB_sound/Sound.xml @@ -38,10 +38,6 @@ void draw() { ]]> - - AudioIn diff --git a/content/api_en/LIB_sound/SqrOsc.xml b/content/api_en/LIB_sound/SqrOsc.xml index d1d0c096f..5fe8f9244 100755 --- a/content/api_en/LIB_sound/SqrOsc.xml +++ b/content/api_en/LIB_sound/SqrOsc.xml @@ -9,7 +9,7 @@ Application - +../../../images/LIB_sound/SqrOsc.png - - - - - - - - -play() -Start the oscillator - - - -stop() -Stop the oscillator - - - -freq() -Change the frequency of the oscillator - - - -amp() -Change the amplitude/volume of the oscillator - - - -add() -Offset the output of the oscillator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -SqrOsc(parent) - - - -parent -PApplet: typically use "this" - - - - - - - 1.0 Object diff --git a/content/api_en/LIB_sound/TriOsc.xml b/content/api_en/LIB_sound/TriOsc.xml index 9a0ded13b..bb3ad11d4 100755 --- a/content/api_en/LIB_sound/TriOsc.xml +++ b/content/api_en/LIB_sound/TriOsc.xml @@ -9,7 +9,7 @@ Application - +../../../images/LIB_sound/TriOsc.png DcK^DdQ+0kYUjJbhi+A8~Mri>b+H+64oJ{5@S9Lo)8YJ#WZ&K!JzF@%I1v zk{2GLl8Rj_#8xQy(04caP!mH$G3qB z?-w%0xiEiZv*`H_FVdQ&MBb@04pq6Z~y=R literal 0 HcmV?d00001 diff --git a/content/api_media/LIB_sound/SawOsc.png b/content/api_media/LIB_sound/SawOsc.png new file mode 100644 index 0000000000000000000000000000000000000000..845db35d163005738d0485f078b593da375e07bd GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^DIm5Hz(xLLVTr}%=8mlKC#ivW0x)9qwsEF z;RJ;@3k#MIdFWCFY!=d`< z#D;G+oEhi8ewX_Ic5aKnqw^Jv%pcg+cr(>B0DY@k;u=wsl30>zm0Xkxq!^403@vmG zEOZSGLW~TpjEt;|Ewl}ctPBjSOrtKLXvob^$xN%nt-(9vQ65kOgQu&X%Q~loCIGNR BsJ8$B literal 0 HcmV?d00001 diff --git a/content/api_media/LIB_sound/SinOsc.png b/content/api_media/LIB_sound/SinOsc.png new file mode 100644 index 0000000000000000000000000000000000000000..f510c14ed181c4d57b1048f1945f50d9f03cb27a GIT binary patch literal 589 zcmeAS@N?(olHy`uVBq!ia0vp^DImL4#UEQKZi-5{3EG**V zYY7?N@C?X}}vOpYQh z7q1yTpHuwrzkZ0zk$^{!rb@5eeBs@3QI|P0{Z2yM|IbH_TVeLZQXjp3r;QCYepdoj zr|7Rwo#G-J?D+LpoU7|4!>v`1w`E<)ZtBZgR2seYf=G#v^xWUOn#*=9-nI8%?cMjK zhh>cqd`L7uqHrT{@y92L=92wQvc^Z>WZEA#xe{2cGw&Ps8Rxr`&W637ezHpR<)yZ> z8)|3f2)?}3clKNU;@TzN7JGX6Ud{Xyz1i>IZy@$hn)`3og1Nt5J)8T>&ei&>?DXFjT>_&eTPIsf^V;Q2lk%k7ds`qf4)nfvR`Y3r|?|D4NhWcSy75uZB~1a9uPWOmvr zAGeXyJQWyBswJ)wB`Jv|saDBFsX&Us$iUD-*T6#8&>+Of(8|cj%Gg5Nz{twLz{)i0 f5{ic0{FKbJO57T}GalsuH86O(`njxgN@xNAMbiav literal 0 HcmV?d00001 diff --git a/content/api_media/LIB_sound/SqrOsc.png b/content/api_media/LIB_sound/SqrOsc.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6941c6ed87f24d4b68ac03b6d0119f1275ce69 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^DImDcK^DdQ+0kYUjJbhi+A8~Mri>b+H+64oJqC8z3Lo)8Yy=KVQpdjGtc;~nL zEwRH|i$sLdy*{1fmR$-|vtgUAuyNVf#4VRjAKra9akKT#KNadqFz{*NiKpjn^8P)j z-u)_j-X1+8{W72)`wh(J*qLMHm**}6@>EM)BT7;dOH!?pi&B9UgOP!ug|2~xuAxDQ wk)f55k(IH9wt@dvmw5WRvOnVB5*JgG&$J5$3f=H@aSX}0 z_jcMvzC#KEEC((z_(&GMVx%tWcd%QW~#4yYh;$cFCfw_nOE4c6S&4FIQ`N zx%z;`jAUEs)(>mWGz-kLT_%5MYxFm#AK(7^aop!r<9}$=y;O0{@>4o3Uu)*H7gQO} zz6lB*28JKZ?+RjBqnF;Da~8-`Epd$~Nl7e8wMs5Z1yT$~28I^81{S)81|dd Date: Fri, 10 Aug 2018 22:02:18 +0200 Subject: [PATCH 026/299] Improve Sound config documentation and fix Sound library image paths --- content/api_en/LIB_sound/Pulse.xml | 8 +-- content/api_en/LIB_sound/SawOsc.xml | 8 +-- content/api_en/LIB_sound/SinOsc.xml | 8 +-- content/api_en/LIB_sound/Sound.xml | 6 ++- content/api_en/LIB_sound/Sound_list.xml | 27 ++++++++++ content/api_en/LIB_sound/Sound_volume.xml | 46 ++++++++++++++++++ content/api_en/LIB_sound/SqrOsc.xml | 8 +-- content/api_en/LIB_sound/TriOsc.xml | 8 +-- .../Pulse.png => LIB_sound_Pulse.png} | Bin .../SawOsc.png => LIB_sound_SawOsc.png} | Bin .../SinOsc.png => LIB_sound_SinOsc.png} | Bin .../SqrOsc.png => LIB_sound_SqrOsc.png} | Bin .../TriOsc.png => LIB_sound_TriOsc.png} | Bin 13 files changed, 83 insertions(+), 36 deletions(-) create mode 100755 content/api_en/LIB_sound/Sound_list.xml create mode 100755 content/api_en/LIB_sound/Sound_volume.xml rename content/api_media/{LIB_sound/Pulse.png => LIB_sound_Pulse.png} (100%) rename content/api_media/{LIB_sound/SawOsc.png => LIB_sound_SawOsc.png} (100%) rename content/api_media/{LIB_sound/SinOsc.png => LIB_sound_SinOsc.png} (100%) rename content/api_media/{LIB_sound/SqrOsc.png => LIB_sound_SqrOsc.png} (100%) rename content/api_media/{LIB_sound/TriOsc.png => LIB_sound_TriOsc.png} (100%) diff --git a/content/api_en/LIB_sound/Pulse.xml b/content/api_en/LIB_sound/Pulse.xml index 450f0e5f5..e1b4402cd 100755 --- a/content/api_en/LIB_sound/Pulse.xml +++ b/content/api_en/LIB_sound/Pulse.xml @@ -9,7 +9,7 @@ Application -../../../images/LIB_sound/Pulse.png +../../../images/LIB_sound_Pulse.png -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/SawOsc.xml b/content/api_en/LIB_sound/SawOsc.xml index 336494ed9..979ca1bb5 100755 --- a/content/api_en/LIB_sound/SawOsc.xml +++ b/content/api_en/LIB_sound/SawOsc.xml @@ -9,7 +9,7 @@ Application -../../../images/LIB_sound/SawOsc.png +../../../images/LIB_sound_SawOsc.png -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/SinOsc.xml b/content/api_en/LIB_sound/SinOsc.xml index 30f5cc13d..abec47858 100755 --- a/content/api_en/LIB_sound/SinOsc.xml +++ b/content/api_en/LIB_sound/SinOsc.xml @@ -9,7 +9,7 @@ Application -../../../images/LIB_sound/SinOsc.png +../../../images/LIB_sound_SinOsc.png -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/Sound.xml b/content/api_en/LIB_sound/Sound.xml index 26e8d1b0a..4f17c0696 100644 --- a/content/api_en/LIB_sound/Sound.xml +++ b/content/api_en/LIB_sound/Sound.xml @@ -16,7 +16,7 @@ Sound s; void setup() { size(200, 200); - // Play to sine oscillators with slightly different frequencies for a nice "beat". + // Play two sine oscillators with slightly different frequencies for a nice "beat". SinOsc sin = new SinOsc(this); sin.play(200, 0.2); sin = new SinOsc(this); @@ -38,6 +38,10 @@ void draw() { ]]> + + AudioIn diff --git a/content/api_en/LIB_sound/Sound_list.xml b/content/api_en/LIB_sound/Sound_list.xml new file mode 100755 index 000000000..158f3b102 --- /dev/null +++ b/content/api_en/LIB_sound/Sound_list.xml @@ -0,0 +1,27 @@ + + + +Sound.list() + +Sound + +Configuration + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/Sound_volume.xml b/content/api_en/LIB_sound/Sound_volume.xml new file mode 100755 index 000000000..96d9e6700 --- /dev/null +++ b/content/api_en/LIB_sound/Sound_volume.xml @@ -0,0 +1,46 @@ + + + +volume() + +Sound + +Configuration + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/SqrOsc.xml b/content/api_en/LIB_sound/SqrOsc.xml index 5fe8f9244..f4ff7ec2f 100755 --- a/content/api_en/LIB_sound/SqrOsc.xml +++ b/content/api_en/LIB_sound/SqrOsc.xml @@ -9,7 +9,7 @@ Application -../../../images/LIB_sound/SqrOsc.png +../../../images/LIB_sound_SqrOsc.png -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/TriOsc.xml b/content/api_en/LIB_sound/TriOsc.xml index bb3ad11d4..d504de89a 100755 --- a/content/api_en/LIB_sound/TriOsc.xml +++ b/content/api_en/LIB_sound/TriOsc.xml @@ -9,7 +9,7 @@ Application -../../../images/LIB_sound/TriOsc.png +../../../images/LIB_sound_TriOsc.png -1.0 - -Object - -Library - diff --git a/content/api_media/LIB_sound/Pulse.png b/content/api_media/LIB_sound_Pulse.png similarity index 100% rename from content/api_media/LIB_sound/Pulse.png rename to content/api_media/LIB_sound_Pulse.png diff --git a/content/api_media/LIB_sound/SawOsc.png b/content/api_media/LIB_sound_SawOsc.png similarity index 100% rename from content/api_media/LIB_sound/SawOsc.png rename to content/api_media/LIB_sound_SawOsc.png diff --git a/content/api_media/LIB_sound/SinOsc.png b/content/api_media/LIB_sound_SinOsc.png similarity index 100% rename from content/api_media/LIB_sound/SinOsc.png rename to content/api_media/LIB_sound_SinOsc.png diff --git a/content/api_media/LIB_sound/SqrOsc.png b/content/api_media/LIB_sound_SqrOsc.png similarity index 100% rename from content/api_media/LIB_sound/SqrOsc.png rename to content/api_media/LIB_sound_SqrOsc.png diff --git a/content/api_media/LIB_sound/TriOsc.png b/content/api_media/LIB_sound_TriOsc.png similarity index 100% rename from content/api_media/LIB_sound/TriOsc.png rename to content/api_media/LIB_sound_TriOsc.png From de87a36aa0e5cc625cba66ea06fdcd56623727d8 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Sat, 11 Aug 2018 19:51:49 +0200 Subject: [PATCH 027/299] Tidy up Sound library Noise generator XMLs --- content/api_en/LIB_sound/BrownNoise.xml | 59 -------------------- content/api_en/LIB_sound/BrownNoise_add.xml | 15 ----- content/api_en/LIB_sound/BrownNoise_amp.xml | 20 ------- content/api_en/LIB_sound/BrownNoise_pan.xml | 15 ----- content/api_en/LIB_sound/BrownNoise_play.xml | 15 ----- content/api_en/LIB_sound/BrownNoise_set.xml | 15 ----- content/api_en/LIB_sound/BrownNoise_stop.xml | 15 ----- content/api_en/LIB_sound/PinkNoise.xml | 59 -------------------- content/api_en/LIB_sound/PinkNoise_add.xml | 15 ----- content/api_en/LIB_sound/PinkNoise_amp.xml | 20 ------- content/api_en/LIB_sound/PinkNoise_pan.xml | 15 ----- content/api_en/LIB_sound/PinkNoise_play.xml | 15 ----- content/api_en/LIB_sound/PinkNoise_set.xml | 15 ----- content/api_en/LIB_sound/PinkNoise_stop.xml | 15 ----- content/api_en/LIB_sound/WhiteNoise.xml | 59 -------------------- content/api_en/LIB_sound/WhiteNoise_add.xml | 15 ----- content/api_en/LIB_sound/WhiteNoise_amp.xml | 20 ------- content/api_en/LIB_sound/WhiteNoise_pan.xml | 15 ----- content/api_en/LIB_sound/WhiteNoise_play.xml | 15 ----- content/api_en/LIB_sound/WhiteNoise_set.xml | 15 ----- content/api_en/LIB_sound/WhiteNoise_stop.xml | 15 ----- 21 files changed, 462 deletions(-) diff --git a/content/api_en/LIB_sound/BrownNoise.xml b/content/api_en/LIB_sound/BrownNoise.xml index 72c8fe79b..f8b95cac7 100755 --- a/content/api_en/LIB_sound/BrownNoise.xml +++ b/content/api_en/LIB_sound/BrownNoise.xml @@ -29,66 +29,7 @@ void draw() { - - - - - - - - -play() -Start the generator - - - -stop() -Stop the generator - - - -amp() -Change the amplitude/volume of the generator - - - -add() -Offset the output of the generator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -BrownNoise(parent) - - - -parent -PApplet: typically use "this" - - - - - - - -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/BrownNoise_add.xml b/content/api_en/LIB_sound/BrownNoise_add.xml index ec5550347..d00869e8d 100755 --- a/content/api_en/LIB_sound/BrownNoise_add.xml +++ b/content/api_en/LIB_sound/BrownNoise_add.xml @@ -35,19 +35,4 @@ void draw() { The .add() method is useful for modulating other audio signals. ]]> - -noise.add(add) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/BrownNoise_amp.xml b/content/api_en/LIB_sound/BrownNoise_amp.xml index edb349c7d..4264c2f4b 100755 --- a/content/api_en/LIB_sound/BrownNoise_amp.xml +++ b/content/api_en/LIB_sound/BrownNoise_amp.xml @@ -35,24 +35,4 @@ void draw() { Changes the amplitude/volume of the noise generator. Allowed values are between 0.0 and 1.0. ]]> - -noise.amp(vol) - - - - - - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/BrownNoise_pan.xml b/content/api_en/LIB_sound/BrownNoise_pan.xml index 71043d021..6644626fd 100755 --- a/content/api_en/LIB_sound/BrownNoise_pan.xml +++ b/content/api_en/LIB_sound/BrownNoise_pan.xml @@ -36,19 +36,4 @@ void draw() { Pan the generator in a stereo panorama. -1.0 pans to the left channel and 1.0 to the right channel. ]]> - -noise.pan(pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/BrownNoise_play.xml b/content/api_en/LIB_sound/BrownNoise_play.xml index 9a1c30f40..915d8cfcb 100755 --- a/content/api_en/LIB_sound/BrownNoise_play.xml +++ b/content/api_en/LIB_sound/BrownNoise_play.xml @@ -34,19 +34,4 @@ void draw() { Starts the Brown Noise generator. ]]> - -noise.play() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/BrownNoise_set.xml b/content/api_en/LIB_sound/BrownNoise_set.xml index 1ace27281..a24a1c3ef 100755 --- a/content/api_en/LIB_sound/BrownNoise_set.xml +++ b/content/api_en/LIB_sound/BrownNoise_set.xml @@ -41,19 +41,4 @@ void mousePressed() { Sets amplitude, add and pan position with one method. ]]> - -noise.set(amp, add, pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/BrownNoise_stop.xml b/content/api_en/LIB_sound/BrownNoise_stop.xml index 849ca5f8d..6111b73ae 100755 --- a/content/api_en/LIB_sound/BrownNoise_stop.xml +++ b/content/api_en/LIB_sound/BrownNoise_stop.xml @@ -38,19 +38,4 @@ void mousePressed() { Stops the Brown Noise generator. ]]> - -noise.stop() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise.xml b/content/api_en/LIB_sound/PinkNoise.xml index 59f26ae9a..fd74f29e5 100755 --- a/content/api_en/LIB_sound/PinkNoise.xml +++ b/content/api_en/LIB_sound/PinkNoise.xml @@ -29,66 +29,7 @@ void draw() { - - - - - - - - -play() -Start the generator - - - -stop() -Stop the generator - - - -amp() -Change the amplitude/volume of the generator - - - -add() -Offset the output of the generator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -WhiteNoise(parent) - - - -parent -PApplet: typically use "this" - - - - - - - -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/PinkNoise_add.xml b/content/api_en/LIB_sound/PinkNoise_add.xml index 999b05183..28de64b97 100755 --- a/content/api_en/LIB_sound/PinkNoise_add.xml +++ b/content/api_en/LIB_sound/PinkNoise_add.xml @@ -35,19 +35,4 @@ void draw() { The .add() method is useful for modulating other audio signals. ]]> - -noise.add(add) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise_amp.xml b/content/api_en/LIB_sound/PinkNoise_amp.xml index 14e8a8745..67e87cc56 100755 --- a/content/api_en/LIB_sound/PinkNoise_amp.xml +++ b/content/api_en/LIB_sound/PinkNoise_amp.xml @@ -35,24 +35,4 @@ void draw() { Changes the amplitude/volume of the noise generator. Allowed values are between 0.0 and 1.0. ]]> - -noise.amp(vol) - - - - - - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise_pan.xml b/content/api_en/LIB_sound/PinkNoise_pan.xml index d786b649b..10bb0cf09 100755 --- a/content/api_en/LIB_sound/PinkNoise_pan.xml +++ b/content/api_en/LIB_sound/PinkNoise_pan.xml @@ -36,19 +36,4 @@ void draw() { Pan the generator in a stereo panorama. -1.0 pans to the left channel and 1.0 to the right channel. ]]> - -noise.pan(pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise_play.xml b/content/api_en/LIB_sound/PinkNoise_play.xml index 9cf795d7d..c40593f4d 100755 --- a/content/api_en/LIB_sound/PinkNoise_play.xml +++ b/content/api_en/LIB_sound/PinkNoise_play.xml @@ -34,19 +34,4 @@ void draw() { Starts the Pink Noise generator. ]]> - -noise.play() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise_set.xml b/content/api_en/LIB_sound/PinkNoise_set.xml index ff84919dc..9914d239f 100755 --- a/content/api_en/LIB_sound/PinkNoise_set.xml +++ b/content/api_en/LIB_sound/PinkNoise_set.xml @@ -41,19 +41,4 @@ void mousePressed() { Sets amplitude, add and pan position with one method. ]]> - -noise.set(amp, add, pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/PinkNoise_stop.xml b/content/api_en/LIB_sound/PinkNoise_stop.xml index 2e0db52be..f9bc7dca5 100755 --- a/content/api_en/LIB_sound/PinkNoise_stop.xml +++ b/content/api_en/LIB_sound/PinkNoise_stop.xml @@ -38,19 +38,4 @@ void mousePressed() { Stops the Pink Noise generator. ]]> - -noise.stop() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise.xml b/content/api_en/LIB_sound/WhiteNoise.xml index 0f67dfb46..ba8d252c2 100755 --- a/content/api_en/LIB_sound/WhiteNoise.xml +++ b/content/api_en/LIB_sound/WhiteNoise.xml @@ -29,66 +29,7 @@ void draw() { - - - - - - - - -play() -Start the generator - - - -stop() -Stop the generator - - - -amp() -Change the amplitude/volume of the generator - - - -add() -Offset the output of the generator by given value - - - -pan() -Move the sound in a stereo panorama - - - -set() -Set multiple parameters at once - - - -WhiteNoise(parent) - - - -parent -PApplet: typically use "this" - - - - - - - -1.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/WhiteNoise_add.xml b/content/api_en/LIB_sound/WhiteNoise_add.xml index 1876dc1ab..a6da5916b 100755 --- a/content/api_en/LIB_sound/WhiteNoise_add.xml +++ b/content/api_en/LIB_sound/WhiteNoise_add.xml @@ -34,19 +34,4 @@ void draw() { The .add() method is useful for modulating other audio signals. ]]> - -noise.add(add) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise_amp.xml b/content/api_en/LIB_sound/WhiteNoise_amp.xml index 98ea36777..83eef598a 100755 --- a/content/api_en/LIB_sound/WhiteNoise_amp.xml +++ b/content/api_en/LIB_sound/WhiteNoise_amp.xml @@ -35,24 +35,4 @@ void draw() { Changes the amplitude/volume of the noise generator. Allowed values are between 0.0 and 1.0. ]]> - -noise.amp(vol) - - - - - - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise_pan.xml b/content/api_en/LIB_sound/WhiteNoise_pan.xml index 3bcfab0ec..ffb68b7cf 100755 --- a/content/api_en/LIB_sound/WhiteNoise_pan.xml +++ b/content/api_en/LIB_sound/WhiteNoise_pan.xml @@ -36,19 +36,4 @@ void draw() { Pan the generator in a stereo panorama. -1.0 pans to the left channel and 1.0 to the right channel. ]]> - -noise.pan(pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise_play.xml b/content/api_en/LIB_sound/WhiteNoise_play.xml index c25d29486..9dd12d80d 100755 --- a/content/api_en/LIB_sound/WhiteNoise_play.xml +++ b/content/api_en/LIB_sound/WhiteNoise_play.xml @@ -34,19 +34,4 @@ void draw() { Starts the White Noise generator. ]]> - -noise.play() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise_set.xml b/content/api_en/LIB_sound/WhiteNoise_set.xml index a4d965129..6ecf74ca1 100755 --- a/content/api_en/LIB_sound/WhiteNoise_set.xml +++ b/content/api_en/LIB_sound/WhiteNoise_set.xml @@ -41,19 +41,4 @@ void mousePressed() { Sets amplitude, add and pan position with one method. ]]> - -noise.set(amp, add, pos) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/WhiteNoise_stop.xml b/content/api_en/LIB_sound/WhiteNoise_stop.xml index a5b932fd8..783fa8a36 100755 --- a/content/api_en/LIB_sound/WhiteNoise_stop.xml +++ b/content/api_en/LIB_sound/WhiteNoise_stop.xml @@ -38,19 +38,4 @@ void mousePressed() { Stops the White Noise generator. ]]> - -noise.stop() - - - - - - -1.0 - -Method - -Library - - From 9d237445d66873f8de0691ea6354e95369e8f564 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Sun, 12 Aug 2018 23:11:44 +0200 Subject: [PATCH 028/299] Update Sound library AudioSample docs --- .../api_en/LIB_sound/AudioSample_channels.xml | 40 ++++++++++++++++ .../api_en/LIB_sound/AudioSample_frames.xml | 36 ++++++++++++++ content/api_en/LIB_sound/AudioSample_read.xml | 37 ++++++++++----- .../LIB_sound/AudioSample_sampleRate.xml | 19 +------- .../api_en/LIB_sound/AudioSample_write.xml | 47 +++++++++++++++++++ .../api_en/LIB_sound/SoundFile_channels.xml | 17 +------ content/api_en/LIB_sound/SoundFile_frames.xml | 17 +------ 7 files changed, 153 insertions(+), 60 deletions(-) create mode 100755 content/api_en/LIB_sound/AudioSample_channels.xml create mode 100755 content/api_en/LIB_sound/AudioSample_frames.xml create mode 100755 content/api_en/LIB_sound/AudioSample_write.xml diff --git a/content/api_en/LIB_sound/AudioSample_channels.xml b/content/api_en/LIB_sound/AudioSample_channels.xml new file mode 100755 index 000000000..af430a14d --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_channels.xml @@ -0,0 +1,40 @@ + + + +channels() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_frames.xml b/content/api_en/LIB_sound/AudioSample_frames.xml new file mode 100755 index 000000000..c58a3c077 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_frames.xml @@ -0,0 +1,36 @@ + + + +frames() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_read.xml b/content/api_en/LIB_sound/AudioSample_read.xml index 97e4c7f06..b21fc039a 100755 --- a/content/api_en/LIB_sound/AudioSample_read.xml +++ b/content/api_en/LIB_sound/AudioSample_read.xml @@ -18,24 +18,39 @@ AudioSample sample; void setup() { size(640, 360); background(255); - - // Load a soundfile from the data folder of the sketch and get the sample rate + + // Create a new audiosample sample = new AudioSample(this, 100000, 22050); - println("SampleRate= " + sample.sampleRate() + " Hz"); + + // Read some data from it (the following calls are just for demonstration, + // a freshly initiated audiosample actually contains nothing but zeros) + + // Read the very first frame: + float frame = sample.read(0); + + // Read the entire sample + float[] sampleContent = new float[100000]; + sample.read(sampleContent); + + // Read only a part of the sample data + float[] subSample = new float[50000]; + // Read 500000 frames, starting at frame 30000 + sample.read(30000, subSample, 0, 50000); } void draw() { } - ]]> -write - -1.0 - -Method - -Library + + +AudioSample.frames() + diff --git a/content/api_en/LIB_sound/AudioSample_sampleRate.xml b/content/api_en/LIB_sound/AudioSample_sampleRate.xml index f9b8b163e..b67c1fb85 100755 --- a/content/api_en/LIB_sound/AudioSample_sampleRate.xml +++ b/content/api_en/LIB_sound/AudioSample_sampleRate.xml @@ -19,14 +19,14 @@ void setup() { size(640, 360); background(255); - // Load a soundfile from the data folder of the sketch and get the sample rate + // Create a new audiosample and read its sample rate sample = new AudioSample(this, 100000, 22050); + // This will just return what we set it to ourselves: 22050 println("SampleRate= " + sample.sampleRate() + " Hz"); } void draw() { } - ]]> @@ -34,19 +34,4 @@ void draw() { Returns the sample rate of the audiosample as an int ]]> - -file.sampleRate() - - -int - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/AudioSample_write.xml b/content/api_en/LIB_sound/AudioSample_write.xml new file mode 100755 index 000000000..201bc22fd --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_write.xml @@ -0,0 +1,47 @@ + + + +write() + +Sound Files + + + +Web & Application + + + + + + + + + +AudioSample.read + + diff --git a/content/api_en/LIB_sound/SoundFile_channels.xml b/content/api_en/LIB_sound/SoundFile_channels.xml index 999ca0916..ace503d83 100755 --- a/content/api_en/LIB_sound/SoundFile_channels.xml +++ b/content/api_en/LIB_sound/SoundFile_channels.xml @@ -31,22 +31,7 @@ void draw() { - -file.channels() - - -int - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_frames.xml b/content/api_en/LIB_sound/SoundFile_frames.xml index 3cd815c88..f4a66de1a 100755 --- a/content/api_en/LIB_sound/SoundFile_frames.xml +++ b/content/api_en/LIB_sound/SoundFile_frames.xml @@ -31,22 +31,7 @@ void draw() { - -file.frames() - - -int - - - -1.0 - -Method - -Library - - From eb468b3507f7ddbd37c74c179ae38c2781a12bfe Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Sun, 12 Aug 2018 23:38:49 +0200 Subject: [PATCH 029/299] Add Sound library docs --- content/api_en/LIB_sound/AudioSample.xml | 15 +-- .../api_en/LIB_sound/AudioSample_pause.xml | 51 +++++++++ content/api_en/LIB_sound/SoundFile.xml | 103 ------------------ 3 files changed, 54 insertions(+), 115 deletions(-) create mode 100755 content/api_en/LIB_sound/AudioSample_pause.xml diff --git a/content/api_en/LIB_sound/AudioSample.xml b/content/api_en/LIB_sound/AudioSample.xml index 3c31a428d..463238650 100755 --- a/content/api_en/LIB_sound/AudioSample.xml +++ b/content/api_en/LIB_sound/AudioSample.xml @@ -39,22 +39,13 @@ void draw() { +This class allows you low-level access to an audio buffer to create, access, manipulate and play back sound samples. - -pan() -Move the audiosample in a stereo panorama (only works for mono samples) - +If you want to pre-load your audio sample with an audio file from disk you can do so using the SoundFile subclass. +]]> SoundFile -2.0 - -Object - -Library - diff --git a/content/api_en/LIB_sound/AudioSample_pause.xml b/content/api_en/LIB_sound/AudioSample_pause.xml new file mode 100755 index 000000000..4ff5f59ca --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_pause.xml @@ -0,0 +1,51 @@ + + + +pause() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/SoundFile.xml b/content/api_en/LIB_sound/SoundFile.xml index 9b698dad8..c6eb0d03c 100755 --- a/content/api_en/LIB_sound/SoundFile.xml +++ b/content/api_en/LIB_sound/SoundFile.xml @@ -28,112 +28,9 @@ void draw() { - - - - - - - - -play() -Play the soundfile - - - -loop() -Loop the soundfile - - - -cue() -Set the starting position of the soundfile - - - -jump() -Jump to a specific position in the file while continuing to play - - - -stop() -Stop the soundfile - - - -rate() -Change the playback rate of the soundfile - - - -amp() -Change the amplitude/volume of the player - - - - - -pan() -Move the soundfile in a stereo panorama - - - -set() -Set multiple parameters at once - - - -duration() -Returns the duration of the soundfile - - - -sampleRate() -Returns the sample rate of the soundfile - - - -frames() -Returns the number of frames/samples of the soundfile - - - -channels() -Returns the number of channels of the soundfile - - - -SoundFile(parent, path) - - - -parent -PApplet: typically use "this" - - - -path -Full Path to file or filename for data path - - - - - - - -1.0 - -Object - -Library - From aab09e553830b561a7646b5895c767fe4891885d Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Mon, 13 Aug 2018 16:57:41 +0200 Subject: [PATCH 030/299] Update Sound lib AudioSample and SoundFile XML doc --- content/api_en/LIB_sound/AudioSample_cue.xml | 37 ++++++++++++++++ content/api_en/LIB_sound/AudioSample_jump.xml | 36 +++++++++++++++ .../api_en/LIB_sound/AudioSample_pause.xml | 4 +- content/api_en/LIB_sound/SoundFile_cue.xml | 18 +------- content/api_en/LIB_sound/SoundFile_jump.xml | 18 +------- content/api_en/LIB_sound/SoundFile_pause.xml | 44 +++++++++++++++++++ content/api_en/LIB_sound/SoundFile_play.xml | 18 +------- 7 files changed, 122 insertions(+), 53 deletions(-) create mode 100755 content/api_en/LIB_sound/AudioSample_cue.xml create mode 100755 content/api_en/LIB_sound/AudioSample_jump.xml create mode 100755 content/api_en/LIB_sound/SoundFile_pause.xml diff --git a/content/api_en/LIB_sound/AudioSample_cue.xml b/content/api_en/LIB_sound/AudioSample_cue.xml new file mode 100755 index 000000000..c4eae7ace --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_cue.xml @@ -0,0 +1,37 @@ + + + +cue() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_jump.xml b/content/api_en/LIB_sound/AudioSample_jump.xml new file mode 100755 index 000000000..290eb7cfd --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_jump.xml @@ -0,0 +1,36 @@ + + + +jump() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_pause.xml b/content/api_en/LIB_sound/AudioSample_pause.xml index 4ff5f59ca..67ece9ab7 100755 --- a/content/api_en/LIB_sound/AudioSample_pause.xml +++ b/content/api_en/LIB_sound/AudioSample_pause.xml @@ -28,7 +28,7 @@ void setup() { // Create the audiosample based on the data, set framerate to play 200 oscillations/second sample = new AudioSample(this, sinewave, 200 * resolution); - sample.loop(); + sample.play(); } void draw() { @@ -38,7 +38,7 @@ void mousePressed() { if (sample.isPlaying()) { sample.pause(); } else { - sample.loop(); + sample.play(); } } ]]> diff --git a/content/api_en/LIB_sound/SoundFile_cue.xml b/content/api_en/LIB_sound/SoundFile_cue.xml index b776d4657..bded003ce 100755 --- a/content/api_en/LIB_sound/SoundFile_cue.xml +++ b/content/api_en/LIB_sound/SoundFile_cue.xml @@ -27,27 +27,11 @@ void setup() { void draw() { } - ]]> - -file.cue(second) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_jump.xml b/content/api_en/LIB_sound/SoundFile_jump.xml index 195148440..23bb57fa1 100755 --- a/content/api_en/LIB_sound/SoundFile_jump.xml +++ b/content/api_en/LIB_sound/SoundFile_jump.xml @@ -26,27 +26,11 @@ void setup() { void draw() { } - ]]> - -file.jump(second) - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_pause.xml b/content/api_en/LIB_sound/SoundFile_pause.xml new file mode 100755 index 000000000..abfe629ae --- /dev/null +++ b/content/api_en/LIB_sound/SoundFile_pause.xml @@ -0,0 +1,44 @@ + + + +pause() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/SoundFile_play.xml b/content/api_en/LIB_sound/SoundFile_play.xml index f1dff831d..2a27f48f7 100755 --- a/content/api_en/LIB_sound/SoundFile_play.xml +++ b/content/api_en/LIB_sound/SoundFile_play.xml @@ -26,27 +26,11 @@ void setup() { void draw() { } - ]]> - -file.play() - - - - - - -1.0 - -Method - -Library - - From 9cc143c7ae5e6bbfae9c43dc0daa42cef11ad619 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Mon, 13 Aug 2018 17:25:43 +0200 Subject: [PATCH 031/299] Add new Sound lib methods --- .../api_en/LIB_sound/AudioSample_duration.xml | 38 +++++++++++++++ content/api_en/LIB_sound/AudioSample_pan.xml | 38 +++++++++++++++ content/api_en/LIB_sound/AudioSample_rate.xml | 47 +++++++++++++++++++ .../api_en/LIB_sound/AudioSample_resize.xml | 40 ++++++++++++++++ .../api_en/LIB_sound/SoundFile_duration.xml | 18 +------ content/api_en/LIB_sound/SoundFile_pan.xml | 17 +------ content/api_en/LIB_sound/SoundFile_rate.xml | 20 +------- 7 files changed, 167 insertions(+), 51 deletions(-) create mode 100755 content/api_en/LIB_sound/AudioSample_duration.xml create mode 100755 content/api_en/LIB_sound/AudioSample_pan.xml create mode 100755 content/api_en/LIB_sound/AudioSample_rate.xml create mode 100755 content/api_en/LIB_sound/AudioSample_resize.xml diff --git a/content/api_en/LIB_sound/AudioSample_duration.xml b/content/api_en/LIB_sound/AudioSample_duration.xml new file mode 100755 index 000000000..b083d3e47 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_duration.xml @@ -0,0 +1,38 @@ + + + +duration() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_pan.xml b/content/api_en/LIB_sound/AudioSample_pan.xml new file mode 100755 index 000000000..7b2b176db --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_pan.xml @@ -0,0 +1,38 @@ + + + +pan() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_rate.xml b/content/api_en/LIB_sound/AudioSample_rate.xml new file mode 100755 index 000000000..fbe8dc446 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_rate.xml @@ -0,0 +1,47 @@ + + + +rate() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_resize.xml b/content/api_en/LIB_sound/AudioSample_resize.xml new file mode 100755 index 000000000..d326abdc6 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_resize.xml @@ -0,0 +1,40 @@ + + + +resize() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/SoundFile_duration.xml b/content/api_en/LIB_sound/SoundFile_duration.xml index 1b0001e75..969d68a02 100755 --- a/content/api_en/LIB_sound/SoundFile_duration.xml +++ b/content/api_en/LIB_sound/SoundFile_duration.xml @@ -26,27 +26,11 @@ void setup() { void draw() { } - ]]> - -file.duration() - - -float - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_pan.xml b/content/api_en/LIB_sound/SoundFile_pan.xml index 5ffd87f98..44e6f2746 100755 --- a/content/api_en/LIB_sound/SoundFile_pan.xml +++ b/content/api_en/LIB_sound/SoundFile_pan.xml @@ -32,22 +32,7 @@ void draw() { - -file.pan() - - - - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_rate.xml b/content/api_en/LIB_sound/SoundFile_rate.xml index d986e0ca7..953ca579d 100755 --- a/content/api_en/LIB_sound/SoundFile_rate.xml +++ b/content/api_en/LIB_sound/SoundFile_rate.xml @@ -21,33 +21,17 @@ void setup() { // Load a soundfile from the data folder of the sketch and play it back double the speed file = new SoundFile(this, "sample.mp3"); - file.play(); + file.loop(); file.rate(2); } void draw() { } - ]]> - -file.rate() - - - - - - -1.0 - -Method - -Library - - From 2989a0e0f763d927f62922cd1e9d4b0ed0b9459e Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Mon, 13 Aug 2018 18:01:17 +0200 Subject: [PATCH 032/299] Add new Sound library configuration class XML --- content/api_en/LIB_sound/AudioSample_play.xml | 40 +++++++++++++++++++ .../api_en/LIB_sound/AudioSample_write.xml | 8 ++-- content/api_en/LIB_sound/FFT_analyze.xml | 24 +---------- content/api_en/LIB_sound/SoundFile_play.xml | 4 +- .../api_en/LIB_sound/Sound_inputDevice.xml | 33 +++++++++++++++ content/api_en/LIB_sound/Sound_list.xml | 1 + .../api_en/LIB_sound/Sound_outputDevice.xml | 33 +++++++++++++++ content/api_en/LIB_sound/Sound_sampleRate.xml | 31 ++++++++++++++ 8 files changed, 147 insertions(+), 27 deletions(-) create mode 100755 content/api_en/LIB_sound/AudioSample_play.xml create mode 100755 content/api_en/LIB_sound/Sound_inputDevice.xml create mode 100755 content/api_en/LIB_sound/Sound_outputDevice.xml create mode 100755 content/api_en/LIB_sound/Sound_sampleRate.xml diff --git a/content/api_en/LIB_sound/AudioSample_play.xml b/content/api_en/LIB_sound/AudioSample_play.xml new file mode 100755 index 000000000..d1584ae38 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_play.xml @@ -0,0 +1,40 @@ + + + +play() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_write.xml b/content/api_en/LIB_sound/AudioSample_write.xml index 201bc22fd..e8cfbeb4c 100755 --- a/content/api_en/LIB_sound/AudioSample_write.xml +++ b/content/api_en/LIB_sound/AudioSample_write.xml @@ -24,9 +24,11 @@ void setup() { // A freshly initiated audiosample contains nothing but zeros, so let's // write some data to it. - - // Write a random number to the first frame - sample.write(0, rand()); + for (int i = 0; i < sample.frames(); i++) { + // Random numbers will make it sound like white noise + sample.write(i, random(-100, 100)); + } + sample.play(); } void draw() { diff --git a/content/api_en/LIB_sound/FFT_analyze.xml b/content/api_en/LIB_sound/FFT_analyze.xml index 6c05e7396..4bd4c1bfa 100755 --- a/content/api_en/LIB_sound/FFT_analyze.xml +++ b/content/api_en/LIB_sound/FFT_analyze.xml @@ -41,34 +41,14 @@ void draw() { for(int i = 0; i < bands; i++){ // The result of the FFT is normalized // draw the line for frequency band i scaling it up by 5 to get more amplitude. - line( i, height, i, height - spectrum[i]*height*5 ); + line(i, height, i, height - spectrum[i]*height*5 ); } } ]]> - -amp.analyze() - - - - - - - -float - - - -1.0 - -Method - -Library - - diff --git a/content/api_en/LIB_sound/SoundFile_play.xml b/content/api_en/LIB_sound/SoundFile_play.xml index 2a27f48f7..f3bb129ef 100755 --- a/content/api_en/LIB_sound/SoundFile_play.xml +++ b/content/api_en/LIB_sound/SoundFile_play.xml @@ -22,7 +22,7 @@ void setup() { // Load a soundfile from the /data folder of the sketch and play it back file = new SoundFile(this, "sample.mp3"); file.play(); -} +} void draw() { } @@ -30,7 +30,7 @@ void draw() { diff --git a/content/api_en/LIB_sound/Sound_inputDevice.xml b/content/api_en/LIB_sound/Sound_inputDevice.xml new file mode 100755 index 000000000..e49c0535a --- /dev/null +++ b/content/api_en/LIB_sound/Sound_inputDevice.xml @@ -0,0 +1,33 @@ + + + +inputDevice() + +Sound + +Configuration + +Web & Application + + + + + + + + + +AudioIn + + + diff --git a/content/api_en/LIB_sound/Sound_list.xml b/content/api_en/LIB_sound/Sound_list.xml index 158f3b102..80644eb01 100755 --- a/content/api_en/LIB_sound/Sound_list.xml +++ b/content/api_en/LIB_sound/Sound_list.xml @@ -22,6 +22,7 @@ void setup() { diff --git a/content/api_en/LIB_sound/Sound_outputDevice.xml b/content/api_en/LIB_sound/Sound_outputDevice.xml new file mode 100755 index 000000000..3f26b40eb --- /dev/null +++ b/content/api_en/LIB_sound/Sound_outputDevice.xml @@ -0,0 +1,33 @@ + + + +outputDevice() + +Sound + +Configuration + +Web & Application + + + + + + + + + +AudioIn + + + diff --git a/content/api_en/LIB_sound/Sound_sampleRate.xml b/content/api_en/LIB_sound/Sound_sampleRate.xml new file mode 100755 index 000000000..0e37ce728 --- /dev/null +++ b/content/api_en/LIB_sound/Sound_sampleRate.xml @@ -0,0 +1,31 @@ + + +sampleRate() + +Sound + +Configuration + +Application + + + + + + + + + From a7410f6c539ef7bc08c6a2b86386e21a3fff0c86 Mon Sep 17 00:00:00 2001 From: Jakub Valtar Date: Tue, 14 Aug 2018 13:59:41 +0200 Subject: [PATCH 033/299] Fix links to processing wiki --- content/api_en/environment/index.html | 6 +++--- content/api_en/include/String.xml | 2 +- content/api_en/include/equality.xml | 2 +- content/examples/Topics/Advanced Data/Threads/Threads.pde | 1 - content/static/download.html | 6 +++--- content/static/tutorials/android/index.html | 2 +- content/static/tutorials/gettingstarted/index.html | 2 +- subscribe/index.php | 6 +++--- templates/template.cover.html | 2 +- templates/template.nav.php | 2 +- todo-web.txt | 2 +- 11 files changed, 16 insertions(+), 17 deletions(-) diff --git a/content/api_en/environment/index.html b/content/api_en/environment/index.html index 4d2e038d2..5d92731eb 100644 --- a/content/api_en/environment/index.html +++ b/content/api_en/environment/index.html @@ -531,8 +531,8 @@
        Android Mode

        Sketches written in this mode can be exported to run on Android phones and tablets. - This mode is documented on the - Processing for Android page of the Processing Wiki. To add this mode, click on + This mode is documented on the + Processing for Android page. To add this mode, click on the mode button in the upper-right corner of the PDE and select "Add Mode..."

        --> @@ -574,7 +574,7 @@

        - The Export information and + The Export information and Tips page on the Processing Wiki covers the details of exporting Applications from Java mode.

        diff --git a/content/api_en/include/String.xml b/content/api_en/include/String.xml index e4c4a9625..130d63116 100755 --- a/content/api_en/include/String.xml +++ b/content/api_en/include/String.xml @@ -46,7 +46,7 @@ println(quoted); // This one has "quotes" String includes methods for examining individual characters, comparing strings, searching strings, extracting parts of strings, and for converting an entire string uppercase and lowercase. Strings are always defined inside double quotes ("Abc"), and characters are always defined inside single quotes ('A').

        -To compare the contents of two Strings, use the equals() method, as in if (a.equals(b)), instead of if (a == b). A String is an Object, so comparing them with the == operator only compares whether both Strings are stored in the same memory location. Using the equals() method will ensure that the actual contents are compared. (The troubleshooting reference has a longer explanation.)
        +To compare the contents of two Strings, use the equals() method, as in if (a.equals(b)), instead of if (a == b). A String is an Object, so comparing them with the == operator only compares whether both Strings are stored in the same memory location. Using the equals() method will ensure that the actual contents are compared. (The troubleshooting reference has a longer explanation.)

        Because a String is defined between double quotation marks, to include such marks within the String itself you must use the \ (backslash) character. (See the third example above.) This is known as an escape sequence. Other escape sequences include \t for the tab character and \n for new line. Because backslash is the escape character, to include a single backslash within a String, you must use two consecutive backslashes, as in: \\

        diff --git a/content/api_en/include/equality.xml b/content/api_en/include/equality.xml index 4ddfbd69a..a8bbda074 100755 --- a/content/api_en/include/equality.xml +++ b/content/api_en/include/equality.xml @@ -22,7 +22,7 @@ if (a == b) {
        -Note that when comparing String objects, you must use the equals() method instead of == to compare their contents. See the reference for String or the troubleshooting note for more explanation. +Note that when comparing String objects, you must use the equals() method instead of == to compare their contents. See the reference for String or the troubleshooting note for more explanation. ]]>
        diff --git a/content/examples/Topics/Advanced Data/Threads/Threads.pde b/content/examples/Topics/Advanced Data/Threads/Threads.pde index f43bc3d2e..f7714a10e 100644 --- a/content/examples/Topics/Advanced Data/Threads/Threads.pde +++ b/content/examples/Topics/Advanced Data/Threads/Threads.pde @@ -9,7 +9,6 @@ * the code inside the function passed to thread() will operate * in the background. * - * For more about threads, see: http://wiki.processing.org/w/Threading */ // This sketch will load data from all of these URLs in a separate thread diff --git a/content/static/download.html b/content/static/download.html index ed0664dc1..3057816c4 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -27,8 +27,8 @@

        Download Processing. Process
        Read about the changes in 3.0. The list of revisions covers the differences between releases in detail. @@ -375,7 +375,7 @@

        Pre-Releases

        - Processing is Open Source Software. The PDE (Processing Development Environment) is released under the GNU GPL (General Public License). The export libraries (also known as 'core') are released under the GNU LGPL (Lesser General Public License). There's more information about Processing and Open Source in the FAQ and more information about the GNU GPL and GNU LGPL at opensource.org. Please support Processing! + Processing is Open Source Software. The PDE (Processing Development Environment) is released under the GNU GPL (General Public License). The export libraries (also known as 'core') are released under the GNU LGPL (Lesser General Public License). There's more information about Processing and Open Source in the FAQ and more information about the GNU GPL and GNU LGPL at opensource.org. Please support Processing!
        diff --git a/content/static/tutorials/android/index.html b/content/static/tutorials/android/index.html index f339fd9ba..75a355092 100644 --- a/content/static/tutorials/android/index.html +++ b/content/static/tutorials/android/index.html @@ -121,7 +121,7 @@

        Step Three: Running the App on a Device

        Some helpful tips when you’re working with Processing & Android:

        - I know I’ve said this before, but be patient. Canceling a process (ie. the emulator load or a device compile) can cause problems. If you do this inadvertently, you’re best off restarting Processing.

        -

        - Make sure to check out the Processing Android Wiki, where you’ll find some troubleshooting advice, and some tips on how to get your sketches working properly on your device.

        +

        - Make sure to check out the Processing Android Wiki, where you’ll find some troubleshooting advice, and some tips on how to get your sketches working properly on your device.

        This tutorial is for Processing version 2.0+. If you see any errors or have comments, please let us know. This tutorial is adapted from 'Processing & Android: Mobile App Development Made (Very) Easy' by Jer Thorp

        diff --git a/content/static/tutorials/gettingstarted/index.html b/content/static/tutorials/gettingstarted/index.html index 5def1e1a5..2ebe7335b 100644 --- a/content/static/tutorials/gettingstarted/index.html +++ b/content/static/tutorials/gettingstarted/index.html @@ -34,7 +34,7 @@

        Casey Reas and Ben Fry

        ./processing
      -

      With any luck, the main Processing window will now be visible. Everyone's setup is different, so if the program didn't start, or you're otherwise stuck, visit the troubleshooting page for possible solutions.

      +

      With any luck, the main Processing window will now be visible. Everyone's setup is different, so if the program didn't start, or you're otherwise stuck, visit the troubleshooting page for possible solutions.

      diff --git a/subscribe/index.php b/subscribe/index.php index 09b856f39..a684a7fc8 100755 --- a/subscribe/index.php +++ b/subscribe/index.php @@ -94,9 +94,9 @@ Shop

      »Forum
      »GitHub
      - »Issues
      - »Wiki
      - »FAQ
      + »Issues
      + »Wiki
      + »FAQ
      »Twitter
      »Facebook

      diff --git a/templates/template.cover.html b/templates/template.cover.html index 14c2cf8ab..4fb734230 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -124,7 +124,7 @@

      T-shirts!

      Processing on GitHub to read instructions for downloading the code, building from the source, - reporting and tracking bugs, and + reporting and tracking bugs, and creating libraries and tools.

      diff --git a/templates/template.nav.php b/templates/template.nav.php index 415d91811..878ce4580 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -33,7 +33,7 @@ 'People' => array('/people/', 2), 'Foundation' => array('/foundation/', 2), - 'FAQ' => array('http://wiki.processing.org/w/FAQ', 1), + 'FAQ' => array('https://github.com/processing/processing/wiki', 1), ); diff --git a/todo-web.txt b/todo-web.txt index ef1c459d5..9ce53ba0b 100644 --- a/todo-web.txt +++ b/todo-web.txt @@ -83,7 +83,7 @@ Shop > Twitter > Forum -> Wiki +> Wiki > Issues > GitHub From 99f5e3ae8944f904759bba782b1eb5a5efdd55d7 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Wed, 15 Aug 2018 14:24:59 +0200 Subject: [PATCH 034/299] Add new Sound library isPlaying methods --- .../LIB_sound/AudioSample_isPlaying.xml | 45 +++++++++++++++++++ .../api_en/LIB_sound/SoundFile_isPlaying.xml | 45 +++++++++++++++++++ .../api_en/LIB_sound/Sound_inputDevice.xml | 3 ++ 3 files changed, 93 insertions(+) create mode 100755 content/api_en/LIB_sound/AudioSample_isPlaying.xml create mode 100755 content/api_en/LIB_sound/SoundFile_isPlaying.xml diff --git a/content/api_en/LIB_sound/AudioSample_isPlaying.xml b/content/api_en/LIB_sound/AudioSample_isPlaying.xml new file mode 100755 index 000000000..9a7ab422b --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_isPlaying.xml @@ -0,0 +1,45 @@ + + + +isPlaying() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/SoundFile_isPlaying.xml b/content/api_en/LIB_sound/SoundFile_isPlaying.xml new file mode 100755 index 000000000..fb5ec3082 --- /dev/null +++ b/content/api_en/LIB_sound/SoundFile_isPlaying.xml @@ -0,0 +1,45 @@ + + + +isPlaying() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/Sound_inputDevice.xml b/content/api_en/LIB_sound/Sound_inputDevice.xml index e49c0535a..e09498aac 100755 --- a/content/api_en/LIB_sound/Sound_inputDevice.xml +++ b/content/api_en/LIB_sound/Sound_inputDevice.xml @@ -18,6 +18,9 @@ void setup() { // Create a Sound object and select the second sound device (device ids start at 0) for input Sound s = new Sound(this); s.inputDevice(1); + + // Now get the first audio input channel from that sound device (ids again start at 0) + AudioIn in = new AudioIn(this, 0); } ]]> From 8ef2d07fd22162f298b90d9837744ace9650adea Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Wed, 15 Aug 2018 18:20:18 +0200 Subject: [PATCH 035/299] Switch Sound library reference repository back to processing github --- generate/reference.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate/reference.php b/generate/reference.php index 1f9f27b67..5e2a7532c 100644 --- a/generate/reference.php +++ b/generate/reference.php @@ -40,7 +40,7 @@ function out($output) { $soundRepoPath = "{$path}../processing-sound"; //$shell_output = shell_exec("cd $soundRepoPath && /usr/bin/git pull https://github.com/processing/processing-sound/ 2>&1"); // clone new processing-sound library from work-in-progress repository instead -$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/kevinstadler/processing-sound.git . 2>&1"); +$shell_output = shell_exec("rm -rf $soundRepoPath && mkdir $soundRepoPath && cd $soundRepoPath && /usr/bin/git clone https://github.com/processing/processing-sound.git . 2>&1"); out($shell_output); out("---------------"); From 141a96bd1372fd1dddce8fbace6ebbeb83849266 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 17 Aug 2018 20:48:17 +0200 Subject: [PATCH 036/299] Update Sound library index.html with new classes --- content/api_en/LIB_sound/index.html | 146 ++++++++++++++-------------- 1 file changed, 75 insertions(+), 71 deletions(-) diff --git a/content/api_en/LIB_sound/index.html b/content/api_en/LIB_sound/index.html index 007b42f79..5bee0974e 100755 --- a/content/api_en/LIB_sound/index.html +++ b/content/api_en/LIB_sound/index.html @@ -1,71 +1,75 @@ - -

      Sound

      - -
      -

      - The new Sound library for Processing 3 provides a simple way to work with audio. It can play, analyze, and synthesize sound. The library comes with a collection of oscillators for basic wave forms, a variety of noise generators, and effects and filters to alter sound files and other generated sounds. The syntax is minimal to make it easy to patch one sound object into another. -

      -

      - The source code is available on the processing-sound GitHub repository. Please report bugs here. This library is only compatible with Processing 3.0+. -

      - -
      - -
      -

      - - I/O -

      - AudioDevice
      - AudioIn
      -

      - - Audio Files - -

      - SoundFile
      -

      - - Effects - -

      - LowPass
      - HighPass
      - BandPass
      - Delay
      - Reverb
      -

      - - Analysis -

      - Amplitude
      - FFT
      -

      - -

      -
      - -
      -

      - Noise -

      - WhiteNoise
      - PinkNoise
      - BrownNoise
      -

      - - Oscillators -

      - SinOsc
      - SawOsc
      - SqrOsc
      - TriOsc
      - Pulse
      -

      - - Envelopes -

      - Env
      -

      -

      -
      + +

      Sound

      + +
      +

      + The new Sound library for Processing 3 provides a simple way to work with audio. It can play, analyze, and synthesize sound. It provides a collection of oscillators for basic wave forms, a variety of noise generators, and effects and filters to play and alter sound files and other generated sounds. The syntax is minimal to make it easy to patch one sound object into another. The library also comes with example sketches covering many use cases to help you get started. +

      +

      + The source code is available on the processing-sound GitHub repository. Please report bugs here. This library is only compatible with Processing 3.0+. +

      + +
      + +
      +

      + + Configuration +

      + Sound
      +

      + + I/O +

      + AudioIn
      +

      + + Sampling +

      + SoundFile
      + AudioSample
      +

      + + Effects + +

      + LowPass
      + HighPass
      + BandPass
      + Delay
      + Reverb
      +

      + +

      +
      + +
      +

      + Noise +

      + WhiteNoise
      + PinkNoise
      + BrownNoise
      +

      + + Oscillators +

      + SinOsc
      + SawOsc
      + SqrOsc
      + TriOsc
      + Pulse
      +

      + + Envelopes +

      + Env
      +

      + + Analysis +

      + Amplitude
      + FFT
      +

      +

      +
      From 8d90c532141f235529f4defb53bfae3afe9d1972 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphae=CC=88l=20de=20Courville?= Date: Wed, 29 Aug 2018 12:50:04 +0200 Subject: [PATCH 037/299] =?UTF-8?q?Updated=20the=20text=20for=20the=20get(?= =?UTF-8?q?)=20page=20to=20clarify=20what=20happens=20when=20calling=20get?= =?UTF-8?q?(x,=20y,=20w,=20h).=20as=20suggested=20in=20the=20forums=20?= =?UTF-8?q?=E2=9E=A1=EF=B8=8F=20https://discourse.processing.org/t/what-do?= =?UTF-8?q?es-get-return/3069?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/api_en/get.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/api_en/get.xml b/content/api_en/get.xml index c1307b3cd..89683590c 100755 --- a/content/api_en/get.xml +++ b/content/api_en/get.xml @@ -33,8 +33,10 @@ rect(25, 25, 50, 50); x and y parameters to get the value of one pixel. Get a section of the display window by specifying additional w and h parameters. When getting an image, the x and y parameters define the coordinates for the upper-left corner of the image, regardless of the current imageMode().

      -If the pixel requested is outside of the image window, black is returned. The numbers returned are scaled according to the current color ranges, but only RGB values are returned by this function. For example, even though you may have drawn a shape with colorMode(HSB), the numbers returned will be in RGB format. -

      +If the pixel requested is outside of the image window, black is returned. The numbers returned are scaled according to the current color ranges, but only RGB values are returned by this function. For example, even though you may have drawn a shape with colorMode(HSB), the numbers returned will be in RGB format.
      +
      +If a width and a height are specified, get(x, y, w, h) returns a PImage corresponding to the part of the original PImage where the top left pixel is at the (x, y) position with a width of w a height of h.
      +
      Getting the color of a single pixel with get(x, y) is easy, but not as fast as grabbing the data directly from pixels[]. The equivalent statement to get(x, y) using pixels[] is pixels[y*width+x]. See the reference for pixels[] for more information. ]]>
      From cd7f2bc8face79dcd636a932c9a9282351e5ebbd Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 18 Sep 2018 08:57:31 -0400 Subject: [PATCH 038/299] Rename libreTSPSWP Library to tramontanaCV. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 2ff56edb5..e19de577c 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -261,7 +261,7 @@ 186 \ https://github.com/leadedge/SpoutProcessing/releases/download/latest/spout.txt 201 \ https://github.com/diwi/PixelFlow/releases/download/latest/PixelFlow.txt 211 \ https://github.com/diwi/PS3Eye/releases/download/latest/PS3Eye.txt -222 \ https://pierdr.github.io/libreTSPSWP/download/libreTSPSWP.txt +222 \ https://pierdr.github.io/tramontanaCV/download/tramontanaCV.txt 223 \ https://github.com/nyatla/NyARToolkit-for-Processing/releases/download/latest/nyar4psg.txt 227 \ https://github.com/Milchreis/processing-imageprocessing/releases/download/latest/processing-imageprocessing.txt From 1b5277352ee97a7d01831812649c9fcce2de9a34 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 2 Oct 2018 14:01:14 -0700 Subject: [PATCH 039/299] Update for size() reference --- content/api_en/size.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/size.xml b/content/api_en/size.xml index 1f1a2b87e..bd6f4c1b0 100755 --- a/content/api_en/size.xml +++ b/content/api_en/size.xml @@ -51,7 +51,7 @@ box(35); setup() function, the size() function must be the first line of code inside setup().
      +Defines the dimension of the display window width and height in units of pixels. In a program that has the setup() function, the size() function must be the first line of code inside setup(), and the setup() function must appear in the code tab with the same name as your sketch folder.

      The built-in variables width and height are set by the parameters passed to this function. For example, running size(640, 480) will assign 640 to the width variable and 480 to the height variable. If size() is not used, the window will be given a default size of 100 x 100 pixels.

      From db03f79ee46609a5f797c3793efff183f37fac3e Mon Sep 17 00:00:00 2001 From: Rajduino Date: Fri, 5 Oct 2018 19:50:31 +0530 Subject: [PATCH 040/299] Rectifying graph for mouseX signal The mouseX signal is not properly drawn on the graph, xvals[i] is simply divided by 3 like in the case for mouseY, which is not the case, but instead, it should be mapped from "width" to "height/3" . Hence the line 49: point(i, map(xvals[i],0,width,0,height/3-1)); --- content/examples/Basics/Input/MouseSignals/MouseSignals.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Input/MouseSignals/MouseSignals.pde b/content/examples/Basics/Input/MouseSignals/MouseSignals.pde index c4776751d..b5110bf26 100644 --- a/content/examples/Basics/Input/MouseSignals/MouseSignals.pde +++ b/content/examples/Basics/Input/MouseSignals/MouseSignals.pde @@ -46,7 +46,7 @@ void draw() for(int i=1; i Date: Tue, 9 Oct 2018 14:51:37 -0700 Subject: [PATCH 041/299] Correction for Network tutorial --- content/static/tutorials/network/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/static/tutorials/network/index.html b/content/static/tutorials/network/index.html index 44bd18337..65a781bb9 100644 --- a/content/static/tutorials/network/index.html +++ b/content/static/tutorials/network/index.html @@ -88,7 +88,8 @@

      Example 1: Web client

        fill(200);   c = new Client(this, "www.ucla.edu", 80); // Connect to server on port 80   c.write("GET / HTTP/1.0\n"); // Use the HTTP "GET" command to ask for a webpage -  c.write("Host: my_domain_name.com\n\n"); // Be polite and say who we are + +  c.write("Host: www.ucla.edu\n\n"); // Tell the server for which domain you are making the requestvoid draw() { From 7b76925fa07d205f96890519ae74c79720a13366 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 9 Oct 2018 14:55:32 -0700 Subject: [PATCH 042/299] Correction for Network tutorial --- content/static/tutorials/network/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/content/static/tutorials/network/index.html b/content/static/tutorials/network/index.html index 65a781bb9..03bd0c8d7 100644 --- a/content/static/tutorials/network/index.html +++ b/content/static/tutorials/network/index.html @@ -88,7 +88,6 @@

      Example 1: Web client

        fill(200);   c = new Client(this, "www.ucla.edu", 80); // Connect to server on port 80   c.write("GET / HTTP/1.0\n"); // Use the HTTP "GET" command to ask for a webpage -   c.write("Host: www.ucla.edu\n\n"); // Tell the server for which domain you are making the request }  From 1b00fd0194087d195929aafbe37c50a011cd6b4a Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Sat, 13 Oct 2018 11:26:07 -0700 Subject: [PATCH 043/299] Add unbinary int signature --- content/api_en/unbinary.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/content/api_en/unbinary.xml b/content/api_en/unbinary.xml index dcab5cbf8..c4f3d0388 100755 --- a/content/api_en/unbinary.xml +++ b/content/api_en/unbinary.xml @@ -17,11 +17,20 @@ String s3 = "00000100"; println(unbinary(s1)); // Prints "16" println(unbinary(s2)); // Prints "8" println(unbinary(s3)); // Prints "4" + +int i1 = 10000; +int i2 = 1000; +int i3 = 100 +println(unbinary(i1)); // Prints "16" +println(unbinary(i2)); // Prints "8" +println(unbinary(i3)); // Prints "4" ]]> String
      representation of a binary number to its equivalent integer value. For example, unbinary("00001000") will return 8. + +Alternately, converts an int representation of a binary number to its equivalent integer value. For example, unbinary(1000) will return 8. ]]> From c030d2fe641b332954d943c789e663560ffbd21f Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 16 Nov 2018 14:08:18 -0500 Subject: [PATCH 044/299] Update Camera3D and ColorBlindness URLs to use https. --- contrib_generate/sources.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index e19de577c..530c97abb 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -18,7 +18,7 @@ 120 \ https://simple-openni.googlecode.com/svn/trunk/SimpleOpenNI-2.0/dist/all/SimpleOpenNI.txt 123 \ http://igeo.jp/igeo.txt 130 \ https://github.com/codeanticode/planetarium/releases/download/latest/planetarium.txt -174 \ http://ixora.io/downloads/camera3D/Camera3D.txt +174 \ https://ixora.io/downloads/camera3D/Camera3D.txt 195 \ http://culebra.technology/culebra.txt 196 \ https://github.com/jrc03c/queasycam/releases/download/latest/queasycam.txt 215 \ http://maxlfarrell.gitlab.io/extruder/extruder.txt @@ -228,7 +228,7 @@ 192 \ https://github.com/barelief/freeTransform-processing/releases/download/latest/FreeTransform.txt 193 \ http://shiffman.net/p5/libraries/processing3/mpe/mpe.txt 201 \ https://github.com/diwi/PixelFlow/releases/download/latest/PixelFlow.txt -202 \ http://ixora.io/downloads/colorblindness/ColorBlindness.txt +202 \ https://ixora.io/downloads/colorblindness/ColorBlindness.txt 207 \ https://github.com/Lord-of-the-Galaxy/Timing-Utilities/releases/download/latest/timing_utils.txt 210 \ http://cagewebdev.com/colorharmony/colorharmony.txt 212 \ https://github.com/cansik/processing-postfx/releases/download/latest/PostFX.txt From accce3e4bea943aa0174921662a7ee68c79c06b9 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 16 Nov 2018 14:42:34 -0500 Subject: [PATCH 045/299] Add Scratch library to contributions. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 530c97abb..272b19125 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 235 +# Next ID: 236 # Increment after assigning ID to new contribution [Library : 3D] @@ -235,6 +235,7 @@ 213 \ https://github.com/AlexPoupakis/mouse2DTransformations/releases/download/latest/Mouse2DTransformations.txt 217 \ https://pierdr.github.io/Tramontana-for-Processing/tramontana.txt 229 \ https://github.com/Shinhoo/Wooting-Keyboard-Library/releases/download/lastest/WootingKeyboard.txt +235 \ https://www.barkmin.eu/processing-library-scratch/download/scratch.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 99396b290aa52fd0829ba37045e657390f4b71d6 Mon Sep 17 00:00:00 2001 From: Ed Griebel Date: Wed, 28 Nov 2018 12:20:52 -0500 Subject: [PATCH 046/299] Fix typo in a displayed comment --- .../examples_p5/Basics/Color/RadialGradient/RadialGradient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples_p5/Basics/Color/RadialGradient/RadialGradient.js b/content/examples_p5/Basics/Color/RadialGradient/RadialGradient.js index f571de60b..f79678a9d 100644 --- a/content/examples_p5/Basics/Color/RadialGradient/RadialGradient.js +++ b/content/examples_p5/Basics/Color/RadialGradient/RadialGradient.js @@ -1,7 +1,7 @@ /** * Radial Gradient. * - * Draws are series of concentric circles to create a gradient + * Draws a series of concentric circles to create a gradient * from one color to another. */ From 8b7767e3e9b7c06aac9cf245692171b1f6272dc9 Mon Sep 17 00:00:00 2001 From: "Griebel Jr, Edward E" Date: Wed, 28 Nov 2018 12:50:16 -0500 Subject: [PATCH 047/299] Fix typo in a displayed comment --- content/examples/Basics/Color/RadialGradient/RadialGradient.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Color/RadialGradient/RadialGradient.pde b/content/examples/Basics/Color/RadialGradient/RadialGradient.pde index ed358a1e5..62df103d8 100644 --- a/content/examples/Basics/Color/RadialGradient/RadialGradient.pde +++ b/content/examples/Basics/Color/RadialGradient/RadialGradient.pde @@ -1,7 +1,7 @@ /** * Radial Gradient. * - * Draws are series of concentric circles to create a gradient + * Draws a series of concentric circles to create a gradient * from one color to another. */ From 677f211b05f6b8c59ca3b643f9c7fe8d0a1e08d2 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 21 Dec 2018 22:20:11 -0800 Subject: [PATCH 048/299] Updates to overview page, cover, navigation --- content/static/overview.html | 13 ++++--- templates/template.cover.html | 66 +---------------------------------- templates/template.nav.php | 4 +-- 3 files changed, 11 insertions(+), 72 deletions(-) diff --git a/content/static/overview.html b/content/static/overview.html index 13349191d..aa6831a91 100644 --- a/content/static/overview.html +++ b/content/static/overview.html @@ -6,15 +6,16 @@

      Overview. A short introducti

      - For the past fourteen years, Processing has promoted software literacy, particularly within the visual arts, and visual literacy within technology. Initially created to serve as a software sketchbook and to teach programming fundamentals within a visual context, Processing has also evolved into a development tool for professionals. The Processing software is free and open source, and runs on the Mac, Windows, and GNU/Linux platforms. + For the past sixteen years, Processing has promoted software literacy, particularly within the visual arts, and visual literacy within technology. Initially created to serve as a software sketchbook and to teach programming fundamentals within a visual context, Processing has also evolved into a development tool for professionals. The Processing software is free and open source, and runs on the Mac, Windows, and GNU/Linux platforms.

      Processing continues to be an alternative to proprietary software tools with restrictive and expensive licenses, making it accessible to schools and individual students. Its open source status encourages the community participation and collaboration that is vital to Processing’s growth. Contributors share programs, contribute code, and build libraries, tools, and modes to extend the possibilities of the software. The Processing community has written more than a hundred libraries to facilitate computer vision, data visualization, music composition, networking, 3D file exporting, and programming electronics.

      +

      Education

      @@ -27,7 +28,7 @@

      Education

      - The innovations in teaching through Processing have been adapted for the Khan Academy computer science tutorials, offered online for free. The tutorials begin with drawing, using most of the Processing functions for drawing. The Processing approach has also been applied to electronics through the Arduino and Wiring projects. Arduino uses a syntax inspired by that used with Processing, and continues to use a modified version of the Processing programming environment to make it easier for students to learn how to program robots and countless other electronics projects. + The innovations in teaching through Processing have been adapted for the Khan Academy computer science tutorials, offered online for free. The tutorials begin with drawing, using most of the Processing functions for drawing. The Processing approach has also been applied to electronics through the Arduino and Wiring projects. Arduino uses a syntax inspired by that used with Processing, and continues to use a modified version of the Processing programming environment to make it easier for students to learn how to program robots and countless other electronics projects.

      Culture

      @@ -45,21 +46,23 @@

      Research

      Foundation

      -The primary charge of the Foundation is to develop and distribute the Processing software. This includes the original Processing (Java), p5.js (Javascript), and Processing.py (Python). There is more information about the Foundation at http://foundation.processing.org/. +The primary charge of the Foundation is to develop and distribute the Processing software. This includes the original Processing (Java), p5.js (Javascript), and Processing.py (Python). There is more information about the Foundation at https://processingfoundation.org/.

      History

      - Processing was started by Ben Fry and Casey Reas in the spring of 2001, while both were graduate students at the MIT Media Lab within John Maeda's Aesthetics and Computation research group. Development continued in their free time while Casey pursued his artistic and teaching career and Ben pursued a Ph.D. and founded Fathom Information Design. Many of the ideas in Processing go back to Muriel Cooper's Visual Language Workshop, and it grew directly out of Maeda's Design By Numbers project, developed at the Media Lab and released in 1999. The Wiring and Arduino projects, in turn, grew out of Processing while Casey was teaching at the Interaction Design Institute Ivrea in Italy. Processing also prompted John Resig (jQuery) to build Processing.js, a JavaScript version that then inspired more related work such as the Khan Academy curriculum in computer science. Versions of Processing that use Python, Ruby, ActionScript, and Scala are also in development. Processing and its sister projects have inspired over twenty educational books. + Processing was started by Ben Fry and Casey Reas in the spring of 2001, while both were graduate students at the MIT Media Lab within John Maeda's Aesthetics and Computation research group. Development continued in their free time while Casey pursued his art and teaching career and Ben pursued a Ph.D. and founded Fathom Information Design. Many of the ideas in Processing go back to Muriel Cooper's Visual Language Workshop, and it grew directly out of Maeda's Design By Numbers project, developed at the Media Lab and released in 1999. The Wiring and Arduino projects, in turn, grew out of Processing while Casey was teaching at the Interaction Design Institute Ivrea in Italy.

      +

      For more information, please write to foundation@processing.org diff --git a/templates/template.cover.html b/templates/template.cover.html index 4fb734230..56d113e50 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -26,14 +26,6 @@

    -

    Books
    @@ -41,24 +33,7 @@ The 2nd edition of Getting Started with Processing is here and it's updated for Processing 3. It's now in full color and there's a new chapter on working with data. The 2nd edition of the Processing Handbook is here too. Every chapter has been revised, and new chapters introduce more ways to work with data and geometry. New “synthesis” chapters offer discussion and worked examples of such topics as sketching with code, modularity, and algorithms.

    Processing Books -

    - - - - - +

    @@ -76,38 +51,11 @@
    » Github
    - - - -

    Donate

    Please join us as a member of the Processing Foundation. We need your help!
    -
    -

    Exhibition

    - exhibition -
    - - -

    To see more of what people are doing with Processing, check out these sites:

    » CreativeApplications.Net
    @@ -115,7 +63,6 @@

    T-shirts!

    » For Your Processing
    » Processing Subreddit
    » Vimeo
    - » Studio Sketchpad

    @@ -136,17 +83,6 @@
    Partners
    » UCLA Design Media Arts

    - -

    Contact
    foundation@processing.org diff --git a/templates/template.nav.php b/templates/template.nav.php index 878ce4580..31e66eba1 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -70,13 +70,13 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . l('Tutorials', $section == 'Tutorials') . "
    \n"; $html .= "\t\t\t\t\t" . l('Examples', $section == 'Examples') . "
    \n"; $html .= "\t\t\t\t\t" . l('Books', $section == 'Books') . "
    \n"; - $html .= "\t\t\t\t\t" . l('Handbook', $section == 'Handbook') . "

    \n"; + #$html .= "\t\t\t\t\t" . l('Handbook', $section == 'Handbook') . "

    \n"; $html .= "\t\t\t\t\t" . l('Overview', $section == 'Overview') . "
    \n"; $html .= "\t\t\t\t\t" . l('People', $section == 'People') . "

    \n"; # $html .= "\t\t\t\t\t" . l('Foundation', $section == 'Foundation') . "

    \n"; - $html .= "\t\t\t\t\t" . l('Shop', $section == 'Shop') . "

    \n"; + #$html .= "\t\t\t\t\t" . l('Shop', $section == 'Shop') . "

    \n"; $html .= "\t\t\t\t\t" . "»Forum
    \n"; $html .= "\t\t\t\t\t" . "»GitHub
    \n"; From 6584190aa3c412fc5c506e073c2635c036dd7d4d Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 21 Dec 2018 22:31:28 -0800 Subject: [PATCH 049/299] Updates to navigation, remove shop and handbook --- java_generate/templates/nav.web.template.html | 6 +++--- templates/template.nav.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index a557955b9..a754b73e7 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -14,15 +14,15 @@ Tutorials
    Examples
    Books
    - Handbook

    + Overview
    People

    - Shop

    + - »Forum
    + »Forum
    »GitHub
    »Issues
    »Wiki
    diff --git a/templates/template.nav.php b/templates/template.nav.php index 31e66eba1..4f5574369 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -69,7 +69,7 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . l('Tutorials', $section == 'Tutorials') . "
    \n"; $html .= "\t\t\t\t\t" . l('Examples', $section == 'Examples') . "
    \n"; - $html .= "\t\t\t\t\t" . l('Books', $section == 'Books') . "
    \n"; + $html .= "\t\t\t\t\t" . l('Books', $section == 'Books') . "

    \n"; #$html .= "\t\t\t\t\t" . l('Handbook', $section == 'Handbook') . "

    \n"; $html .= "\t\t\t\t\t" . l('Overview', $section == 'Overview') . "
    \n"; @@ -78,7 +78,7 @@ function navigation($section = '') #$html .= "\t\t\t\t\t" . l('Shop', $section == 'Shop') . "

    \n"; - $html .= "\t\t\t\t\t" . "»Forum
    \n"; + $html .= "\t\t\t\t\t" . "»Forum
    \n"; $html .= "\t\t\t\t\t" . "»GitHub
    \n"; $html .= "\t\t\t\t\t" . "»Issues
    \n"; $html .= "\t\t\t\t\t" . "»Wiki
    \n"; From c07ae2e74e0ff214f59b091b2deaabb24aacb686 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 21 Dec 2018 22:37:29 -0800 Subject: [PATCH 050/299] Simple 'people' page update --- content/static/people.html | 44 +++++++++++--------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/content/static/people.html b/content/static/people.html index 9079900ab..e1453cceb 100755 --- a/content/static/people.html +++ b/content/static/people.html @@ -14,6 +14,7 @@

    People. Processing is a comm

    Senior Developers
    Andres Colubri (Boston), OpenGL / Video
    + Gottfried Haider (Los Angeles), Processing for Pi
    Florian Jenett (Frankfurt), Forum
    Elie Zananiri (Montreal), Contributed Libraries / Tools
    Scott Murray (San Francisco), Website / Reference / UI
    @@ -23,29 +24,15 @@

    People. Processing is a comm Developers
    Jakub Valtar (Brno), Processing Core
    Scott Garner (New York), Hello Processing Website
    - Gottfried Haider (Amsterdam), Serial Library Updates (64-bit)
    - Jamie Kosoy (San Francisco), Website
    - Manindra Moharana (San Diego), PDE / Core
    - James Grady (Boston), Visual Design

    -

    - Google Summer of Code 2015
    - Gottfried Haider, Raspberry Pi and armv7hf support
    - Joel Ruben Antony Moniz, Replacing JEditTextArea with RSyntaxTextArea and designing a new REPL Mode
    - Maya Man, Creativity in Code: Accounting for Diversity throughout Development
    - Nick Confrey, Making networking easier for Processing users
    - Thomas Sanchez Lengeling, Expanding Kinect v2 libraries in Processing
    - Umair Khan, Enhancements in Processing’s Android Mode
    -

    - -

    +

    Libraries, Tools
    @@ -60,24 +47,17 @@

    People. Processing is a comm into programming sound through his minim library.

    - - - -

    - Fellowship Alumni
    - Lauren McCarthy (New York), Spring/Summer/Fall 2013
    - Greg Borenstein (New York), Spring/Summer 2013
    - Wilm Thoben (Los Angeles), Fall 2013/Winter 2014
    -

    Developer Alumni
    + Jamie Kosoy (San Francisco), Website
    + Manindra Moharana (San Diego), PDE / Core
    + James Grady (Boston), Visual Design
    + Joel Ruben Antony Moniz, Replacing JEditTextArea with RSyntaxTextArea and designing a new REPL Mode (Google Summer of Code 2014)
    + Maya Man, Creativity in Code: Accounting for Diversity throughout Development (Google Summer of Code 2014)
    + Nick Confrey, Making networking easier for Processing users (Google Summer of Code 2014)
    + Thomas Sanchez Lengeling, Expanding Kinect v2 libraries in Processing (Google Summer of Code 2014)
    + Umair Khan, Enhancements in Processing’s Android Mode (Google Summer of Code 2014)
    Roland Elek, GStreamer 1.x Java Bindings (Google Summer of Code 2014)
    Chris Johnson-Roberson, Loom: An Audiovisual Pattern Language (Google Summer of Code 2014)
    Manindra Moharana, PDE X (Google Summer of Code 2014)
    @@ -96,7 +76,7 @@

    People. Processing is a comm Andreas Schlegel, Libraries (Winter 2008 - Summer 2011)
    Harshani Nawarathna, Processing Development Environment (Summer 2011)
    Cindy Chi, Reference Editing (Summer 2011)
    - Jonathan Feinberg, Parsing & Android Hacking (Spring 2011)
    + Jonathan Feinberg, Parsing & Android Hacking (Spring 2011)
    Chris Lonnen, Processing Development Environment (Summer 2011)
    Eric Jordan, Graphics Weapon (2007 - 2009)
    Tom Carden, Processing Hacks Director (Summer 2005 - Fall 2008)
    From 4a5f20ac85a8f58cba36a9843af2ffcacaae10b6 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 21 Dec 2018 22:41:05 -0800 Subject: [PATCH 051/299] Simple 'people' page update --- content/static/people.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/static/people.html b/content/static/people.html index e1453cceb..fb88b37c2 100755 --- a/content/static/people.html +++ b/content/static/people.html @@ -53,10 +53,10 @@

    People. Processing is a comm Jamie Kosoy (San Francisco), Website
    Manindra Moharana (San Diego), PDE / Core
    James Grady (Boston), Visual Design
    - Joel Ruben Antony Moniz, Replacing JEditTextArea with RSyntaxTextArea and designing a new REPL Mode (Google Summer of Code 2014)
    - Maya Man, Creativity in Code: Accounting for Diversity throughout Development (Google Summer of Code 2014)
    - Nick Confrey, Making networking easier for Processing users (Google Summer of Code 2014)
    - Thomas Sanchez Lengeling, Expanding Kinect v2 libraries in Processing (Google Summer of Code 2014)
    + Patrick Hebron, Video Library (Summer 2011)
    Peter Kalauskas, Library/Tool/Mode Install Utility (Summer, Fall 2011)
    Andreas Schlegel, Libraries (Winter 2008 - Summer 2011)
    From 1daec9065bd487db9711ebb03a84cc51232212f9 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 17 Jan 2019 19:14:24 -0800 Subject: [PATCH 052/299] fix typo in the message at top, remove some items that are not documented/supported --- generate/keywords_base.txt | 81 +++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/generate/keywords_base.txt b/generate/keywords_base.txt index a89afdf87..a88aa2737 100755 --- a/generate/keywords_base.txt +++ b/generate/keywords_base.txt @@ -1,17 +1,18 @@ -# THE TEXT BELOW IS HAND WRITTEN AND FOUND IN THE FILE "keywords_base.txt" -# IN THE PROCESSING-DOCS REPO. DON'T EDITS THE keywords.txt FILE DIRECTLY. +# THIS TEXT IS FROM keywords_base.txt IN THE PROCESSING-DOCS REPO: +# https://github.com/processing/processing-docs/blob/master/generate/keywords_base.txt +# MAKE CHANGES THERE: DO NOT EDIT THE keywords.txt FILE DIRECTLY. -# For an explanation of these tags, see Token.java +# For an explanation of these tags, see Token.java # trunk/processing/app/src/processing/app/syntax/Token.java ADD LITERAL2 blend_ -ALIGN_CENTER LITERAL2 -ALIGN_LEFT LITERAL2 -ALIGN_RIGHT LITERAL2 +ALIGN_CENTER LITERAL2 +ALIGN_LEFT LITERAL2 +ALIGN_RIGHT LITERAL2 ALPHA LITERAL2 ALPHA_MASK LITERAL2 ALT LITERAL2 -AMBIENT LITERAL2 +AMBIENT LITERAL2 ARC LITERAL2 createShape_ ARROW LITERAL2 cursor_ ARGB LITERAL2 @@ -24,7 +25,7 @@ BLUR LITERAL2 filter_ BOTTOM LITERAL2 textAlign_ BOX LITERAL2 createShape_ BURN LITERAL2 blend_ -CENTER LITERAL2 +CENTER LITERAL2 CHATTER LITERAL2 CHORD LITERAL2 arc_ CLAMP LITERAL2 @@ -88,7 +89,7 @@ GIF LITERAL2 GRAY LITERAL2 filter_ GREEN_MASK LITERAL2 GROUP LITERAL2 -HALF LITERAL2 +HALF LITERAL2 HALF_PI LITERAL2 HALF_PI HAND LITERAL2 cursor_ HARD_LIGHT LITERAL2 blend_ @@ -97,7 +98,7 @@ HSB LITERAL2 colorMode_ IMAGE LITERAL2 textureMode_ INVERT LITERAL2 filter_ JAVA2D LITERAL2 size_ -JPEG LITERAL2 +JPEG LITERAL2 LEFT LITERAL2 keyCode LIGHTEST LITERAL2 blend_ LINE LITERAL2 createShape_ @@ -105,18 +106,18 @@ LINES LITERAL2 beginShape_ LINUX LITERAL2 MACOSX LITERAL2 MAX_FLOAT LITERAL2 -MAX_INT LITERAL2 +MAX_INT LITERAL2 MIN_FLOAT LITERAL2 MIN_INT LITERAL2 MITER LITERAL2 stokeJoin_ MODEL LITERAL2 textMode_ MOVE LITERAL2 cursor_ MULTIPLY LITERAL2 blend_ -NORMAL LITERAL2 +NORMAL LITERAL2 NORMALIZED LITERAL2 textureMode_ NO_DEPTH_TEST LITERAL2 NTSC LITERAL2 -ONE LITERAL2 +ONE LITERAL2 OPAQUE LITERAL2 filter_ OPEN LITERAL2 ORTHOGRAPHIC LITERAL2 @@ -127,13 +128,13 @@ P2D LITERAL2 size_ P3D LITERAL2 size_ PERSPECTIVE LITERAL2 PI LITERAL2 PI -PIE LITERAL2 +PIE LITERAL2 PIXEL_CENTER LITERAL2 POINT LITERAL2 -POINTS LITERAL2 +POINTS LITERAL2 POSTERIZE LITERAL2 filter_ PRESS LITERAL2 -PROBLEM LITERAL2 +PROBLEM LITERAL2 PROJECT LITERAL2 strokeCap_ QUAD LITERAL2 createShape_ QUAD_STRIP LITERAL2 beginShape_ @@ -146,23 +147,23 @@ RECT LITERAL2 RED_MASK LITERAL2 RELEASE LITERAL2 REPEAT LITERAL2 -REPLACE LITERAL2 +REPLACE LITERAL2 RETURN LITERAL2 RGB LITERAL2 colorMode_ RIGHT LITERAL2 keyCode ROUND LITERAL2 strokeCap_ SCREEN LITERAL2 blend_ -SECAM LITERAL2 +SECAM LITERAL2 SHAPE LITERAL2 textMode_ SHIFT LITERAL2 -SPAN LITERAL2 fullScreen_ +SPAN LITERAL2 fullScreen_ SPECULAR LITERAL2 SPHERE LITERAL2 createShape_ SOFT_LIGHT LITERAL2 blend_ SQUARE LITERAL2 strokeCap_ SUBTRACT LITERAL2 blend_ SVG LITERAL2 -SVIDEO LITERAL2 +SVIDEO LITERAL2 TAB LITERAL2 keyCode TARGA LITERAL2 TAU LITERAL2 TAU @@ -181,17 +182,17 @@ TWO LITERAL2 TWO_PI LITERAL2 TWO_PI UP LITERAL2 keyCode WAIT LITERAL2 cursor_ -WHITESPACE LITERAL2 +WHITESPACE LITERAL2 # Java keywords (void, import, , etc.) - + abstract KEYWORD1 break KEYWORD1 break class KEYWORD1 class continue KEYWORD1 continue -default KEYWORD1 default -enum KEYWORD1 +default KEYWORD1 default +enum KEYWORD1 extends KEYWORD1 extends false KEYWORD1 false final KEYWORD1 final @@ -199,17 +200,17 @@ finally KEYWORD1 implements KEYWORD1 implements import KEYWORD1 import instanceof KEYWORD1 -interface KEYWORD1 +interface KEYWORD1 native KEYWORD1 new KEYWORD1 new null KEYWORD1 null -package KEYWORD1 +package KEYWORD1 private KEYWORD1 private -protected KEYWORD1 +protected KEYWORD1 public KEYWORD1 public static KEYWORD1 static -strictfp KEYWORD1 -throws KEYWORD1 +strictfp KEYWORD1 +throws KEYWORD1 transient KEYWORD1 true KEYWORD1 true void KEYWORD1 void @@ -220,7 +221,7 @@ volatile KEYWORD1 assert KEYWORD6 case KEYWORD6 case -return KEYWORD6 return +return KEYWORD6 return super KEYWORD6 super this KEYWORD6 this throw KEYWORD6 @@ -230,18 +231,17 @@ throw KEYWORD6 Array KEYWORD5 Array ArrayList KEYWORD5 ArrayList -Boolean KEYWORD5 -Byte KEYWORD5 +Boolean KEYWORD5 +Byte KEYWORD5 BufferedReader KEYWORD5 BufferedReader -Character KEYWORD5 +Character KEYWORD5 Class KEYWORD5 class -Double KEYWORD5 -Float KEYWORD5 -Integer KEYWORD5 +Float KEYWORD5 +Integer KEYWORD5 HashMap KEYWORD5 HashMap PrintWriter KEYWORD5 PrintWriter String KEYWORD5 String -StringBuffer KEYWORD5 +StringBuffer KEYWORD5 StringBuilder KEYWORD5 Thread KEYWORD5 boolean KEYWORD5 boolean @@ -252,7 +252,6 @@ double KEYWORD5 double float KEYWORD5 float int KEYWORD5 int long KEYWORD5 long -short KEYWORD5 # Flow structures @@ -386,7 +385,7 @@ pixelHeight KEYWORD4 pixelHeight # # THE TEXT BELOW IS AUTO-GENERATED # -# SO -# DON'T -# TOUCH +# SO +# DON'T +# TOUCH # IT From 3a87dbe0f9eab9438b128f9e971538163104a13b Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sun, 20 Jan 2019 16:44:54 -0500 Subject: [PATCH 053/299] add Processing 3.5 (no ARM yet) --- content/static/download.html | 219 +++++++++++++++++++---------------- download/latest.txt | 2 +- 2 files changed, 117 insertions(+), 104 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index 3057816c4..70fe05c16 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -9,16 +9,19 @@

    Download Processing. Process
    - 3.4 - (26 July 2018) + 3.5 + (20 January 2019)
    @@ -39,150 +42,160 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.5 + (20 January 2019) + Win 32 + Win 64 + Linux 32 + Linux 64 + + Mac OS X +
  • 3.4 (26 July 2018) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 Linux ARMv6hf Mac OS X -
  • + + @@ -190,19 +203,19 @@

    Stable Releases

    2.2.1 (19 May 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 1.5.1 (15 May 2011) Win (standard) - Win (no Java) - Linux x86 - Mac OS X + Win (no Java) + Linux x86 + Mac OS X
  • Earlier releases have been removed because we can only support the current versions of the software. To update old code, read the changes page. Changes for each release can be found in revisions.txt. If you have problems with the current release, please file a bug so that we can fix it. Older releases can also be built from the source. Read More about the releases and their numbering. To use Android Mode, Processing 3 or later is required.

    @@ -218,106 +231,106 @@

    Pre-Releases

    3.0a11 (16 July 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a10 (9 June 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a9 (19 May 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a8 (17 May 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a7 (26 April 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a6 (25 April 2015) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a5 (16 November 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a4 (12 September 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a3 (26 August 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a2 (31 July 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 3.0a1 (26 July 2014) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • --> @@ -326,19 +339,19 @@

    Pre-Releases

    2.1b1 (20 October 2013) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • 2.1b1 (20 October 2013) Win 32 - Win 64 - Linux 32 + Win 64 + Linux 32 Linux 64 - Mac OS X + Mac OS X
  • --> diff --git a/download/latest.txt b/download/latest.txt index 0137c2d4c..74c4dd010 100644 --- a/download/latest.txt +++ b/download/latest.txt @@ -1,2 +1,2 @@ -0264 +0266 From 944199023d3f5626496e9fcc113f74c0cb70f363 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Mon, 21 Jan 2019 09:43:31 -0500 Subject: [PATCH 054/299] adding 3.5.1 --- content/static/download.html | 30 +++++++++++++++++++++--------- download/latest.txt | 2 +- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index 70fe05c16..b7188c109 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -9,19 +9,19 @@

    Download Processing. Process
    - 3.5 - (20 January 2019) + 3.5.1 + (21 January 2019)
    @@ -42,6 +42,17 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.5.1 + (21 January 2019) + Win 32 + Win 64 + Linux 32 + Linux 64 + + Mac OS X +
  • + + Linux ARMv6hf Mac OS X + -->
  • 3.4 (26 July 2018) diff --git a/download/latest.txt b/download/latest.txt index 74c4dd010..92c7b1ddd 100644 --- a/download/latest.txt +++ b/download/latest.txt @@ -1,2 +1,2 @@ -0266 +0267 From 20181935f12d43b6dfd29e5ef8c192bffc995adb Mon Sep 17 00:00:00 2001 From: gohai Date: Mon, 21 Jan 2019 16:15:10 -0800 Subject: [PATCH 055/299] Enable download link for 3.5.1 on ARM --- content/static/download.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index b7188c109..db929c128 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -16,10 +16,8 @@

    Download Processing. Process Windows 32-bit

  • Linux 64-bit
    Linux 32-bit
    -
  • Mac OS X
  • @@ -49,7 +47,7 @@

    Stable Releases

    Win 64 Linux 32 Linux 64 - + Linux ARMv6hf Mac OS X
    - 3.5.1 - (21 January 2019) + 3.5.2 + (22 January 2019)
    @@ -40,6 +40,17 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.5.2 + (22 January 2019) + Win 32 + Win 64 + Linux 32 + Linux 64 + Linux ARMv6hf + Mac OS X +
  • +
    - 3.5.2 - (22 January 2019) + 3.5.3 + (3 February 2019)
    @@ -40,6 +40,17 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.5.3 + (3 February 2019) + Win 32 + Win 64 + Linux 32 + Linux 64 + Linux ARMv6hf + Mac OS X +
  • + Electronics From 6975572a941e1814d437fd4b16043992d193e830 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 12:23:30 -0700 Subject: [PATCH 083/299] Small reference updates --- content/api_en/curvePoint.xml | 2 +- content/api_en/keyCode.xml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/content/api_en/curvePoint.xml b/content/api_en/curvePoint.xml index 8c9a6e011..c38a07c22 100755 --- a/content/api_en/curvePoint.xml +++ b/content/api_en/curvePoint.xml @@ -30,7 +30,7 @@ for (int i = 0; i <= steps; i++) { t for points a, b, c, d. The parameter t may range from 0 (the start of the curve) and 1 (the end of the curve). a and d are points on the curve, and b and c are the control points. This can be used once with the x coordinates and a second time with the y coordinates to get the location of a curve at t. +Evaluates the curve at point t for points a, b, c, d. The parameter t may range from 0 (the start of the curve) and 1 (the end of the curve). a and d are the control points, and b and c are points on the curve. As seen in the example above, this can be used once with the x coordinates and a second time with the y coordinates to get the location of a curve at t. ]]> diff --git a/content/api_en/keyCode.xml b/content/api_en/keyCode.xml index b11ea3ca0..f927a373c 100755 --- a/content/api_en/keyCode.xml +++ b/content/api_en/keyCode.xml @@ -42,6 +42,8 @@ The keys included in the ASCII specification (BACKSPACE, TAB, ENTER, RETURN, ESC For those familiar with Java, the values for UP and DOWN are simply shorter versions of Java's KeyEvent.VK_UP and KeyEvent.VK_DOWN. Other keyCode values can be found in the Java KeyEvent reference.

    There are issues with how keyCode behaves across different renderers and operating systems. Watch out for unexpected behavior as you switch renderers and operating systems and you are using keys are aren't mentioned in this reference entry. +

    +If you are using P2D or P3D as your renderer, use the NEWT KeyEvent constants. ]]> From c858fd72a94cbf99b214d12b55086f5d3e47d45f Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 15:31:24 -0700 Subject: [PATCH 084/299] Little updates for mouseWheel(), textAscent() and textDescent() --- content/api_en/mouseWheel.xml | 2 +- content/api_en/textAscent.xml | 2 +- content/api_en/textDescent.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/api_en/mouseWheel.xml b/content/api_en/mouseWheel.xml index 02c01cd7a..0a2344176 100755 --- a/content/api_en/mouseWheel.xml +++ b/content/api_en/mouseWheel.xml @@ -26,7 +26,7 @@ void mouseWheel(MouseEvent event) { mouseWheel() function returns positive values when the mouse wheel is rotated down (toward the user), and negative values for the other direction (up or away from the user). On OS X with "natural" scrolling enabled, the values are opposite. +The code within the mouseWheel() event function is run when the mouse wheel is moved. (Some mice don't have wheels and this function is only applicable with mice that have a wheel.) The getCount() function used within mouseWheel() returns positive values when the mouse wheel is rotated down (toward the user), and negative values for the other direction (up or away from the user). On OS X with "natural" scrolling enabled, the values are opposite.

    Mouse and keyboard events only work when a program has draw(). Without draw(), the code is only run once and then stops listening for events. ]]>
    diff --git a/content/api_en/textAscent.xml b/content/api_en/textAscent.xml index e028c6a16..47de3d52f 100755 --- a/content/api_en/textAscent.xml +++ b/content/api_en/textAscent.xml @@ -27,7 +27,7 @@ text("dp", 40, base); // Draw text on baseline textAscent() and textDescent() values will give you the total height of the line. +Returns ascent of the current font at its current size. This information is useful for determining the height of the font above the baseline. ]]> diff --git a/content/api_en/textDescent.xml b/content/api_en/textDescent.xml index f550f9d9d..92f81b1a5 100755 --- a/content/api_en/textDescent.xml +++ b/content/api_en/textDescent.xml @@ -27,7 +27,7 @@ text("dp", 40, base); // Draw text on baseline textAscent() and textDescent() values will give you the total height of the line. +Returns descent of the current font at its current size. This information is useful for determining the height of the font below the baseline. ]]> From 3f0af7118e5fd220be5c940791d7b1b8e52404a4 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 15:46:41 -0700 Subject: [PATCH 085/299] Clarification of 'clockwise' order for arc() values --- content/api_en/arc.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/api_en/arc.xml b/content/api_en/arc.xml index 742e7391f..071891848 100755 --- a/content/api_en/arc.xml +++ b/content/api_en/arc.xml @@ -37,10 +37,10 @@ arc(50, 50, 80, 80, 0, PI+QUARTER_PI, PIE); a, b, c, and d parameters. The origin of the arc's ellipse may be changed with the ellipseMode() function. Use the start and stop parameters to specify the angles (in radians) at which to draw the arc.
    -
    -There are three ways to draw an arc; the rendering technique used is defined by the optional seventh parameter. The three options, depicted in the above examples, are PIE, OPEN, and CHORD. The default mode is the OPEN stroke with a PIE fill.
    -
    +Draws an arc to the screen. Arcs are drawn along the outer edge of an ellipse defined by the a, b, c, and d parameters. The origin of the arc's ellipse may be changed with the ellipseMode() function. Use the start and stop parameters to specify the angles (in radians) at which to draw the arc. The start/stop values must be in clockwise order. +

    +There are three ways to draw an arc; the rendering technique used is defined by the optional seventh parameter. The three options, depicted in the above examples, are PIE, OPEN, and CHORD. The default mode is the OPEN stroke with a PIE fill. +

    In some cases, the arc() function isn't accurate enough for smooth drawing. For example, the shape may jitter on screen when rotating slowly. If you're having an issue with how arcs are rendered, you'll need to draw the arc yourself with beginShape()/endShape() or a PShape. ]]>
    From f696590614c2baa2647cd91fad891af899027e15 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 15:55:33 -0700 Subject: [PATCH 086/299] New example for .clear() --- content/api_en/clear.xml | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/content/api_en/clear.xml b/content/api_en/clear.xml index d71f240d8..4db47b198 100644 --- a/content/api_en/clear.xml +++ b/content/api_en/clear.xml @@ -15,23 +15,25 @@ PGraphics pg; void setup() { size(200, 200); - pg = createGraphics(100, 100); + pg = createGraphics(width, height); } void draw() { background(204); - pg.beginDraw(); - pg.stroke(0, 102, 153); - pg.line(0, 0, mouseX, mouseY); - pg.endDraw(); - image(pg, 50, 50); -} - -// Click to clear the PGraphics object -void mousePressed() { - pg.beginDraw(); - pg.clear(); - pg.endDraw(); + + // Clear the PGraphics when the mouse is pressed + if (mousePressed == true) { + pg.beginDraw(); + pg.clear(); + pg.endDraw(); + } else { + pg.beginDraw(); + pg.stroke(0, 102, 153); + pg.line(width/2, height/2, mouseX, mouseY); + pg.endDraw(); + } + + image(pg, 0, 0); } ]]> From 84f19493f4c455ff54257d7a49c4191ee2b107b1 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 16:09:55 -0700 Subject: [PATCH 087/299] Update to MouseSignals example --- .../Input/MouseSignals/MouseSignals.pde | 24 +++++++++++-------- .../Basics/Input/MouseSignals/MouseSignals.js | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/content/examples/Basics/Input/MouseSignals/MouseSignals.pde b/content/examples/Basics/Input/MouseSignals/MouseSignals.pde index b5110bf26..32824354d 100644 --- a/content/examples/Basics/Input/MouseSignals/MouseSignals.pde +++ b/content/examples/Basics/Input/MouseSignals/MouseSignals.pde @@ -11,8 +11,7 @@ int[] xvals; int[] yvals; int[] bvals; -void setup() -{ +void setup() { size(640, 360); noSmooth(); xvals = new int[width]; @@ -22,11 +21,10 @@ void setup() int arrayindex = 0; -void draw() -{ +void draw() { background(102); - for(int i = 1; i < width; i++) { + for (int i = 1; i < width; i++) { xvals[i-1] = xvals[i]; yvals[i-1] = yvals[i]; bvals[i-1] = bvals[i]; @@ -34,22 +32,28 @@ void draw() // Add the new values to the end of the array xvals[width-1] = mouseX; yvals[width-1] = mouseY; - if(mousePressed) { + + if (mousePressed == true) { bvals[width-1] = 0; } else { - bvals[width-1] = 255; + bvals[width-1] = height/3; } fill(255); noStroke(); rect(0, height/3, width, height/3+1); - for(int i=1; i Date: Thu, 25 Jul 2019 16:36:52 -0700 Subject: [PATCH 088/299] Update to begin/endContour() for PShape sxample --- content/api_en/PShape_beginContour.xml | 8 ++++---- content/api_en/PShape_endContour.xml | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/content/api_en/PShape_beginContour.xml b/content/api_en/PShape_beginContour.xml index fefc7d7d1..510cf16f1 100644 --- a/content/api_en/PShape_beginContour.xml +++ b/content/api_en/PShape_beginContour.xml @@ -14,12 +14,12 @@ PShape s; void setup() { - size(100, 100); + size(200, 200, P2D); // Make a shape s = createShape(); s.beginShape(); - s.noStroke(); + //s.noStroke(); // Exterior part of shape s.vertex(-50,-50); @@ -36,11 +36,11 @@ void setup() { s.endContour(); // Finish off shape - s.endShape(); + s.endShape(CLOSE); } void draw() { - background(52); + background(204); translate(width/2, height/2); s.rotate(0.01); shape(s); diff --git a/content/api_en/PShape_endContour.xml b/content/api_en/PShape_endContour.xml index b88cd4c3f..43119b0ea 100644 --- a/content/api_en/PShape_endContour.xml +++ b/content/api_en/PShape_endContour.xml @@ -14,12 +14,12 @@ PShape s; void setup() { - size(100, 100); + size(200, 200, P2D); // Make a shape s = createShape(); s.beginShape(); - s.noStroke(); + //s.noStroke(); // Exterior part of shape s.vertex(-50,-50); @@ -36,11 +36,11 @@ void setup() { s.endContour(); // Finish off shape - s.endShape(); + s.endShape(CLOSE); } void draw() { - background(52); + background(204); translate(width/2, height/2); s.rotate(0.01); shape(s); From 19122dac7d4467cfc31e0fdfc34b8650d3a726ff Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 19:06:06 -0700 Subject: [PATCH 089/299] Clarification for String reference --- content/api_en/include/String.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/content/api_en/include/String.xml b/content/api_en/include/String.xml index 130d63116..37de6b086 100755 --- a/content/api_en/include/String.xml +++ b/content/api_en/include/String.xml @@ -24,12 +24,9 @@ println(str2); // Prints "CCCP" to the console From 375bbd9dba17a1a68617c5d05e9f9df9df09193d Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 19:49:44 -0700 Subject: [PATCH 090/299] Clarification for .substring() --- content/api_en/include/String_substring.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/api_en/include/String_substring.xml b/content/api_en/include/String_substring.xml index 0514f23ae..40813a34c 100755 --- a/content/api_en/include/String_substring.xml +++ b/content/api_en/include/String_substring.xml @@ -16,8 +16,8 @@ String str1 = "CCCP"; String str2 = "Rabbit"; String ss1 = str1.substring(2); // Returns "CP" String ss2 = str2.substring(3); // Returns "bit" -String ss3 = str1.substring(0, 2); // Returns "CC" -println(ss1 + ":" + ss2 + ":" + ss3); // Prints "CP:bit:CC" +String ss3 = str2.substring(0, 2); // Returns "Ra" +println(ss1 + ":" + ss2 + ":" + ss3); // Prints "CP:bit:Ra" ]]> From d3bcd471146dd5c23b897bb5f4b042ec139b560a Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:02:19 -0700 Subject: [PATCH 091/299] Basic reference updates, including Variable Scope example --- content/api_en/StringList_hasValue.xml | 4 ++-- content/examples_basics.xml | 2 +- content/static/tutorials/video/index.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/api_en/StringList_hasValue.xml b/content/api_en/StringList_hasValue.xml index 764dfa9d9..c864feb07 100755 --- a/content/api_en/StringList_hasValue.xml +++ b/content/api_en/StringList_hasValue.xml @@ -21,8 +21,8 @@ void setup() { inventory.append("flour"); inventory.append("tea"); println(inventory); - if (inventory.hasValue("tea") == true) { - println("Yes, we have a tea"); + if (inventory.hasValue("tea")) { + println("Yes, we have tea"); } else { println("Sorry, no tea"); } diff --git a/content/examples_basics.xml b/content/examples_basics.xml index 402334c7c..42345b718 100644 --- a/content/examples_basics.xml +++ b/content/examples_basics.xml @@ -27,7 +27,7 @@ Integers and Floats True/False Characters and Strings - Variable Scope + Variable Scope Datatype Conversion diff --git a/content/static/tutorials/video/index.html b/content/static/tutorials/video/index.html index fda2a4e29..22ccf759b 100644 --- a/content/static/tutorials/video/index.html +++ b/content/static/tutorials/video/index.html @@ -300,7 +300,7 @@

    Recorded video

    }

    -Although Processing is by no means the most sophisticated environment for displaying and manipulating recorded video, there are some more advanced features available in the video library. There are function sfor obtaining the duration (length measured in seconds) of a video, for speeding it up and slowing it down, and for jumping to a specific point in the video (among others). If you find that performance is sluggish and the video playback is choppy, I would suggest trying the P2D or P3D renderers. +Although Processing is by no means the most sophisticated environment for displaying and manipulating recorded video, there are some more advanced features available in the video library. There are functions for obtaining the duration (length measured in seconds) of a video, for speeding it up and slowing it down, and for jumping to a specific point in the video (among others). If you find that performance is sluggish and the video playback is choppy, I would suggest trying the P2D or P3D renderers.

    Following is an example that makes use of jump() (jump to a specific point in the video) and duration() (returns the length of movie in seconds). In this example, if mouseX equals 0, the video jumps to the beginning. If mouseX equals width, it jumps to the end. Any other value is in between. The jump() function allows you to jump immediately to a point of time within the video. duration() returns the total length of the movie in seconds.
    From 23af8444b23e3edd9e02a5823ad488fdb51fd109 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:11:30 -0700 Subject: [PATCH 092/299] Update for equality operator reference --- content/api_en/include/equality.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/equality.xml b/content/api_en/include/equality.xml index a8bbda074..f4fb7b9eb 100755 --- a/content/api_en/include/equality.xml +++ b/content/api_en/include/equality.xml @@ -20,7 +20,7 @@ if (a == b) { +Determines if two values are equivalent. Please note the equality operator (==) is different from the assignment operator (=) and although they look similar, they have a different use. If you're comparing two variables, the quality operator (==) only works with primitive data types like int, float, and char and not with composite data types like Array, Table, and PVector

    Note that when comparing String objects, you must use the equals() method instead of == to compare their contents. See the reference for String or the troubleshooting note for more explanation. ]]>
    From ed6ad7fbce06b8fb0d5f2b842dcad6e2935e0d06 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:13:13 -0700 Subject: [PATCH 093/299] Update for equality operator reference --- content/api_en/include/equality.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/equality.xml b/content/api_en/include/equality.xml index f4fb7b9eb..bbb16aa3a 100755 --- a/content/api_en/include/equality.xml +++ b/content/api_en/include/equality.xml @@ -14,7 +14,7 @@ int a = 23; int b = 23; if (a == b) { - println("variables a and b are equal"); + println("the values of variables 'a' and 'b' are the same"); } ]]> From 09fd4f7dc2b683a50e905e49ee3bd93d772a3911 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:41:31 -0700 Subject: [PATCH 094/299] Figure update for Drawing tutorial --- .../tutorials/drawing/imgs/drawing-05.svg | 352 +++++++++--------- 1 file changed, 186 insertions(+), 166 deletions(-) diff --git a/content/static/tutorials/drawing/imgs/drawing-05.svg b/content/static/tutorials/drawing/imgs/drawing-05.svg index 0f55e2269..aae65a23c 100644 --- a/content/static/tutorials/drawing/imgs/drawing-05.svg +++ b/content/static/tutorials/drawing/imgs/drawing-05.svg @@ -1,166 +1,186 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Example: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Example: + + + + + + + + + + + + + + + + + + + + + + From 9af76baa9bfc2bd1b8a842df27e16f3e6c211183 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:44:00 -0700 Subject: [PATCH 095/299] Figure update for Drawing tutorial, correction --- .../tutorials/drawing/imgs/drawing-05.svg | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/content/static/tutorials/drawing/imgs/drawing-05.svg b/content/static/tutorials/drawing/imgs/drawing-05.svg index aae65a23c..9a49a19e6 100644 --- a/content/static/tutorials/drawing/imgs/drawing-05.svg +++ b/content/static/tutorials/drawing/imgs/drawing-05.svg @@ -139,19 +139,19 @@ -Example: - -Example: + + - - - - + + + + - - - - + + + - + c4.5,0,6,2.8,6,6.4v11.2c1.2,0.1,2.4,0.3,3.3,0.5v2.2H727.3z"/> + From 5a18ef6476338b074cfe4786effa43f6dd9f4dc4 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 25 Jul 2019 20:45:26 -0700 Subject: [PATCH 096/299] Figure update for Drawing tutorial, correction 2 --- .../tutorials/drawing/imgs/drawing-05.svg | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/content/static/tutorials/drawing/imgs/drawing-05.svg b/content/static/tutorials/drawing/imgs/drawing-05.svg index 9a49a19e6..44653c110 100644 --- a/content/static/tutorials/drawing/imgs/drawing-05.svg +++ b/content/static/tutorials/drawing/imgs/drawing-05.svg @@ -8,8 +8,6 @@ .st2{fill:none;stroke:#000000;stroke-width:1.3;} .st3{fill:#FFFFFF;stroke:#000000;stroke-width:1.3;} .st4{fill:#808080;} - .st5{font-family:'TheSerif-HP5Plain';} - .st6{font-size:39.4px;} @@ -139,7 +137,33 @@ -Example: + + + + + + + + + + newSize parameter provides precise control over the increase in size. +Increases the size of a one-dimensional array. By default, this function doubles the size of the array, but the optional newSize parameter provides precise control over the increase in size.

    When using an array of objects, the data returned from the function must be cast to the object array's data type. For example: SomeClass[] items = (SomeClass[]) expand(originalArray) ]]>
    diff --git a/content/api_en/shorten.xml b/content/api_en/shorten.xml index 82961260a..41746c5ad 100755 --- a/content/api_en/shorten.xml +++ b/content/api_en/shorten.xml @@ -20,7 +20,7 @@ println(sa2); // 'sa2' now contains OH, NY
    When using an array of objects, the data returned from the function must be cast to the object array's data type. For example: SomeClass[] items = (SomeClass[]) shorten(originalArray) ]]>
    diff --git a/content/examples_topics.xml b/content/examples_topics.xml index b516a00ce..c46525d49 100755 --- a/content/examples_topics.xml +++ b/content/examples_topics.xml @@ -50,7 +50,7 @@ Edge Detection Convolution Histogram - Linear Image + Linear Image Zoom Explode From b31ca0169cb59d341f3046379587119edc8cf7ab Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 09:09:12 -0700 Subject: [PATCH 098/299] Spelling updates for blendMode() and blend() --- content/api_en/blend.xml | 6 +++--- content/api_en/blendMode.xml | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/api_en/blend.xml b/content/api_en/blend.xml index d10a95f76..59d8431c9 100755 --- a/content/api_en/blend.xml +++ b/content/api_en/blend.xml @@ -52,15 +52,15 @@ blend(img, 0, 0, 33, 100, 67, 0, 33, 100, LIGHTEST);
    -BLEND - linear interpolation of colours: C = A*factor + B
    +BLEND - linear interpolation of colors: C = A*factor + B

    ADD - additive blending with white clip: C = min(A*factor + B, 255)

    SUBTRACT - subtractive blending with black clip: C = max(B - A*factor, 0)

    -DARKEST - only the darkest colour succeeds: C = min(A*factor, B)
    +DARKEST - only the darkest color succeeds: C = min(A*factor, B)

    -LIGHTEST - only the lightest colour succeeds: C = max(A*factor, B)
    +LIGHTEST - only the lightest color succeeds: C = max(A*factor, B)

    DIFFERENCE - subtract colors from underlying image.

    diff --git a/content/api_en/blendMode.xml b/content/api_en/blendMode.xml index 26e3285a2..a3c309cb1 100755 --- a/content/api_en/blendMode.xml +++ b/content/api_en/blendMode.xml @@ -35,17 +35,17 @@ line(75, 25, 25, 75); +Blends the pixels in the display window according to a defined mode. There is a choice of the following modes to blend the source pixels (A) with the ones of pixels already in the display window (B). Each pixel's final color is the result of applying one of the blend modes with each channel of (A) and (B) independently. The red channel is compared with red, green with green, and blue with blue.

    -BLEND - linear interpolation of colours: C = A*factor + B. This is the default blending mode.
    +BLEND - linear interpolation of colors: C = A*factor + B. This is the default.

    ADD - additive blending with white clip: C = min(A*factor + B, 255)

    SUBTRACT - subtractive blending with black clip: C = max(B - A*factor, 0)

    -DARKEST - only the darkest colour succeeds: C = min(A*factor, B)
    +DARKEST - only the darkest color succeeds: C = min(A*factor, B)

    -LIGHTEST - only the lightest colour succeeds: C = max(A*factor, B)
    +LIGHTEST - only the lightest color succeeds: C = max(A*factor, B)

    DIFFERENCE - subtract colors from underlying image.

    From 52272278092eed2079388c3aa60bbc8f82abf1bd Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 09:12:51 -0700 Subject: [PATCH 099/299] Attribution error in Sound tutorial --- content/static/tutorials/sound/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/tutorials/sound/index.html b/content/static/tutorials/sound/index.html index 4c270ea5a..20b03bc75 100644 --- a/content/static/tutorials/sound/index.html +++ b/content/static/tutorials/sound/index.html @@ -203,7 +203,7 @@

    Tools for sound programming

    - Classic computer music “languages,” most of which are derived from Max Mathews’ MUSIC program, are still in wide use today. Some of these, such as CSound (developed by Barry Vercoe at MIT) have wide followings and are taught in computer music studios as standard tools for electroacoustic composition. The majority of these MUSIC-N programs use text files for input, though they are increasingly available with graphical editors for many tasks. Typically, two text files are used; the first contains a description of the sound to be generated using a specification language that defines one or more “instruments” made by combining simple unit generators. A second file contains the “score,” a list of instructions specifying which instrument in the first file plays what event, when, for how long, and with what variable parameters. Most of these programs go beyond simple task-based synthesis and audio processing to facilitate algorithmic composition, often by building on top of a standard programming language; F. Richard Moore’s CLM package, for example, is built on top of Common LISP. Some of these languages have been retrofitted in recent years to work in real time (as opposed to rendering a sound file to disk); Real-Time Cmix, for example, contains a C-style parser as well as support for connectivity from clients over network sockets and MIDI. + Classic computer music “languages,” most of which are derived from Max Mathews’ MUSIC program, are still in wide use today. Some of these, such as CSound (developed by Barry Vercoe at MIT) have wide followings and are taught in computer music studios as standard tools for electroacoustic composition. The majority of these MUSIC-N programs use text files for input, though they are increasingly available with graphical editors for many tasks. Typically, two text files are used; the first contains a description of the sound to be generated using a specification language that defines one or more “instruments” made by combining simple unit generators. A second file contains the “score,” a list of instructions specifying which instrument in the first file plays what event, when, for how long, and with what variable parameters. Most of these programs go beyond simple task-based synthesis and audio processing to facilitate algorithmic composition, often by building on top of a standard programming language; Bill Schottstaedt ’s CLM package, for example, is built on top of Common LISP. Some of these languages have been retrofitted in recent years to work in real time (as opposed to rendering a sound file to disk); Real-Time Cmix, for example, contains a C-style parser as well as support for connectivity from clients over network sockets and MIDI.

    From 7824d534a0979840d55dbc88acce4038bb1d1fa5 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 09:28:37 -0700 Subject: [PATCH 100/299] Changed comments for JSON examples to make it easier to cut and paste the data --- content/api_en/loadJSONArray.xml | 38 ++++++++++++++++--------------- content/api_en/loadJSONObject.xml | 14 +++++++----- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/content/api_en/loadJSONArray.xml b/content/api_en/loadJSONArray.xml index d7b7444ac..da22530e9 100755 --- a/content/api_en/loadJSONArray.xml +++ b/content/api_en/loadJSONArray.xml @@ -13,24 +13,26 @@ Date: Fri, 26 Jul 2019 09:56:26 -0700 Subject: [PATCH 101/299] New reference files for AudioSample amp() and loop() --- content/api_en/LIB_sound/AudioSample.xml | 4 +- content/api_en/LIB_sound/AudioSample_amp.xml | 42 +++++++++++++++++++ content/api_en/LIB_sound/AudioSample_loop.xml | 40 ++++++++++++++++++ 3 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 content/api_en/LIB_sound/AudioSample_amp.xml create mode 100644 content/api_en/LIB_sound/AudioSample_loop.xml diff --git a/content/api_en/LIB_sound/AudioSample.xml b/content/api_en/LIB_sound/AudioSample.xml index 463238650..053be266c 100755 --- a/content/api_en/LIB_sound/AudioSample.xml +++ b/content/api_en/LIB_sound/AudioSample.xml @@ -44,8 +44,6 @@ This class allows you low-level access to an audio buffer to create, access, man If you want to pre-load your audio sample with an audio file from disk you can do so using the SoundFile subclass. ]]> - -SoundFile - + diff --git a/content/api_en/LIB_sound/AudioSample_amp.xml b/content/api_en/LIB_sound/AudioSample_amp.xml new file mode 100644 index 000000000..7a1181b3e --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_amp.xml @@ -0,0 +1,42 @@ + + + +play() + +Sound Files + + + +Web & Application + + + + + + + + + diff --git a/content/api_en/LIB_sound/AudioSample_loop.xml b/content/api_en/LIB_sound/AudioSample_loop.xml new file mode 100644 index 000000000..d1584ae38 --- /dev/null +++ b/content/api_en/LIB_sound/AudioSample_loop.xml @@ -0,0 +1,40 @@ + + + +play() + +Sound Files + + + +Web & Application + + + + + + + + + From c55c345851a8eccfff35f7118e05a7b46c15fdb3 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 10:24:39 -0700 Subject: [PATCH 102/299] Clarification for how smooth() works with PGraphics --- content/api_en/LIB_sound/AudioSample_loop.xml | 4 +- content/api_en/createGraphics.xml | 4 +- content/api_en/smooth.xml | 37 ++++++++++++++++--- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/content/api_en/LIB_sound/AudioSample_loop.xml b/content/api_en/LIB_sound/AudioSample_loop.xml index d1584ae38..f95b7e484 100644 --- a/content/api_en/LIB_sound/AudioSample_loop.xml +++ b/content/api_en/LIB_sound/AudioSample_loop.xml @@ -1,7 +1,7 @@ -play() +loop() Sound Files @@ -25,7 +25,7 @@ void setup() { for (int i = 0; i < sample.frames(); i++) { sample.write(i, random(-100, 100)); } - sample.play(); + sample.loop(); } void draw() { diff --git a/content/api_en/createGraphics.xml b/content/api_en/createGraphics.xml index c817adad6..2eb84e5bc 100755 --- a/content/api_en/createGraphics.xml +++ b/content/api_en/createGraphics.xml @@ -34,9 +34,9 @@ Creates and returns a new PGraphics object. Use this class if you need to
    It's important to consider the renderer used with createGraphics() in relation to the main renderer specified in size(). For example, it's only possible to use P2D or P3D with createGraphics() when one of them is defined in size(). Unlike Processing 1.0, P2D and P3D use OpenGL for drawing, and when using an OpenGL renderer it's necessary for the main drawing surface to be OpenGL-based. If P2D or P3D are used as the renderer in size(), then any of the options can be used with createGraphics(). If the default renderer is used in size(), then only the default, PDF, or SVG can be used with createGraphics().

    -It's important to call any drawing functions between beginDraw() and endDraw() statements. This is also true for any functions that affect drawing, such as smooth() or colorMode().
    +It's important to run all drawing functions between the beginDraw() and endDraw(). As the exception to this rule, smooth() should be run on the PGraphics object before beginDraw(). See the reference for smooth() for more detail.

    -The createGraphics() function should almost never be used inside draw() because of the memory and time needed to set up the graphics. One-time or occasional use during draw() are acceptable, but code that calls createGraphics() at 60 frames per second will run out of memory or freeze your sketch.
    +The createGraphics() function should almost never be used inside draw() because of the memory and time needed to set up the graphics. One-time or occasional use during draw() might be acceptable, but code that calls createGraphics() at 60 frames per second might run out of memory or freeze your sketch.

    Unlike the main drawing surface which is completely opaque, surfaces created with createGraphics() can have transparency. This makes it possible to draw into a graphics and maintain the alpha channel. By using save() to write a PNG or TGA file, the transparency of the graphics object will be honored. ]]> diff --git a/content/api_en/smooth.xml b/content/api_en/smooth.xml index 0b5fd3b69..75a727274 100755 --- a/content/api_en/smooth.xml +++ b/content/api_en/smooth.xml @@ -43,14 +43,39 @@ void draw() { ]]>
    + + + + + smooth() only needs to be used when a program needs to set the smoothing in a different way. The level parameter increases the level of smoothness. This is the level of over sampling applied to the graphics buffer.
    -
    -With the P2D and P3D renderers, smooth(2) is the default, this is called "2x anti-aliasing." The code smooth(4) is used for 4x anti-aliasing and smooth(8) is specified for 8x anti-aliasing. The maximum anti-aliasing level is determined by the hardware of the machine that is running the software, so smooth(4) and smooth(8) will not work with every computer.
    -
    -The default renderer uses smooth(3) by default. This is bicubic smoothing. The other option for the default renderer is smooth(2), which is bilinear smoothing.
    -
    +Draws all geometry with smooth (anti-aliased) edges. This behavior is the default, so smooth() only needs to be used when a program needs to set the smoothing in a different way. The level parameter increases the amount of smoothness. This is the level of over sampling applied to the graphics buffer. +

    +With the P2D and P3D renderers, smooth(2) is the default, this is called "2x anti-aliasing." The code smooth(4) is used for 4x anti-aliasing and smooth(8) is specified for "8x anti-aliasing." The maximum anti-aliasing level is determined by the hardware of the machine that is running the software, so smooth(4) and smooth(8) will not work with every computer. +

    +The default renderer uses smooth(3) by default. This is bicubic smoothing. The other option for the default renderer is smooth(2), which is bilinear smoothing. +

    With Processing 3.0, smooth() is different than before. It was common to use smooth() and noSmooth() to turn on and off antialiasing within a sketch. Now, because of how the software has changed, smooth() can only be set once within a sketch. It can be used either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). The noSmooth() function also follows the same rules. +

    +When smooth() is used with a PGraphics object, it should be run right after the object is created withcreateGraphics(), as shown in the Reference in the third example. ]]>
    From bfaaf7c48f6dac49e11d3fc50f8ed7a8dd90ba99 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 10:41:17 -0700 Subject: [PATCH 103/299] Description for addChild() method of PShape --- content/api_en/PShape_addChild.xml | 16 ++++++++-------- content/api_en/smooth.xml | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/content/api_en/PShape_addChild.xml b/content/api_en/PShape_addChild.xml index 3d69836a8..20d7fa700 100644 --- a/content/api_en/PShape_addChild.xml +++ b/content/api_en/PShape_addChild.xml @@ -11,13 +11,13 @@ path, rectangle, and circle are added to a parent PShape variable named house that is a GROUP. ]]> diff --git a/content/api_en/smooth.xml b/content/api_en/smooth.xml index 75a727274..c19f7a303 100755 --- a/content/api_en/smooth.xml +++ b/content/api_en/smooth.xml @@ -75,7 +75,7 @@ The default renderer uses smooth(3) by default. This is bicubic smoothing

    With Processing 3.0, smooth() is different than before. It was common to use smooth() and noSmooth() to turn on and off antialiasing within a sketch. Now, because of how the software has changed, smooth() can only be set once within a sketch. It can be used either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). The noSmooth() function also follows the same rules.

    -When smooth() is used with a PGraphics object, it should be run right after the object is created withcreateGraphics(), as shown in the Reference in the third example. +When smooth() is used with a PGraphics object, it should be run right after the object is created with createGraphics(), as shown in the Reference in the third example. ]]> From b6da05716c022c927651ff4f1892b696510e9510 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 10:52:03 -0700 Subject: [PATCH 104/299] attempt to link readLine() from BufferedReader reference --- content/api_en/PShape_addChild.xml | 2 +- content/api_en/include/BufferedReader.xml | 11 +++-------- content/api_en/include/String.xml | 3 --- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/content/api_en/PShape_addChild.xml b/content/api_en/PShape_addChild.xml index 20d7fa700..36dcc867a 100644 --- a/content/api_en/PShape_addChild.xml +++ b/content/api_en/PShape_addChild.xml @@ -44,7 +44,7 @@ void draw() { path, rectangle, and circle are added to a parent PShape variable named house that is a GROUP. +Adds a child PShape to a parent PShape that is defined as a GROUP. In the example, the three shapes path, rectangle, and circle are added to a parent PShape variable named house that is a GROUP. ]]> diff --git a/content/api_en/include/BufferedReader.xml b/content/api_en/include/BufferedReader.xml index 354daa453..88f4c9b95 100644 --- a/content/api_en/include/BufferedReader.xml +++ b/content/api_en/include/BufferedReader.xml @@ -45,18 +45,13 @@ A BufferedReader object is used to read files line-by-line as individual Starting with Processing release 0134, all files loaded and saved by the Processing API use UTF-8 encoding. In previous releases, the default encoding for your platform was used, which causes problems when files are moved to other platforms. ]]> + + readLine() returns a String that is the current line in the text file - - - - - - - @@ -67,7 +62,7 @@ catch 1.0 -Function +Object Core diff --git a/content/api_en/include/String.xml b/content/api_en/include/String.xml index 37de6b086..886c433b9 100755 --- a/content/api_en/include/String.xml +++ b/content/api_en/include/String.xml @@ -107,7 +107,6 @@ String(data, offset, length) int: number of characters - @@ -121,6 +120,4 @@ text() PDE - - From 7eaf481905a204becbbc1f131aed857fadbbc305 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 10:58:54 -0700 Subject: [PATCH 105/299] attempt to link readLine() from BufferedReader reference, 2 --- content/api_en/include/BufferedReader.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/content/api_en/include/BufferedReader.xml b/content/api_en/include/BufferedReader.xml index 88f4c9b95..c7ef0855d 100644 --- a/content/api_en/include/BufferedReader.xml +++ b/content/api_en/include/BufferedReader.xml @@ -52,6 +52,8 @@ Starting with Processing release 0134, all files loaded and saved by the Process returns a String that is the current line in the text file + + @@ -64,6 +66,7 @@ catch Object -Core +PDE + From 184485fae15e8dddbc4344296a2f687bdbaa76af Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 11:00:20 -0700 Subject: [PATCH 106/299] attempt to link readLine() from BufferedReader reference, 3 --- content/api_en/include/BufferedReader.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/BufferedReader.xml b/content/api_en/include/BufferedReader.xml index c7ef0855d..dd28dd56d 100644 --- a/content/api_en/include/BufferedReader.xml +++ b/content/api_en/include/BufferedReader.xml @@ -52,7 +52,7 @@ Starting with Processing release 0134, all files loaded and saved by the Process returns a String that is the current line in the text file - + From dd17995694731b0342a5ad3adfe09b0497e9f87d Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 11:01:08 -0700 Subject: [PATCH 107/299] attempt to link readLine() from BufferedReader reference, 4 --- content/api_en/include/BufferedReader.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/BufferedReader.xml b/content/api_en/include/BufferedReader.xml index dd28dd56d..c7ef0855d 100644 --- a/content/api_en/include/BufferedReader.xml +++ b/content/api_en/include/BufferedReader.xml @@ -52,7 +52,7 @@ Starting with Processing release 0134, all files loaded and saved by the Process returns a String that is the current line in the text file - + From 637ea2c3c158dcd8489ec51e2cfd7b509ce81b80 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 12:44:44 -0700 Subject: [PATCH 108/299] Slight changes to pixels[] reference descriptions --- content/api_en/PImage_pixels.xml | 2 +- content/api_en/loadPixels.xml | 2 +- content/api_en/pixels.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/api_en/PImage_pixels.xml b/content/api_en/PImage_pixels.xml index 68203cae0..1f2a363e2 100755 --- a/content/api_en/PImage_pixels.xml +++ b/content/api_en/PImage_pixels.xml @@ -31,7 +31,7 @@ void draw() { +The pixels[] array contains the values for all the pixels in the image. These values are of the color datatype. This array is the size of the image, meaning if the image is 100 x 100 pixels, there will be 10,000 values and if the window is 200 x 300 pixels, there will be 60,000 values.

    Before accessing this array, the data must loaded with the loadPixels() method. Failure to do so may result in a NullPointerException. After the array data has been modified, the updatePixels() method must be run to update the content of the display window. ]]>
    diff --git a/content/api_en/loadPixels.xml b/content/api_en/loadPixels.xml index 60e106578..b3f2a0751 100755 --- a/content/api_en/loadPixels.xml +++ b/content/api_en/loadPixels.xml @@ -24,7 +24,7 @@ updatePixels(); pixels[] array. This function must always be called before reading from or writing to pixels[]. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again.
    +Loads the pixel data of the current display window into the pixels[] array. This function must always be called before reading from or writing to pixels[]. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again.

    Certain renderers may or may not seem to require loadPixels() or updatePixels(). However, the rule is that any time you want to manipulate the pixels[] array, you must have previously called loadPixels(), and after changes have been made, call updatePixels(). Even if the renderer may not seem to use this function in the current Processing release, this will always be subject to change. ]]>
    diff --git a/content/api_en/pixels.xml b/content/api_en/pixels.xml index b7ac0be33..b17fcc83c 100755 --- a/content/api_en/pixels.xml +++ b/content/api_en/pixels.xml @@ -21,7 +21,7 @@ updatePixels(); +The pixels[] array contains the values for all the pixels in the display window. These values are of the color datatype. This array is defined by the size of the display window. For example, if the window is 100 x 100 pixels, there will be 10,000 values and if the window is 200 x 300 pixels, there will be 60,000 values.

    Before accessing this array, the data must loaded with the loadPixels() function. Failure to do so may result in a NullPointerException. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again. After pixels has been modified, the updatePixels() function must be run to update the content of the display window. ]]>
    From 072b8e4ef8807b5e4dde2c57c4c9cbb7e85ce5c1 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 12:51:31 -0700 Subject: [PATCH 109/299] Slight changes to pixels[] reference descriptions --- content/api_en/PImage_loadPixels.xml | 2 -- content/api_en/PImage_updatePixels.xml | 4 ---- content/api_en/loadPixels.xml | 4 +--- content/api_en/updatePixels.xml | 4 ---- 4 files changed, 1 insertion(+), 13 deletions(-) diff --git a/content/api_en/PImage_loadPixels.xml b/content/api_en/PImage_loadPixels.xml index 23c5f9730..a9c353f84 100644 --- a/content/api_en/PImage_loadPixels.xml +++ b/content/api_en/PImage_loadPixels.xml @@ -34,8 +34,6 @@ void draw() { pixels[] array. This function must always be called before reading from or writing to pixels[]. -

    -Certain renderers may or may not seem to require loadPixels() or updatePixels(). However, the rule is that any time you want to manipulate the pixels[] array, you must have previously called loadPixels(), and after changes have been made, call updatePixels(). Even if the renderer may not seem to use this function in the current Processing release, this will always be subject to change. ]]>
    diff --git a/content/api_en/PImage_updatePixels.xml b/content/api_en/PImage_updatePixels.xml index 7e713fffd..470c33d07 100644 --- a/content/api_en/PImage_updatePixels.xml +++ b/content/api_en/PImage_updatePixels.xml @@ -34,10 +34,6 @@ void draw() { pixels[] array. Use in conjunction with loadPixels(). If you're only reading pixels from the array, there's no need to call updatePixels(). -

    -Certain renderers may or may not seem to require loadPixels() or updatePixels(). However, the rule is that any time you want to manipulate the pixels[] array, you must first call loadPixels(), and after changes have been made, call updatePixels(). Even if the renderer may not seem to use this function in the current Processing release, this will always be subject to change. -

    -Currently, none of the renderers use the additional parameters to updatePixels(), however this may be implemented in the future. ]]>
    diff --git a/content/api_en/loadPixels.xml b/content/api_en/loadPixels.xml index b3f2a0751..d5c4b7c17 100755 --- a/content/api_en/loadPixels.xml +++ b/content/api_en/loadPixels.xml @@ -24,9 +24,7 @@ updatePixels(); pixels[] array. This function must always be called before reading from or writing to pixels[]. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again.
    -
    -Certain renderers may or may not seem to require loadPixels() or updatePixels(). However, the rule is that any time you want to manipulate the pixels[] array, you must have previously called loadPixels(), and after changes have been made, call updatePixels(). Even if the renderer may not seem to use this function in the current Processing release, this will always be subject to change. +Loads the pixel data of the current display window into the pixels[] array. This function must always be called before reading from or writing to pixels[]. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again. ]]>
    diff --git a/content/api_en/updatePixels.xml b/content/api_en/updatePixels.xml index 200667c22..fb3ba9af1 100755 --- a/content/api_en/updatePixels.xml +++ b/content/api_en/updatePixels.xml @@ -24,10 +24,6 @@ updatePixels(); pixels[] array. Use in conjunction with loadPixels(). If you're only reading pixels from the array, there's no need to call updatePixels() — updating is only necessary to apply changes. -

    -Certain renderers may or may not seem to require loadPixels() or updatePixels(). However, the rule is that any time you want to manipulate the pixels[] array, you must first call loadPixels(), and after changes have been made, call updatePixels(). Even if the renderer may not seem to use this function in the current Processing release, this will always be subject to change. -

    -Currently, while none of the renderers use the additional parameters to updatePixels(), this may be implemented in the future. ]]>
    From dacf00f8ed16d0bffa466c6eb9bfa17c9e810c95 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 13:03:35 -0700 Subject: [PATCH 110/299] Move hint() to 'includes' folder, wasn't building where it was --- content/api_en/{ => include}/hint.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/api_en/{ => include}/hint.xml (100%) diff --git a/content/api_en/hint.xml b/content/api_en/include/hint.xml similarity index 100% rename from content/api_en/hint.xml rename to content/api_en/include/hint.xml From 70a06a742754d9a22a4619980f7c866ab8ddd71b Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 13:30:49 -0700 Subject: [PATCH 111/299] Further data for hint() reference --- content/api_en/include/hint.xml | 45 ++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/content/api_en/include/hint.xml b/content/api_en/include/hint.xml index 7068ab8c8..a48311069 100644 --- a/content/api_en/include/hint.xml +++ b/content/api_en/include/hint.xml @@ -6,7 +6,27 @@ - +function + + + + + hint() to allow people to tune the settings for their particular sketch. Implementing a hint() is a last resort that's used when a more elegant solution cannot be found. Some options might graduate to standard features instead of hints over time, or be added and removed between (major) releases. @@ -48,4 +68,27 @@ Forces the P3D renderer to draw each shape (including its strokes) separately, i Enables stroke geometry (lines and points) to be affected by the perspective, meaning that they will look smaller as they move away from the camera. ]]> + +hint(which) + + + + + + + +void + + +PGraphics +createGraphics() +size() + + +1.0 + +Function + +PDE + From 67b3b29f5007800b1d8246b4dba689b1c8f68b31 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 14:16:34 -0700 Subject: [PATCH 112/299] PSurface methods added to reference --- content/api_en/include/setLocation.xml | 60 +++++++++++++++++++++++++ content/api_en/include/setResizable.xml | 55 +++++++++++++++++++++++ content/api_en/include/setTitle.xml | 55 +++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 content/api_en/include/setLocation.xml create mode 100644 content/api_en/include/setResizable.xml create mode 100644 content/api_en/include/setTitle.xml diff --git a/content/api_en/include/setLocation.xml b/content/api_en/include/setLocation.xml new file mode 100644 index 000000000..f2a554c8d --- /dev/null +++ b/content/api_en/include/setLocation.xml @@ -0,0 +1,60 @@ + + +setLocation() + +Structure + + + +function + + + + + + +setLocation() function defines the position of the Processing sketch in relation to the upper-left corner of the computer screen. +

    +There are more features of PSurface in the Processing JavaDoc. +]]>
    + + +surface.setLocation(x, y) + + + + + + + + + + + + +void + + + + +3.0 + +Function + +PDE + +
    diff --git a/content/api_en/include/setResizable.xml b/content/api_en/include/setResizable.xml new file mode 100644 index 000000000..d133a108e --- /dev/null +++ b/content/api_en/include/setResizable.xml @@ -0,0 +1,55 @@ + + +setResizable() + +Structure + + + +function + + + + + + +surface.setResizable(true) is used within a sketch, the window can be resized while it's running. +

    +There are more features of PSurface in the Processing JavaDoc. +]]>
    + + +surface.setResizable(resizable) + + + + + + + +void + + + + +3.0 + +Function + +PDE + +
    diff --git a/content/api_en/include/setTitle.xml b/content/api_en/include/setTitle.xml new file mode 100644 index 000000000..ef7e9b05a --- /dev/null +++ b/content/api_en/include/setTitle.xml @@ -0,0 +1,55 @@ + + +setTitle() + +Structure + + + +function + + + + + + +
    +There are more features of PSurface in the Processing JavaDoc. +]]>
    + + +surface.setTitle(title) + + + + + + + +void + + + + +3.0 + +Function + +PDE + +
    From cdf89e7a3e7adcda261131ae2458fed3c283b422 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 14:21:51 -0700 Subject: [PATCH 113/299] Corrections to PSurface methods in reference --- content/api_en/include/setLocation.xml | 2 +- content/api_en/include/setResizable.xml | 2 +- content/api_en/include/setTitle.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/api_en/include/setLocation.xml b/content/api_en/include/setLocation.xml index f2a554c8d..c54f0ee04 100644 --- a/content/api_en/include/setLocation.xml +++ b/content/api_en/include/setLocation.xml @@ -29,7 +29,7 @@ void draw() { setLocation() function defines the position of the Processing sketch in relation to the upper-left corner of the computer screen.

    -There are more features of PSurface in the Processing JavaDoc. +There are more features of PSurface documented in the Processing JavaDoc. ]]>
    diff --git a/content/api_en/include/setResizable.xml b/content/api_en/include/setResizable.xml index d133a108e..3b4261790 100644 --- a/content/api_en/include/setResizable.xml +++ b/content/api_en/include/setResizable.xml @@ -29,7 +29,7 @@ void draw() { surface.setResizable(true) is used within a sketch, the window can be resized while it's running.

    -There are more features of PSurface in the Processing JavaDoc. +There are more features of PSurface documented in the Processing JavaDoc. ]]>
    diff --git a/content/api_en/include/setTitle.xml b/content/api_en/include/setTitle.xml index ef7e9b05a..1c18e6d22 100644 --- a/content/api_en/include/setTitle.xml +++ b/content/api_en/include/setTitle.xml @@ -27,9 +27,9 @@ void draw() { setTitle() function defines the title to appear at the top of the sketch window.

    -There are more features of PSurface in the Processing JavaDoc. +There are more features of PSurface documented in the Processing JavaDoc. ]]>
    From 6f213bc69d82a9d4a24bbe0a51af3d26fb561aad Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 14:55:16 -0700 Subject: [PATCH 114/299] Changes to Reference for pixel density clarification --- content/api_en/pixelDensity.xml | 5 +++-- content/api_en/pixelHeight.xml | 39 +++++++++++++++++++++++++++++---- content/api_en/pixelWidth.xml | 39 +++++++++++++++++++++++++++++---- content/api_en/pixels.xml | 4 ++-- 4 files changed, 75 insertions(+), 12 deletions(-) diff --git a/content/api_en/pixelDensity.xml b/content/api_en/pixelDensity.xml index 02d96afe8..35b15bac1 100755 --- a/content/api_en/pixelDensity.xml +++ b/content/api_en/pixelDensity.xml @@ -57,9 +57,10 @@ void draw() { size() in a program without a setup() and used within setup() when a program has one. The pixelDensity() should only be used with hardcoded numbers (in almost all cases this number will be 2) or in combination with displayDensity() as in the third example above. - +

    +When the pixel density is set to more than 1, it changes all of the pixel operations including the way get(), set(), blend(), copy(), and updatePixels() all work. See the reference for pixelWidth and pixelHeight for more information. +

    To use variables as the arguments to pixelDensity() function, place the pixelDensity() function within the settings() function. There is more information about this on the settings() reference page. - ]]>
    diff --git a/content/api_en/pixelHeight.xml b/content/api_en/pixelHeight.xml index 8be6e94d4..1a2e15e63 100755 --- a/content/api_en/pixelHeight.xml +++ b/content/api_en/pixelHeight.xml @@ -8,10 +8,41 @@ + + + + diff --git a/content/api_en/pixelWidth.xml b/content/api_en/pixelWidth.xml index 45ab35d9e..5f88fa136 100755 --- a/content/api_en/pixelWidth.xml +++ b/content/api_en/pixelWidth.xml @@ -8,10 +8,41 @@ + + + + diff --git a/content/api_en/pixels.xml b/content/api_en/pixels.xml index b17fcc83c..536f50338 100755 --- a/content/api_en/pixels.xml +++ b/content/api_en/pixels.xml @@ -21,8 +21,8 @@ updatePixels(); pixels[] array contains the values for all the pixels in the display window. These values are of the color datatype. This array is defined by the size of the display window. For example, if the window is 100 x 100 pixels, there will be 10,000 values and if the window is 200 x 300 pixels, there will be 60,000 values.
    -
    +The pixels[] array contains the values for all the pixels in the display window. These values are of the color datatype. This array is defined by the size of the display window. For example, if the window is 100 x 100 pixels, there will be 10,000 values and if the window is 200 x 300 pixels, there will be 60,000 values. When the pixel density is set to higher than 1 with the pixelDensity() function, these values will change. See the reference for pixelWidth or pixelHeight for more information. +

    Before accessing this array, the data must loaded with the loadPixels() function. Failure to do so may result in a NullPointerException. Subsequent changes to the display window will not be reflected in pixels until loadPixels() is called again. After pixels has been modified, the updatePixels() function must be run to update the content of the display window. ]]>
    From 73cac46fbe211d7758eb8b4f2f96675c059115a3 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 14:58:20 -0700 Subject: [PATCH 115/299] Little glitch with get() reference, unclosed tag --- content/api_en/get.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/api_en/get.xml b/content/api_en/get.xml index 89683590c..be56dc889 100755 --- a/content/api_en/get.xml +++ b/content/api_en/get.xml @@ -31,12 +31,12 @@ rect(25, 25, 50, 50); x and y parameters to get the value of one pixel. Get a section of the display window by specifying additional w and h parameters. When getting an image, the x and y parameters define the coordinates for the upper-left corner of the image, regardless of the current imageMode().
    -
    -If the pixel requested is outside of the image window, black is returned. The numbers returned are scaled according to the current color ranges, but only RGB values are returned by this function. For example, even though you may have drawn a shape with colorMode(HSB), the numbers returned will be in RGB format.
    -
    -If a width and a height are specified, get(x, y, w, h) returns a PImage corresponding to the part of the original PImage where the top left pixel is at the (x, y) position with a width of w a height of h.
    -
    +Reads the color of any pixel or grabs a section of an image. If no parameters are specified, the entire image is returned. Use the x and y parameters to get the value of one pixel. Get a section of the display window by specifying additional w and h parameters. When getting an image, the x and y parameters define the coordinates for the upper-left corner of the image, regardless of the current imageMode(). +

    +If the pixel requested is outside of the image window, black is returned. The numbers returned are scaled according to the current color ranges, but only RGB values are returned by this function. For example, even though you may have drawn a shape with colorMode(HSB), the numbers returned will be in RGB format. +

    +If a width and a height are specified, get(x, y, w, h) returns a PImage corresponding to the part of the original PImage where the top left pixel is at the (x, y) position with a width of w a height of h. +

    Getting the color of a single pixel with get(x, y) is easy, but not as fast as grabbing the data directly from pixels[]. The equivalent statement to get(x, y) using pixels[] is pixels[y*width+x]. See the reference for pixels[] for more information. ]]>
    From c7c7f040e54ce80c0353ada41dfaf3d7190f429b Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 16:00:39 -0700 Subject: [PATCH 116/299] Fix a link from the multiply reference page --- content/api_en/attrib.xml | 63 +++++++++++++++++++++++++++++ content/api_en/include/multiply.xml | 2 +- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 content/api_en/attrib.xml diff --git a/content/api_en/attrib.xml b/content/api_en/attrib.xml new file mode 100644 index 000000000..3d21bc538 --- /dev/null +++ b/content/api_en/attrib.xml @@ -0,0 +1,63 @@ + + + +attrib() + +Rendering + + + + + + + + + + +attrib() function attaches custom values to each vertex in the scene. By default, Processing handles several per-vertex attributes: position, color, normal, texture coordinates, etc. These attributes are used by the renderer to determine how the geometry will look on the screen as result of applying the built-in shaders that compute texture, lighting, etc. However, if the coder sets a custom shader that does some additional rendering calculations, then she might need to pass additional information to the the shader in the form of custom attributes. These attributes can be of three types: position, normal, color, and other. The first three are meant to specify xyz coordinates, normal coordinates, and color components, respectively. The third type can be use to pass any kind of attribute value. +]]> + + diff --git a/content/api_en/include/multiply.xml b/content/api_en/include/multiply.xml index 20c71bb1f..7c2431aaa 100755 --- a/content/api_en/include/multiply.xml +++ b/content/api_en/include/multiply.xml @@ -37,7 +37,7 @@ Multiplies the values of the two parameters. Multiplication is equivalent to a s -+ (add) ++ (addition) / (divide) From 9437128705a3be532ec9b120813741dedb2541fa Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 16:03:23 -0700 Subject: [PATCH 117/299] Fix a link from the multiply reference page, 2 --- content/api_en/include/multiply.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/api_en/include/multiply.xml b/content/api_en/include/multiply.xml index 7c2431aaa..a125ad6fd 100755 --- a/content/api_en/include/multiply.xml +++ b/content/api_en/include/multiply.xml @@ -48,10 +48,4 @@ Multiplies the values of the two parameters. Multiplication is equivalent to a s PDE - - - - - - From b11b3a2ba4e435002995894f43aac2d8a77832ab Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 26 Jul 2019 16:10:49 -0700 Subject: [PATCH 118/299] Old CSS removal --- css/style.css | 184 +------------------------------------------------- 1 file changed, 2 insertions(+), 182 deletions(-) diff --git a/css/style.css b/css/style.css index f7b639c5a..1726c528c 100755 --- a/css/style.css +++ b/css/style.css @@ -7,12 +7,10 @@ Reworked by CR, 23 Sep 2011 Reworked by Jon Gacnik, 19 Feb 2013 Created: 2005.08.29 04:28PM -Last Modified: 2014.11.15 by Scott Murray +Last Modified: 2019.07.26 by Casey Reas to remove Foundation Site CSS "-f" */ - - @font-face { font-family: 'theSerifItalic'; src: url(fonts/TheSerif_B4_Italic.eot), @@ -54,7 +52,6 @@ Last Modified: 2014.11.15 by Scott Murray } - /* ================ GLOBAL ================== */ body { @@ -102,6 +99,7 @@ a.large-link:before { content: ''; } + /* ================ COVER SLIDESHOW ================== */ #slideshow { @@ -127,7 +125,6 @@ a.large-link:before { } - /* ================ LAYOUT ================== */ #container { @@ -137,7 +134,6 @@ a.large-link:before { } - /* ================ RIBBON ================== */ #ribbon { @@ -222,16 +218,6 @@ a.large-link:before { position: relative; } -#header-f { - width: 900px; - height: 106px; - margin-bottom: 30px; - overflow: hidden; - background: #0c2033 url(/images/processing-site.png) center center no-repeat; - background-size: 900px 106px; - position: relative; -} - #header .processing-logo { width: 206px; height: 38px; @@ -243,17 +229,6 @@ a.large-link:before { background-image: linear-gradient(transparent, transparent), url(../img/processing-logo.svg); } -#header-f .processing-logo { - width: 370px; - height: 38px; - margin: 20px 0 0 30px; - /* -- NEW FOUNDATION LOGO GOES HERE -- */ - background: transparent url(/images/processing-foundation-logo.svg) center center no-repeat; - background-image: -webkit-linear-gradient(transparent, transparent), url(/images/processing-foundation-logo.svg); - background-image: -moz-linear-gradient(transparent, transparent), url(/images/processing-foundation-logo.svg); - background-image: linear-gradient(transparent, transparent), url(/images/processing-foundation-logo.svg); -} - #header .processing-logo.no-cover:before { position: relative; top: 3px; @@ -262,14 +237,6 @@ a.large-link:before { content: '\2039'; } -#header-f .processing-logo.no-cover:before { - position: relative; - top: 3px; - left: -18px; - font-size: 24px; - content: '\2039'; -} - #Overview2 .processing-logo.no-cover:before { position: relative; top: 3px; @@ -284,23 +251,11 @@ a.large-link:before { color: white; } -#header-f a { - font-family: 'theSerif', 'Enriqueta', georgia, times, sans-serif; - text-decoration: none; - border: none; - color: white; -} - #header h1 { display: none; float: left; } -#header-f h1 { - display: none; - float: left; -} - #header form { position: absolute; top: 20px; @@ -309,14 +264,6 @@ a.large-link:before { color: #959595; } -#header-f form { - position: absolute; - top: 20px; - right: 5px; - width: 176px; - color: #959595; -} - #header form input { float: left; border: 1px solid #136796; @@ -328,29 +275,12 @@ a.large-link:before { color: #959595; } -#header-f form input { - float: left; - border: 1px solid #136796; - outline: none; - height: 18px; - background: #fff; - font-family: 'theSerif', 'Enriqueta', georgia, times, serif; - font-size: 1em; - color: #959595; -} - #header form input[type="text"]{ padding-left: 3px; width: 127px; border-right: none; } -#header-f form input[type="text"]{ - padding-left: 3px; - width: 127px; - border-right: none; -} - #header form input[type="submit"]{ height: 22px; width: 22px; @@ -362,21 +292,8 @@ a.large-link:before { cursor: pointer; } -#header-f form input[type="submit"]{ - height: 22px; - width: 22px; - border-left: none; - background: white url(/images/search-f.svg) center center no-repeat; - background-image: -webkit-linear-gradient(transparent, transparent), url(/images/search-f.svg); - background-image: -moz-linear-gradient(transparent, transparent), url(/images/search-f.svg); - background-image: linear-gradient(transparent, transparent), url(/images/search-f.svg); - cursor: pointer; -} - #header form p { margin: 0; } -#header-f form p { margin: 0; } - /* ================ NAVBAR ================== */ #navigation { @@ -428,27 +345,6 @@ a.large-link:before { padding-top: 10px; } -/* === FOUNDATION FOOTER === */ - -#footer-f { - clear: both; - padding: 100px 30px 20px 30px; - line-height: 23px; - color: #959595; -} -#footer-f a { - color: #959595; - border-bottom: 1px solid #CECECE; -} -#footer-f #copyright, -#footer-f #colophon { - -} -#footer-f #copyright { - border-top: 1px solid #A6BCCF; - padding-top: 10px; -} - /* ================ TYPOGRAPHY ================== */ h1, h2, h3, h4, h5, h6 @@ -1097,37 +993,6 @@ h2 { margin-bottom: 0; margin-top: 0;} #Tutorials .colthree { width: 224px; float: left; margin-right: 20px; } #Tutorials h2 { margin: 0 0 20px 0; font-size: 1em; } -/*#Tutorials p { - margin-top: 2.0em; - margin-bottom: 2.0em; - font-size : 1.0em; - font-weight : normal; - line-height : 2.0em; - }*/ - -/*#Tutorials h3 { - font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; - font-size : 1.3em; - font-weight : bold; - margin-bottom : 0.4em; - margin-top : 1.8em; -} - -#Tutorials h5 { - font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; - font-weight : bold; - font-size : 1.0em; - margin-bottom : 0.4em; - margin-top : 1.4em; -}*/ - -/*#Tutorials h1 { - font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; - font-size : 2.0em; - font-weight : normal; - font-style : normal; -}*/ - /*--------------------TUTORIAL HEADER SPACING------------------*/ .Tutorials { line-height: 0em; } @@ -1476,48 +1341,3 @@ div.examples-nav img { position: relative; top: 11px; } border: none; border-top: 1px solid #CBCBCB; } - -/**************************************************************** updates, courses, happenings ***/ -/* -#Courses .content, #Updates .content, #Happenings .content { - width: 595px; - } -#Updates h2 { margin-top: 0 0 20px 0; } - - -.course-desc p { margin: 0; } -.course-desc p.date { margin: 0; } -.course-desc h3 { margin: 0; font-size: 1em; font-weight: bold; line-height: 1em; } -.course-desc { margin-bottom: 2em; } -*/ - -/************************************************************** comparison ***/ -/* - -#Compare h1 { margin-top: 2em; } -#Compare h2 { margin-bottom: 0; } -#Compare .threecol { float: left; width: 210px; margin-right: 20px; } -#Compare .threecol p { margin-top: 0; } - - -#Compare .content { - margin-left : 55px; - margin-right : 0px; - position: relative; -} -*/ - -/************************************************************** troubleshooting ***/ -/* -#Troubleshooting h1 { margin-top: 2em; } -#Troubleshooting h5 a { float: left; margin-left: -30px; } -ul.nostyle { margin: 0; padding: 0; list-style: none outside; } -#Troubleshooting td { padding-bottom: 1em; } -*/ - -/************************************************************** FAQ ***/ - -/* -#FAQ h5 a { float: left; margin-left: -30px; } -*/ - From fd781a70b3d9872f1e9c9aff5dfda5e0ee37e29c Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Sun, 28 Jul 2019 09:34:48 -0400 Subject: [PATCH 119/299] Update a couple of links. --- contrib_generate/sources.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 718794334..40b3fe0fd 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -131,7 +131,7 @@ 016 \ http://www.silentlycrashing.net/ezgestures/files/ezgestures.txt 025 \ http://jorgecardoso.eu/processing/NXTComm/NXTComm.txt 026 \ http://jorgecardoso.eu/processing/MindSetProcessing/download/MindsetProcessing.txt -039 \ https://github.com/codeanticode/tablet/releases/tag/latestv2/Tablet.txt +039 \ https://github.com/codeanticode/tablet/releases/download/latestv2/Tablet.txt 060 \ https://dl.dropbox.com/u/87680069/gamepad.txt 067 \ http://www.graffitiresearchlab.de/wp-content/uploads/proJMS.txt 084 \ http://iddi.github.io/oocsi-processing/oocsi.txt @@ -248,7 +248,7 @@ [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt 088 \ https://raw.github.com/andreaskoller/Fontastic/master/download/Fontastic.txt -116 \ https://github.com/prisonerjohn/NextText/releases/download/latest/NextText.txt +# 116 \ https://github.com/prisonerjohn/NextText/releases/download/latest/NextText.txt [Library : Video & Vision] 150 \ https://github.com/processing/processing-video/releases/download/latest/video.txt From eecd4d2427060a8606fd8bc6465c6b13bdb698b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Vel=C3=A1zquez?= Date: Fri, 2 Aug 2019 02:53:00 +0000 Subject: [PATCH 120/299] Updated servo example graphic changed the I/O port of the example graphic to match the change in the code --- .../tutorials/electronics/imgs/fg39-16.svg | 5019 +++++++++++++---- 1 file changed, 3907 insertions(+), 1112 deletions(-) diff --git a/content/static/tutorials/electronics/imgs/fg39-16.svg b/content/static/tutorials/electronics/imgs/fg39-16.svg index 46abb2371..92324f100 100644 --- a/content/static/tutorials/electronics/imgs/fg39-16.svg +++ b/content/static/tutorials/electronics/imgs/fg39-16.svg @@ -1,1112 +1,3907 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + +image/svg+xml \ No newline at end of file From d2139e54bef5f989bd5ae95c846aa6f54daf908d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Vel=C3=A1zquez?= Date: Fri, 2 Aug 2019 03:01:54 +0000 Subject: [PATCH 121/299] Fixed the the servo control example CHanged the servo control I/O pin on the Arduino sketch and added the option of changing the serial port on the Processing sketch --- content/static/tutorials/electronics/index.html | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/content/static/tutorials/electronics/index.html b/content/static/tutorials/electronics/index.html index 9777b0f8f..a36a9f284 100644 --- a/content/static/tutorials/electronics/index.html +++ b/content/static/tutorials/electronics/index.html @@ -635,9 +635,10 @@

    Code

     // Read data from the serial port and set the position of a servomotor 
     // according to the value
    +#include 
     
     Servo myservo;                   // Create servo object to control a servo
    -int servoPin = 4;                // Connect yellow servo wire to digital I/O pin 4 
    +int servoPin = 3;                // Connect yellow servo wire to digital I/O pin 3 (must be PWM) 
     int val = 0;                     // Data received from the serial port
     
     void setup() {
    @@ -672,7 +673,12 @@ 

    Code

    noStroke(); frameRate(10); // Open the port that the board is connected to and use the same speed (9600 bps) - port = new Serial(this, 9600); + port = new Serial(this, 9600); // Comment this line if it's not the correct port + // If the above does not work uncomment the lines below to choose the correct port + // List all the available serial ports, preceded by their index number: + //printArray(Serial.list()); + // Instead of 0 input the index number of the port you are using: + //port = new Serial(this, Serial.list()[0], 9600); } void draw() { @@ -918,4 +924,4 @@

    Resources

    - \ No newline at end of file + From 867a74b0f386a6a40bb46a547a49514c7c6c12f8 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 6 Aug 2019 07:58:18 -0400 Subject: [PATCH 122/299] Update R mode URL. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 40b3fe0fd..22fcb08f2 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -318,4 +318,4 @@ 162 \ https://github.com/joelmoniz/REPLmode/releases/download/latest/REPLMode.txt 169 \ https://py.processing.org/3/PythonMode.txt 199 \ https://github.com/fathominfo/processing-p5js-mode/releases/download/latest/p5jsMode.txt -220 \ http://gaocegege.com/Processing.R/RLangMode.txt +220 \ https://github.com/processing-r/Processing.R/releases/latest/download/RLangMode.txt From a4229884bb9461e242057b15965e70d6cc878a8e Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 7 Aug 2019 13:03:52 -0400 Subject: [PATCH 123/299] Update URL for sftp library. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 22fcb08f2..0e5c844e1 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -43,7 +43,7 @@ [Library : Data] 008 \ http://www.saint-clair.net/download/gml4u/GML4U.txt -011 \ http://www.shiffman.net/p5/libraries/sftp/sftp.txt +011 \ https://github.com/shiffman/SFTP-Processing/releases/download/latest/sftp.txt 012 \ http://www.shiffman.net/p5/libraries/qrcode/qrcodeprocessing.txt 040 \ http://r-s-g.org/carnivore/download/carnivore_p5lib.txt # 042 \ http://wyldco.com/romefeeder/download/romefeeder.txt From 43728959af23b689016367dc89bc9a2f2c769019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Vel=C3=A1zquez?= Date: Thu, 8 Aug 2019 02:12:18 +0000 Subject: [PATCH 124/299] fixed encoding of character on sketch 4A changed the "<" and ">" characters for their HTML entities --- content/static/tutorials/electronics/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/tutorials/electronics/index.html b/content/static/tutorials/electronics/index.html index a36a9f284..02b31bdcc 100644 --- a/content/static/tutorials/electronics/index.html +++ b/content/static/tutorials/electronics/index.html @@ -635,7 +635,7 @@

    Code

     // Read data from the serial port and set the position of a servomotor 
     // according to the value
    -#include 
    +#include <Servo.h>
     
     Servo myservo;                   // Create servo object to control a servo
     int servoPin = 3;                // Connect yellow servo wire to digital I/O pin 3 (must be PWM) 
    
    From b26cf5412162495b882d803274dc3f7380a3552c Mon Sep 17 00:00:00 2001
    From: Elie Zananiri 
    Date: Sun, 1 Sep 2019 09:54:14 -0400
    Subject: [PATCH 125/299] Add Coding Creative examples.
    
    ---
     contrib_generate/sources.conf | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf
    index 22fcb08f2..351c80329 100644
    --- a/contrib_generate/sources.conf
    +++ b/contrib_generate/sources.conf
    @@ -1,4 +1,4 @@
    -# Next ID: 243
    +# Next ID: 244
     # Increment after assigning ID to new contribution
     
     [Library : 3D]
    @@ -285,6 +285,7 @@
     [Examples : ]
     194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt
     226 \ https://github.com/Apress/processing-for-android/releases/download/latest/processing-for-android-examples.txt
    +243 \ http://coding-creative.dringtech.com/examples/coding-creative-examples.txt
     
     [Tool : ]
     020 \ https://dl.dropboxusercontent.com/u/69944346/ColorSelectorPlus/ColorSelectorPlusTool.txt
    
    From 06c73398c5caf09731721847490acb15c3428972 Mon Sep 17 00:00:00 2001
    From: Jeremy Douglass 
    Date: Wed, 11 Sep 2019 12:12:32 -0700
    Subject: [PATCH 126/299] Update nf to show right-hand formatting examples
    
    closes #774
    ---
     content/api_en/nf.xml | 7 ++++++-
     1 file changed, 6 insertions(+), 1 deletion(-)
    
    diff --git a/content/api_en/nf.xml b/content/api_en/nf.xml
    index f1e6123dd..295db43ac 100755
    --- a/content/api_en/nf.xml
    +++ b/content/api_en/nf.xml
    @@ -26,11 +26,16 @@ String se = nf(e, 5, 3);
     println(se);  // Prints "00040.200"
     String sf = nf(f, 3, 5);
     println(sf);  // Prints "009.01200"
    +
    +String sf2 = nf(f, 0, 5);
    +println(sf2);  // Prints "9.01200"
    +String sf3 = nf(f, 0, 2);
    +println(sf3);  // Prints "9.01"
     ]]>
     
     
     digits, left, and right parameters should always be positive integers.

    As shown in the above example, nf() is used to add zeros to the left and/or right of a number. This is typically for aligning a list of numbers. To remove digits from a floating-point number, use the int(), ceil(), floor(), or round() functions. +Utility function for formatting numbers into strings. There are two versions: one for formatting floats, and one for formatting ints. The values for the digits and right parameters should always be positive integers. The left parameter should be positive or 0. If it is zero, only the right side is formatted.

    As shown in the above example, nf() is used to add zeros to the left and/or right of a number. This is typically for aligning a list of numbers. To remove digits from a floating-point number, use the int(), ceil(), floor(), or round() functions. ]]> From 284093c3490b3207d3673fd14e88d69b7b909930 Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 11 Sep 2019 12:15:24 -0700 Subject: [PATCH 127/299] Revert "Add unbinary int signature" This reverts commit 1b00fd0194087d195929aafbe37c50a011cd6b4a. --- content/api_en/unbinary.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/content/api_en/unbinary.xml b/content/api_en/unbinary.xml index c4f3d0388..dcab5cbf8 100755 --- a/content/api_en/unbinary.xml +++ b/content/api_en/unbinary.xml @@ -17,20 +17,11 @@ String s3 = "00000100"; println(unbinary(s1)); // Prints "16" println(unbinary(s2)); // Prints "8" println(unbinary(s3)); // Prints "4" - -int i1 = 10000; -int i2 = 1000; -int i3 = 100 -println(unbinary(i1)); // Prints "16" -println(unbinary(i2)); // Prints "8" -println(unbinary(i3)); // Prints "4" ]]> String representation of a binary number to its equivalent integer value. For example, unbinary("00001000") will return 8. - -Alternately, converts an int representation of a binary number to its equivalent integer value. For example, unbinary(1000) will return 8. ]]> From d84717592fd34bc05e9c00a21b6c7d2be84f840c Mon Sep 17 00:00:00 2001 From: bclausdorff Date: Thu, 12 Sep 2019 13:11:41 +0200 Subject: [PATCH 128/299] Brightness example: Fix maximum value for brightness --- content/examples/Basics/Color/Brightness/Brightness.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Color/Brightness/Brightness.pde b/content/examples/Basics/Color/Brightness/Brightness.pde index 261fdce38..7f0e4093a 100644 --- a/content/examples/Basics/Color/Brightness/Brightness.pde +++ b/content/examples/Basics/Color/Brightness/Brightness.pde @@ -11,7 +11,7 @@ int lastBar = -1; void setup() { size(640, 360); - colorMode(HSB, width, 100, width); + colorMode(HSB, width, 100, height); noStroke(); background(0); } From ad8419d66907f9cfddc21cc16962d921caf9849c Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 23 Sep 2019 22:58:33 -0400 Subject: [PATCH 129/299] Switch to https for coding-creative examples. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 62e869b79..f771009eb 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -285,7 +285,7 @@ [Examples : ] 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt 226 \ https://github.com/Apress/processing-for-android/releases/download/latest/processing-for-android-examples.txt -243 \ http://coding-creative.dringtech.com/examples/coding-creative-examples.txt +243 \ https://coding-creative.dringtech.com/examples/coding-creative-examples.txt [Tool : ] 020 \ https://dl.dropboxusercontent.com/u/69944346/ColorSelectorPlus/ColorSelectorPlusTool.txt From 45aae0ca056727f7fcebbfc39b5522fdcd6cc08b Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 23 Sep 2019 22:58:48 -0400 Subject: [PATCH 130/299] Add ewbIK library. --- contrib_generate/sources.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index f771009eb..b57dbcdd2 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 244 +# Next ID: 245 # Increment after assigning ID to new contribution [Library : 3D] @@ -22,6 +22,7 @@ 195 \ http://culebra.technology/culebra.txt 196 \ https://github.com/jrc03c/queasycam/releases/download/latest/queasycam.txt 215 \ http://maxlfarrell.gitlab.io/extruder/extruder.txt +244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt [Library : Animation] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt @@ -33,6 +34,7 @@ 095 \ https://dl.dropbox.com/u/87680069/frames.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt 231 \ http://objectstothinkwith.com/tracer/tracer.txt +244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt [Library : Compilation] 004 \ http://staff.city.ac.uk/~jwo/giCentre/utils/gicentreUtils.txt @@ -196,6 +198,7 @@ 195 \ http://culebra.technology/culebra.txt 201 \ https://github.com/diwi/PixelFlow/releases/download/latest/PixelFlow.txt 216 \ https://github.com/diwi/LiquidFunProcessing/releases/download/latest/LiquidFunProcessing.txt +244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt [Library : Sound] 153 \ https://github.com/processing/processing-sound/releases/download/latest/sound.txt From fc60c9470030d284d155d6713e6ff027e72bffd9 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 2 Oct 2019 20:12:52 -0400 Subject: [PATCH 131/299] Add nub library. --- contrib_generate/sources.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index b57dbcdd2..521d688e0 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 245 +# Next ID: 246 # Increment after assigning ID to new contribution [Library : 3D] @@ -23,6 +23,7 @@ 196 \ https://github.com/jrc03c/queasycam/releases/download/latest/queasycam.txt 215 \ http://maxlfarrell.gitlab.io/extruder/extruder.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt +245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt [Library : Animation] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt @@ -35,6 +36,7 @@ 219 \ https://teddavis.org/xyscope/download/XYscope.txt 231 \ http://objectstothinkwith.com/tracer/tracer.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt +245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt [Library : Compilation] 004 \ http://staff.city.ac.uk/~jwo/giCentre/utils/gicentreUtils.txt @@ -247,6 +249,7 @@ 229 \ https://github.com/Shinhoo/Wooting-Keyboard-Library/releases/download/lastest/WootingKeyboard.txt 235 \ https://www.barkmin.eu/processing-library-scratch/download/scratch.txt 240 \ https://commonpike.github.io/nl.kw.processing.portmods/dist/PortMods.txt +245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From f94e066c0693b9f18d2102ffc04e61331e6b324f Mon Sep 17 00:00:00 2001 From: Filip Visnjic Date: Fri, 4 Oct 2019 13:23:28 +0100 Subject: [PATCH 132/299] exh update --- content/curated.xml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/content/curated.xml b/content/curated.xml index 153c331a6..cfedf9e7d 100755 --- a/content/curated.xml +++ b/content/curated.xml @@ -1,6 +1,31 @@ + + images/pour.jpg + + ‘Pour Reception’ is a playful radio that uses machine learning and tangible computing to challenge our cultural understanding of what an interface is and can be. Two glasses of water are turned into a digital material for the user to explore and appropriate. + http://www.toreknudsen.dk/work/pour-reception/ + Tore Knudsen + + + + images/digits.jpg + + Gysin-Vanetti are an artist duo exploring images and patterns using the type geometries of multipurpose displays. Using only prevailing forms, Gysin-Vanetti build images, animations and generate patterns. + https://www.creativeapplications.net/processing/gysin-vanetti-o-is-not-a-letter-its-a-circle/ + Gysin&Vanetti + CreativeApplications.Net + + + + images/volume.jpg + + Created by NY based art and architecture collective Softlab, ‘Volume’ is an interactive cube of responsive mirrors that redirect light and sound to spatialize and reflect the excitement of surrounding festival goers. + http://softlabnyc.com/portfolio/volume/ + Softlab + + images/komorebi.jpg From cb7177fa2a371543367ac7614f56eddcaa0806d7 Mon Sep 17 00:00:00 2001 From: Filip Visnjic Date: Fri, 4 Oct 2019 13:29:32 +0100 Subject: [PATCH 133/299] exh update images --- content/curated_images/digits.jpg | Bin 0 -> 11868 bytes content/curated_images/digits@2x.jpg | Bin 0 -> 33497 bytes content/curated_images/pour.jpg | Bin 0 -> 11308 bytes content/curated_images/pour@2x.jpg | Bin 0 -> 33672 bytes content/curated_images/volume.jpg | Bin 0 -> 11820 bytes content/curated_images/volume@2x.jpg | Bin 0 -> 58679 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/curated_images/digits.jpg create mode 100644 content/curated_images/digits@2x.jpg create mode 100644 content/curated_images/pour.jpg create mode 100644 content/curated_images/pour@2x.jpg create mode 100644 content/curated_images/volume.jpg create mode 100644 content/curated_images/volume@2x.jpg diff --git a/content/curated_images/digits.jpg b/content/curated_images/digits.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce85f56583cb844ff4340518ced8b875c9a5fcd7 GIT binary patch literal 11868 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 literal 0 HcmV?d00001 diff --git a/content/curated_images/digits@2x.jpg b/content/curated_images/digits@2x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4210c3068574e3a297e5760919cd3575a5bdf59a GIT binary patch literal 33497 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 literal 0 HcmV?d00001 diff --git a/content/curated_images/volume.jpg b/content/curated_images/volume.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1233bc7419bfd2a14ac4b25b75b4326e8b9e57ca GIT binary patch literal 11820 zcmbVxWmKD8({8XLEpEkK0t5&y#Wg^XK%sb%0D&gB7b%6}?$F}i;t(8K+@InUFYZ>L zf*qdMzH`=k*Z1ShkA3fZ_FN--&#X-LeLsKy9q?4e2Vn;QKp;E-Ji!0Z{ULx<+0(|! z7k~l4eqfsb0QcXqd>uSIT%-g9Q11Lzw$9dYej8_`fRB}n0GMA;0PsxC$HmIV3GTsc z4Yx<2WLQtyx>%VJwlb_nqEJDoixS)cq3-7f*Z0#lu<>)Uk+fx%lVyJ9Bjtm1LBc(( zn0=71Q0`JbGOYhlF7+_~n=Qb~{0|WiCmB|SzpXOAfa)?UIlIA`Mft@*Heg{1W^qY= zu&AVjkO&{MkRVu0Ku}TuECLb)O9@I!34)pbMXV3j+-&WnV9Kihvi0yL!}_nFyuH2o zy@mOm-RuRxl9G}Ff&( z4C{lZ{|o`?0)_rZ@qgVdB=YaL{vqw|0fYaK8~;_>-N4rcE&zkOJA1m>z#qif{tbTE zyZ_zL-+~X`Na?sC9uCFom9n#qClZeGfGEqbKCJNDB5b8p#l=;@U~v&aaUnr52{2ev zTtQS>Tu4kpLP!#Ml%0nm!%N@#S0rNYdbM<31N_+xR@14#MTB3 zvJ#dM2MOBHLAZYt z-hb$C_=7YK78VXJ4mQsJwela4|9x`*89<5$PzS7HVUPkaNincUG46W-Ee{Sp!g|pC z@cbuXVdFf)#lyhFCjdOg0AT(|17moXkZ#m2>d0AgTbVUyxK0+8Xd zfbqx`^jInItz6#-Q6|=YQDn=9Q4xH%c1sdwS3W%pDX4p!%t=l9py2_7`=9|2>u<{# z08&gAEHD|if?ht(1NH$)emcP_^yqtCHyg#7wOfI(A}l0nl3j#SpM&at0q_Lt!97we zQh*%btaNKN?dEzXTpG>@_2o!b9QBO`g*nCgb@n!VZm9V|a*q*E`s zd88HdV-k?Fi|&;JHA1?Qisn51_eC}<&M;Vp9k`#1>eKHuh>}^^ayE_9P_&g-0la=pfnFbMgCNyr&*6H!^&koVFP9KDx*T9QUlapqINae zM-RnLXIn33O|OpYH1Rdzz_VIWzu}tbodiot7!5=T*;$hLT3rKCyBR{J0JsMT;ud@8 zdX)5uS)tqWHuL49}A=)DK$JOl(4`O;p7mFCKP?C<_e0S5+%7CKgtUF zUSQSD{7i{oA}V-87h1DaVg@gun(R($O-6rE*ee?bvC9@5gsE%H7C<~oiY=YZ0Tc?6 z&VZsYJOdq@On&9MAP+9P$^BrgbZKq&DKq zdF4(k7UXxuiq-B0HVMUnC993Pe6-m12Wo#F%0wp}zI z&KRPgCO)~T9$uv%b$-5Uz>FzpF;Xt-T*AR0f6X>wYV@e}Cj_73+V9Oz-TgXA$LH(9 zx|~1ee8hP_weW>Ca8^``?LLHup;45xhjm74IUQ5fNWviv3?gVDT%g>khwKDczCs6agwZH20A&qkuReJjhd?N zO+1>w`fm8>qdO_`OASf;S*rH_&-g7x%I z*a;3WLRu5ohMGmKqaBnRh3(rp_|4YYMX-h=zME>Y1Z5)2dm8RuCgn+ySAB?1$EnBt z1&>&nXRNJvA`>g#5!|wyKzLaY`o3o{XKuqo_iy>B=xAtq!iW|9F4&#$UXY>T4M5%_ zFhdx3ZS>N~i(}Uy)Z}Pd?QcQ)wk3*p9WMscSzJFuG!ha*4q}T!IX?s}H#L<=a%em{ zQ1ojKVQc8ZCX$S0rfH&?g|DzIF#a}zrPIgEjcSE~UWGM(A;96WpVm-QdByzIalwgM zJxLft%cO|vc%V2FW)h4^CC4zG4fb;2waWx#N3~@3hrF?~8i;8j0(>YVC&lT=%Z=o5RbhQQuTyVA^jy;9 z5>Q(6BIw&^vq5M;ltyIFZ~6nzDt{7+l4{_)GJ++7_vG)NG~{8(jVr2OtCmTckLIC4 z133BHhHqF-1Mw+uh;AJn7e)2VNKwbbc2b>W^nzwjqzI*7nUpzw;&(tPV|Dxjeg71i z)9hRFe1+~5bIsWbpei@Uq!jzU4Umj(e--=pzrs#C(hLcP$jpfoY&{L0+ z{T|@0Js8x$^|Npd=62VvdM40a;h*=8X}&ctUqknbHZF>3z%2NheE7&+9M954jbCi2 zCMDep{@$Gwl3#LDis5+E9e62LF=Y|`yudN=0{6AKn^oDb==C|dG_6=)tKRzN9nN#s zg$@6Sca}925Eo2L=mDkM`s%VSQK{%uQ&~_OcN`AGlaXFcrufiQcqZJ9(KT5m=i9rU ztMU`mWfzKYT^o{bQ2%3B4$PdDtgZ2Hmzu}t+TA*+?3*c3y$^;0oQg0F+TTG2x8Y7U z*Xol;zfny=vCmE&!5~^8-!4e&_)t^|E&;xd7f0EFs!cu9hV~s6~3L+MrviX6ZjYl4+W>?B&oHK1|Y{BnaC301Knwh5GRu51}-5yp*UTewcNrqGj9Z zYhr9)w;P1@=IX>*4TD}^_eIvR#A){UNAV$ja2}m_91laF;7X_V5}c5{drsl=v2yLjT77 z54>e0#>`57q}uTO)qGEJccAr`VP~8AMbmPKx@nZFsXRr6>_mwgC$7?-+K!0a7(X*# z>6p;LXv8n9xjMEnrFP?s+H?Fx`)DKHu@ZXq^lxTvQdH<2{^a%XjjWY4te^;AU&$zI|~Bz&ByI&`lu3tR>Eh9+Jkt5}7u7 zz_l68k@NU5Z$kQ^WKYJQS@bSeHw!{dSLF)K?TNlT{9^vC9ZmQss*8##r#DaaZOxcwCv`r8Gh-#Ttf zX!FxBM{!7V+THnat+&cqgeH+s%~bt6jg^24dw$|MPKFMx%uOUFAv z+Tkll(IcRvatY15Ke_u)RnNcuqSq)lC>Px=O4eTXY$*CND@at(2tsjJ_ECb&4GNs* z%(`1217Y1su)0*{8G`a(>ifVl3gBHN<_1lZDRVoFAaXw;Aa4qtOEyY2@Lkj}vUJ}2 zOQ33;#*`2j$6DBOcWy3uXYA0m6aixD9zbB($Ap=h?034K{@q}qt#A-Gf4*Mh>K8<= z&CK5}OhWtdEOA1+ar~xl-#TA&Wfjj&@+r?Uhyp{E^5;NO_|)C-aO>^DAC+6S(Tt-G z#tJxAZ_zQr%Jm&tN>$%aOv_#z#()<-jEgVPw}^AqEWG62_K^*lC`_*@TSPlDK=B^X zSaMN4?Y#ys1HjzKaLc=9TmC#v6?KAQE4D z(~RwLmHdxw1bQAMtB|2Scl zdm{B7^)uAiO8vQFX5i-GUL3NtQ9WGA(yo~nik}W@^S0GeLvSs%Qdgl%z$*lG?X_?F zBQMHN>Eyf}?N%i1bC6?t0H9vJ@u@GC+rey{L>`VP(){E$AlpBtct!n&SDH$FX517H ztL>^nfB5O^m>{W*Ma>FLF6IH3>}*GKk_CPLI;Hoi+}Ajal(I*zmxd;;bQ_G!oQKPt zTzMmJEP`dzpQ!|O*}j$xM9mo*y;&?aftNQ*EX-i#F4X%)iePQ|d`ff+em?fulCyh(-fXUzdi)M~E<&-C=4#r=>y zVWrjgtp7pbU&I{hVd}+5(z^C3rz0dc;U1vVq_bb>xP-HD+d|$ye;Rl>J~i$(iAQ|6 zd6p8N)F?}Mn*5|?>ouK+5+f1AW+~A0XoBMFJ)pRDBMqI4+qr-O{tOFP*x37xwiedg z$gb1RG}yjr?`Hsm845`9wWG!3PPu%fK0yQxZ|jJZhGxZ>DJt39cO+K02J%qv@{#Oe zMAOwsBh4x-m?{~o5Ci&ddU=d@sd|{*+J7B4#AN+1YPiKOqdvaW-f&w}&@+jnS;S58 z2sLM4d$}kBnpO7wocq&Q=r4wMFN5A;|4JQx_s+Vn@J8)sGJ?rd%@=nnZS{3n52;zm z(A#)7ZSNpu>o+Y!+Zs;tUKG;tSFN7f(of& zk|K!^0JpE)Q?BE^#U-h|40S#{HTZA>k}RpX(IsAy)>rM%XeuA33ZT+y{*ty~Q_DM) zg@irxBp*~>lTt24QG4{->)$DzAV}DtbLTg}{q|w93bdHVLAW`lc&N!;ktpTNc+0~?EQB-=KeC1T? ze#hRru?AE7b9N7){{9@BCl43}0yO2P92l0_gm2Ge#C8xXxfIo>8;VA7`QfzX2>>a#J zXJW0hgi zRO7Sg?i1v|iPV*sq|*<7YY8*->iEl+*0z^>sKBFvyO*!$xLlt-dSY2fo%lX@(|OK-s|+0Hhw04W|PRNq~$-BHjrgA$7v3EtlzwoBw#_ot#;1g#CA3}DI$s7-FjsW zT*Ysq{Bi8`nrNHDUfno}h?E?+FwAc3N!Fm#PlWktFjk~OlPq9ih(*H| zyQ2}#+m5te|4?h)VK!m>qn7NNZMHAM&rC=8jAXID`?HlP2}s-gE*8k%s3XuyDr^@me|A&I>|?rOjL}#H;jLb6eMUc9F4Te`bCsp$A<-AMu<6 z9Ep}Nht-^G4z^!^775;cyc`*6j8>h;`GP4mwYqpZ$pi8W(Jo+SS;s7|B_pILHCX_j zyr2d5;Rp8-ig24%vDlaU9u0KpR8)Jt>7&7^FrbJnT|E3MAF9P(tWp;wZc`9tWCx?g zC$s(&ON;arIXXPjZk;5@vL4r4iX9PTS4-O9Pvy&-TW9fP2xQMG3Mgoubc>`=BxNqy zIHopCEz@69R6`A^>(n1l9-}dkPs%i7biF=-q@PcfTHJc5@{lSYMQAGQwwbts-*fP+ zlxWY%%DoG|sPtnH#vG?&m%w>}A3y9qpw&(LRU_TAJ8cTVG9FWMODO_8_Iop>qp`8K zDHlEllpytz>BLZoTR-0DC(q2*HXSWyx@$<~Xv@l?#L;Gf7>%%JVeFT>GQg6g4nFL` zf48AaLhEVy^Vr6;HAmba=+}uPj7{g3ysos)=Zo;!oM_x&*Q>J_c=LrfYR76625(-| zGx?fY#D0uB)$@KSbwJuqE+s_TkSsCvi!e-Iv=pKy>-Z!K3BBS+p^7I{gw z(=KL~iN{y)NEo@ktDmnBv0m6P;X@^mNJCVdSHRlb7*dKOIPGX7E%a7+gwGowv@zQg z)jidqdJ_LBLCKZFR9ol=|Im=7?vtGnLzEiR#$o&$XEWiRqtzE?;d)s%@3|gLPa{Yw z`P21@%vX4ak*m6d(Myfu^L{AH@omvUJ#u+kfp&FhwighprHnL-g(Qy6s~ZF{w_Ac% zRsD&H27F0{f$g{Hwwc>x3>wE(-!gi^bbLTa+-H{xp(=b&jK4xD>+@{0}{Wr2mENyMkwVyCck(}on9fG>%vcJ}y86CC9FVuPkA{5x z?Q6tY+%TD7Xh3<0XRI@G?9_0jkYLS0Y95DScYr(Q6JW&JA`O<Xf?Y!F@TZAJJjUduw_%uTVIW!M2e7AL=--HryQ|WPLf>WlBbv9&FKUuS&a(}j@ zz-K3mvTa#W8*2XK6e_7@jC?w8M5~kvn$`W0-&Z2y`y`KrMFTMnRLs^fIWGA89%=SS zY+f8O?vo~a5!OMuXYzia56n;c%SBgK?b2zG)7FCLhc|_2yruE^<2dJ(2+deHOE?Y=Tudn|KtJz^|&jAY!h>sX;rc zO%5(0zKb^uRah9&l{YDW+AXIB4etTWul)y&64oTuo>+N5xd%Ma*HE+`GgRZyH)z)8 z=&KhajYPaGQ|qeUbWCr)o}2^r?^ z+4x2y-+Lr!?~>pr%l)>UsBb5FAGlc}xz&|seDZ9asUn+7&!HQ+XMO}K*xhV*f7D>( zP9HSsx#m3_vY${n!wqD|RAIrv^aGrozXoK8nwwT0$z(nKwFIw)f`;a+{wJNLUd z^c>I@n*J%mAfjiBTAkf+rZ{1FXv5Y$*?1~Obt|g?k#&)W8&wH9O@BTz_2?Ehk}hlS z+`nxtU*d;P?iD{XdUrFnD!%})qq zzFGrL*$p%GH%_R`CaTzqS`Op!l=>0fUQ%fLz*EG|Opn1p6l)S0Ny#m9Dh>{FRH{Kq zC^rCO*AXb3!2OYg_G5+6Z_NnsYU%3ZZcB>!lV_1!ydwp?a#oq>(R@858FKC^r)M|) z=kyMoB_^$xQ-tN{**t^ijaHU(`yB3501T4HCvLB$exl3+v_wk!>QlG$mb|X?KbE^o zu`af5yOebIO(YDrn$hV?jJDJ>IeJ72alfN?s zP9W@)o72Vy>5T){+IY?%5EQ1)VvzoyInNr$+ZKFD z`>TvHJ5#QqpEkYb#ku(-6B#ZR^#>PVmr%TU#I#eMM^okC=U(z$^5EChQnbz(MZ+s31%p%>gF=s&K1XU+`rXz6l?l5K)3otV5ZNA$!U7S8Xg`sIzTpOiq4U zDv{pUz` zhlpBDwG19sTd#_pW#f))TWgzhN*zUUB=cvwHjA`yBivno?(pNkB~2#@ZQ4}^(I(LW z2zb$zWnWFRvEDMCg=1TdR%4{@;_X*tEYvN3qL&nAOhz^A;0>}XMh|54tv zTneN7#;Q+5xXM!yOsBrE7!4((RQh@ee=PZeF@y;fJ`D${f2r}m zBJZ!QHPfefYiHV|nc79yXtJe5Hv65l^4waa_iI7gY!h)sL8)U`sFxe<28t8>60kHj zUEFE!2YQ<&ZSVw4dE}|kp1P^^QRKTNQ?;a)`ZvmTXy2k|;>QN|B|0sH5ips-RQoS} zAnwd-iDEH%9#;*$CGGZ|XU)zFZ*l}?`kV_|q2H2^j`~P9%+ButSVKy$98_I7aRyjh z%yr?w9roqZpNvdoIVRpX&&UcAFhr$QYbUjp49z;Z+Fw$6e~ zwPtI26%C^6Mn8{?z;bxwSyDfRi3BIMD9B~1H6kYKl|J1A5Q4*5V}i69$gJD0^ZHts z=CwrC9eK{KtlLZEV98|S6=_i^^8wq7JOCi#QNFRcQ~bncW|NZ$wx3#5?oHlVoGjMc zQ?HjR`tc@a9j^ThUM)6AEyUhm9lr6b>#3y|-#MBX^|i%X6b4}EWy>NmMSObybPm*B zXa&?k;TyW4YSioKaTAC}%;p&uy;sa6ieb9Xefff=6i+FqFu-uFmHy1o6zW9MtyTubDUH^YqS(f~ zn~uNCO#~$h*=iBtX88)kuG!IX5g*ZJd62lU=2S|aXXq6`D0?u`%9cq-@>yIXyI0km z$~Ib<&*bQl0@AW_vl2{f{WgL(IL5QY5ax)lL2FLz5_sfqITNYec@KDG@nY}1{uQIz zN`yUq%GHZ|0GmZFqC9$t=`*9N2dMRMMCn%%MROA#>mNLG04lj1enpWV>hjYiWNL@QAa&|QM{=aE%RHAv z6X!BDnsaup9>3WA{3S!qRPtxacCDRms_kEV8E+%TUW`;QkD;^JEvu<@-xaZxN&v6D zwy_hFPE#}h#*Ri@1MgC7g%+b=#AOpVJqS)sUDlIW{KA(?)Il$+MAns2RVy8#fqhJy zzS(v34JO~!AHJjbioG9-{HrJ1p*7vvwqM0^8?^&)Q?wAKu%Ddz)DsOa57ia+( zB)BmDdVUXZ{Q3ew=76O;wK&gZVLpbkT`uGK~G96^l~|X1~8L43mx= zAHnB$;%E6RlqBh&c>S67_jy-xoKsM!ta$>eC*o+itf~wtx#J?K+#=GAVyQ^T(W4Fa zG9vmMP^-1Kv9~=6#*GhJY+)BoX|mr+s}{cMhIY}^hzcPmSQmjr;8$Ktx@%p7NokV_ zUkOvmo=;8W=_4p2NvG|k--&#i+_!k=#0u_PMcutS`k{9~^Ux5YcP3tVMvGCWRvkF| znK0fe6p7TNV?~JBrG-c6abQrqBGrXHN@`F~hJ7Prm+bYx_&g@}wtXNvfMs0lB*qa3g&qvK=2UQqEmB zBGy{B*CQbrVhHa!XMZHI*y2&RO}#@d4$*XbYKl4$b9uvaktGV8?ni(yhb^2j#pYE* zBJ+)7ryt}Jqb_l>wQJyqo8bZ0CDVbUuENC~^~jjT4bW;L(g{(_0WIf%P6cg0*RGIE zJu<%J(!lse(%t6pEV*@eku=ms>8Uc~2_Loaq9(_7Z;1ZWGQSZd^C!*@uP};`fElTY z5q5bzS~2>3+$pYN>8Y!G00VVF)E8gS2C&VYLtaHma_A?#+^+Wm8fbOlKrjbBt zY6;|DQFTXE%4s@fBjqm^z85<<_&HR-b*0QTbd;tRSM^jCI_rust}bu0B7)Iz9kB_? ziqIei`e0x1Iq zTV%dv9tIE8>8Pp$^s%Ppyo%uf))Yrix}`Q$JK`6LUQTw3cZmucUI+!fDhY_4{#5L= z4+Cwt1$1Y9IviCCs)14G*)oP-ZMmxl_vUX=1enGZ(t2pvDLOgW$ zY*_IEBHLU?AN%W3^=_JW-P|r}9s|q0t51{3BJ0@Hv`qH#SlhXStjeXYC)SHu?&B2pJ86b`ctH{@Y^jf|L zVUZ0SnV2=vm?3aI66Mk==Q}$0Xbh#xhum;91Lx8g&T-}^Xp9-9@rlA}$yig?F&AY& zT21HoGNh=NOMcJ|btzvsimI6kad6pP3VA!?ePc?}Y&%|$CDLUZqjKxI6eUy*Ny#g# zqdF*0+I{Tl6p>P?jao|OCY>!fof#$>Q`A1))fi04_`dLrBtzTXyRW&`^MJa!n!IDl zPQx=(>@%C6df>B?TzJEcyohcw8=|@!QD~#by}&6VLy*o)*e`le9R+!lJ2LE3U=~w% zbu`D5E~T71&1BFwlyW^TvM}9519>&k;7Oc7hygWxR3xxn=WcNA{~TgE;sVdRx+<_Y zwX}6fJPU)axV|&6m@g-R9I~?rdhqEJ?8ksJ-o5s zEoGSFK}l!0)v-MBAd6oUP5ebT?34>1*VBZ|t{6G}G1cmzgJD_65$ z*ovJN4N?mlBA*h}L9_ONN=74%9StHW*lJNl5`PrQ(Wy=72J)$@OYd2BkUTVfXEDpw zl5=w?_TitrFBBa=k2!QV_M8GTG?Wx5aiofWlaqy~$F%}EC<_tAhmg_2DBGuBGaHqO zUO5&kAO3YLBw$S6_P%6t@dw$2=}VC$v4#{+O`tkNq!MTuWDd8cv95O0&VaX0AF)** zN=*xu!R`UXF1P~jH#v~#p801n%XiE@=S1?GDS|hgavD9gFZR+sTUvg^3sEfD%~BMJ Qx7c+N7i_@% literal 0 HcmV?d00001 diff --git a/content/curated_images/volume@2x.jpg b/content/curated_images/volume@2x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddd5360940619f5550b7ce4d90f035d0f35beee0 GIT binary patch literal 58679 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 literal 0 HcmV?d00001 From dbeb8edd4a94cab93d1031053700c6dc497cd0d3 Mon Sep 17 00:00:00 2001 From: Filip Visnjic Date: Fri, 4 Oct 2019 13:35:48 +0100 Subject: [PATCH 134/299] small edit --- content/curated.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/content/curated.xml b/content/curated.xml index cfedf9e7d..87029364a 100755 --- a/content/curated.xml +++ b/content/curated.xml @@ -293,7 +293,6 @@ http://markmckeague.com/work/city-symphonies/ Mark McKeague - More on CreativeApplications.Net @@ -303,7 +302,6 @@ http://www.flickr.com/photos/kennethaleksander/sets/72157629659743887 Flick Page - CreativeApplications.Net @@ -322,7 +320,6 @@ http://www.the-product.org/soundmachines The Product - CreativeApplications.Net From b90917f1769a9ffa5e68fe1a1f5768eee3d59d85 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 7 Oct 2019 10:00:40 -0400 Subject: [PATCH 135/299] Add Nice Color Palettes library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 521d688e0..a58674ab9 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 246 +# Next ID: 247 # Increment after assigning ID to new contribution [Library : 3D] @@ -250,6 +250,7 @@ 235 \ https://www.barkmin.eu/processing-library-scratch/download/scratch.txt 240 \ https://commonpike.github.io/nl.kw.processing.portmods/dist/PortMods.txt 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt +246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From d24e06d017965f4dd26f4160eb82a075551ae0ef Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 14 Oct 2019 15:08:59 -0400 Subject: [PATCH 136/299] Add Image Sequence Player library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index a58674ab9..9a990f426 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 247 +# Next ID: 248 # Increment after assigning ID to new contribution [Library : 3D] @@ -163,6 +163,7 @@ 229 \ https://github.com/Shinhoo/Wooting-Keyboard-Library/releases/download/lastest/WootingKeyboard.txt 232 \ https://github.com/haschdl/pLaunchController/releases/download/latest/pLaunchController.txt 239 \ http://skweezee.net/processing/download/SkweezeeForProcessing.txt +247 \ https://github.com/orgicus/image-sequence-player/releases/download/latest/ImageSequencePlayer.txt [Library : Language] 063 \ http://rednoise.org/rita/rita.txt From 0d71ab09f13095730a3111ae9b00945a96963b33 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Thu, 14 Nov 2019 22:01:05 -0500 Subject: [PATCH 137/299] Add RunwayML library. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 9a990f426..7b52ca617 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 248 +# Next ID: 249 # Increment after assigning ID to new contribution [Library : 3D] @@ -76,6 +76,7 @@ 229 \ https://github.com/Shinhoo/Wooting-Keyboard-Library/releases/download/lastest/WootingKeyboard.txt 230 \ https://github.com/cansik/artnet4j/releases/download/latest/artnet4j.txt 241 \ http://agathelenclen.fr/downloads/Squarify.txt +248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt [Library : Fabrication] # 078 \ http://s373.net/code/marchingcubes/download/marchingcubes.txt @@ -252,6 +253,7 @@ 240 \ https://commonpike.github.io/nl.kw.processing.portmods/dist/PortMods.txt 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt 246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt +248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 0f8f9eb39b30fb724bd6a47f3cf351761565df21 Mon Sep 17 00:00:00 2001 From: REAS Date: Sat, 16 Nov 2019 08:15:11 -0800 Subject: [PATCH 138/299] Update for Data tutorial --- content/static/tutorials/data/index.html | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/content/static/tutorials/data/index.html b/content/static/tutorials/data/index.html index 40e99a6f9..e69e99529 100644 --- a/content/static/tutorials/data/index.html +++ b/content/static/tutorials/data/index.html @@ -1404,6 +1404,34 @@

    Threads

    JSONObject json = loadJSONObject("http://time.jsontest.com/"); time = json.getString("time"); } + + +class Timer { + + int savedTime; + boolean running = false; + int totalTime; + + Timer(int tempTotalTime) { + totalTime = tempTotalTime; + } + + void start() { + running = true; + savedTime = millis(); + } + + boolean isFinished() { + int passedTime = millis() - savedTime; + if (running && passedTime > totalTime) { + running = false; + return true; + } else { + return false; + } + } + +}

    APIs

    From 9af62ed0c19ce8b2fa1d672a4e1e36c4a3f4f5fb Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 22 Nov 2019 12:02:02 -0800 Subject: [PATCH 139/299] Create README.md --- generate/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 generate/README.md diff --git a/generate/README.md b/generate/README.md new file mode 100644 index 000000000..aea00c156 --- /dev/null +++ b/generate/README.md @@ -0,0 +1 @@ +To come... From 9f1f7d9b0f450cb3be5b2f1e01830dc6f0ef893f Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 22 Nov 2019 12:16:38 -0800 Subject: [PATCH 140/299] Update README.md --- generate/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/generate/README.md b/generate/README.md index aea00c156..9f0c90609 100644 --- a/generate/README.md +++ b/generate/README.md @@ -1 +1,9 @@ -To come... +These are the scripts that generate most of the the processing.org website and Reference that's included with the Processing software. The language Reference scripts are in the ../java_generate/ folder and that's another thing... + +The generator scripts are written in PHP using an old version of DOMIT: https://sourceforge.net/projects/domit-xmlparser/ + +The files that are appened with "local" generate alternate versions of those pages for the Reference that comes included with the Processing software. + +This directory also contains the files to generate the "keywords.txt" file that controls the syntax highlighting for the Processing Development Environment (PDE). The Perl script "keywords_create.cgi" generates this file by combining "keywords_base.txt" with the Reference XML files. + +The data used to generate the site pages are in the ../content/ directory. From 83091507b74c51ff5510f7dfdc7e18fb756aacbd Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 22 Nov 2019 12:18:23 -0800 Subject: [PATCH 141/299] Update README.md --- generate/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/generate/README.md b/generate/README.md index 9f0c90609..e38655a77 100644 --- a/generate/README.md +++ b/generate/README.md @@ -1,8 +1,8 @@ -These are the scripts that generate most of the the processing.org website and Reference that's included with the Processing software. The language Reference scripts are in the ../java_generate/ folder and that's another thing... +These are the scripts that generate most of the the processing.org website and Reference that's included with the Processing software. The language Reference scripts are in the ../java_generate/ directory and that's a whole other thing... The generator scripts are written in PHP using an old version of DOMIT: https://sourceforge.net/projects/domit-xmlparser/ -The files that are appened with "local" generate alternate versions of those pages for the Reference that comes included with the Processing software. +The files that are appended with "local" generate alternate versions of those pages for the Reference that comes included with the Processing software. This directory also contains the files to generate the "keywords.txt" file that controls the syntax highlighting for the Processing Development Environment (PDE). The Perl script "keywords_create.cgi" generates this file by combining "keywords_base.txt" with the Reference XML files. From a8c2aa3adbc48c72611e63e9c3895ff38e7745bc Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 14:44:52 -0800 Subject: [PATCH 142/299] Homepage update for PCD 2020 --- generate/index.php | 11 +++++++---- templates/template.cover.html | 33 +++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/generate/index.php b/generate/index.php index 62a281526..d907d26aa 100755 --- a/generate/index.php +++ b/generate/index.php @@ -23,6 +23,7 @@

    Hello, this is a notice!

    + @@ -99,10 +100,12 @@

    +

    Contributions diff --git a/templates/template.cover.html b/templates/template.cover.html index 56d113e50..ae6f9ef60 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,5 +1,14 @@

    +
    +

    + Processing Community Day 2020
    +
    + The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
    +
    +

    +
    +

    Welcome to Processing 3! Dan explains the new features and changes; the links Dan mentions are on the Vimeo page.

    @@ -9,7 +18,6 @@ Visit the Reference
    -

    Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping. @@ -30,13 +38,15 @@

    Books

    - The 2nd edition of Getting Started with Processing is here and it's updated for Processing 3. It's now in full color and there's a new chapter on working with data. The 2nd edition of the Processing Handbook is here too. Every chapter has been revised, and new chapters introduce more ways to work with data and geometry. New “synthesis” chapters offer discussion and worked examples of such topics as sketching with code, modularity, and algorithms.
    + The second edition of Getting Started with Processing is here and it's updated for Processing 3. It's now in full color and there's a new chapter on working with data. The Processing Handbook now has a second edition too. Every chapter has been revised, and new chapters introduce more ways to work with data and geometry. New “synthesis” chapters offer discussions and worked examples of topics such as sketching with code, modularity, and algorithms.

    Processing Books

    + +

    Donate

    - Please join us as a member of the Processing Foundation. We need your help! + Please support the Processing Foundation. We need your help!

    To see more of what people are doing with Processing, check out these sites:

    -

    » CreativeApplications.Net
    - » OpenProcessing
    - » For Your Processing
    - » Processing Subreddit
    - » Vimeo
    - » Studio Sketchpad
    +

    + » CreativeApplications.Net
    + » OpenProcessing
    + » For Your Processing
    + » Processing Subreddit
    + » Vimeo
    + » Studio Sketchpad

    @@ -78,7 +91,7 @@

    Donate

    Partners
    - » Fathom
    + » Fathom
    » NYU ITP
    » UCLA Design Media Arts

    From 97c2a785edc4b9b47521c5feb84b7fbb4a124bc8 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 14:48:18 -0800 Subject: [PATCH 143/299] Formatting update for homepage --- templates/template.cover.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index ae6f9ef60..132712dfe 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,6 +1,6 @@
    -
    +

    Processing Community Day 2020

    From f8f70458b072516eb88a205b3a286581bda74e0d Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 14:54:37 -0800 Subject: [PATCH 144/299] Formatting update for homepage --- templates/template.cover.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index 132712dfe..858ed3813 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,12 +1,10 @@

    -
    -

    - Processing Community Day 2020
    -
    - The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
    -
    -

    +
    + Processing Community Day 2020
    +
    + The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
    +
    From 499713d65eac3bbcad84a24286b07922b0353387 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:00:51 -0800 Subject: [PATCH 145/299] Formatting update for homepage --- templates/template.cover.html | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index 858ed3813..09e61f3d8 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,36 +1,38 @@
    - Processing Community Day 2020
    + PCD 2020

    The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!

    - -

    - Welcome to Processing 3! Dan explains the new features and changes; the links Dan mentions are on the Vimeo page.

    - - Download Processing
    - Browse Tutorials
    - Visit the Reference
    -

    Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.

      -
    • » Free to download and open source
    • -
    • » Interactive programs with 2D, 3D, PDF, or SVG output
    • -
    • » OpenGL integration for accelerated 2D and 3D
    • -
    • » For GNU/Linux, Mac OS X, Windows, Android, and ARM
    • -
    • » Over 100 libraries extend the core software
    • -
    • » Well documented, with many books available
    • +
    • » Free to download and open source
    • +
    • » Interactive programs with 2D, 3D, PDF, or SVG output
    • +
    • » OpenGL integration for accelerated 2D and 3D
    • +
    • » For GNU/Linux, Mac OS X, Windows, Android, and ARM
    • +
    • » Over 100 libraries extend the core software
    • +
    • » Well documented, with many books available

    + + +

    From 96d5e0a02f8ee76291535af5088ce9d86dbb279d Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:07:31 -0800 Subject: [PATCH 146/299] Formatting update for homepage --- templates/template.cover.html | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index 09e61f3d8..e8f0ed729 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,14 +1,24 @@

    - PCD 2020
    + PCD @ Worldwide 2020

    The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!

    +
    + Fellowships 2020
    +
    + The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
    +
    +
    +

    + Download Processing
    +
    + Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.

      @@ -79,8 +89,8 @@

      Donate

      » Studio Sketchpad

      -

      - To contribute to the development, please visit +

      + To contribute to Processing development, please visit Processing on GitHub to read instructions for downloading the code, building from the source, From 16d4f2a2e3dadafe4686afafffa81462fe6eac90 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:15:18 -0800 Subject: [PATCH 147/299] Formatting update for homepage --- templates/template.cover.html | 41 ++++++++++++++--------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index e8f0ed729..a5c5b94a2 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,36 +1,29 @@

      - PCD @ Worldwide 2020
      -
      + PCD @ Worldwide 2020
      The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!

      - Fellowships 2020
      -
      - The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
      + Fellowships 2020
      + The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!

      -

      - Download Processing
      + Download Processing
      + Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping. +

        +
      • » Free to download and open source
      • +
      • » Interactive programs with 2D, 3D, PDF, or SVG output
      • +
      • » OpenGL integration for accelerated 2D and 3D
      • +
      • » For GNU/Linux, Mac OS X, Windows, Android, and ARM
      • +
      • » Over 100 libraries extend the core software
      • +
      • » Well documented, with many books available
      • +

      - - Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping. - -
        -
      • » Free to download and open source
      • -
      • » Interactive programs with 2D, 3D, PDF, or SVG output
      • -
      • » OpenGL integration for accelerated 2D and 3D
      • -
      • » For GNU/Linux, Mac OS X, Windows, Android, and ARM
      • -
      • » Over 100 libraries extend the core software
      • -
      • » Well documented, with many books available
      • -
      -
      -

      @@ -78,9 +71,8 @@

      Donate

      Please support the Processing Foundation. We need your help!
      -

      To see more of what people are doing with Processing, check out these sites:

      - -

      +

      + To see more of what people are doing with Processing, check out these sites:
      » CreativeApplications.Net
      » OpenProcessing
      » For Your Processing
      @@ -96,11 +88,10 @@

      Donate

      building from the source, reporting and tracking bugs, and creating libraries and tools.

      -

      -

      Partners
      + Partners
      » Fathom
      » NYU ITP
      » UCLA Design Media Arts From 6fb0b3eea259dff2863cccbdeeefb426ad08864a Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:24:45 -0800 Subject: [PATCH 148/299] Formatting update for homepage --- templates/template.cover.html | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index a5c5b94a2..bc31a169c 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -2,18 +2,21 @@
      PCD @ Worldwide 2020
      - The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
      +
      + The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!

      Fellowships 2020
      - The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
      +
      + The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!

      - Download Processing
      + Download Processing
      +
      Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.
      • » Free to download and open source
      • @@ -81,7 +84,7 @@

        Donate

        » Studio Sketchpad

        -

        +

        To contribute to Processing development, please visit Processing on GitHub to read instructions for downloading the code, @@ -91,7 +94,7 @@

        Donate

        - Partners
        +

        Partners
        » Fathom
        » NYU ITP
        » UCLA Design Media Arts From bc9758a0ccbbe79fec8eecab9bafb9b6af2f3085 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:31:24 -0800 Subject: [PATCH 149/299] Formatting update for homepage --- templates/template.cover.html | 44 ++++++++++++++++------------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index bc31a169c..2d7d3704f 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -1,22 +1,14 @@
        -
        - PCD @ Worldwide 2020
        -
        - The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
        -
        -
        + +

        + Welcome to Processing 3! Dan explains the new features and changes; the links Dan mentions are on the Vimeo page.

        -
        - Fellowships 2020
        -
        - The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
        -
        -
        + Download Processing
        + Browse Tutorials
        + Visit the Reference
        - Download Processing
        -
        Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.
        • » Free to download and open source
        • @@ -29,16 +21,6 @@
        - - -

        @@ -74,6 +56,20 @@

        Donate

        Please support the Processing Foundation. We need your help!
        +
        + PCD 2020
        +
        + The Processing Community Day (PCD) initiative is evolving. For 2020, we will offer a mentorship program for PCD Worldwide Organizers who are interested in learning from past community organizers and mentors. The goal is to help a diverse group of organizers launch a PCD in their local communities. Check out the PCD @ Worldwide site to learn more about starting or attending an event in 2020!
        +
        +
        + +
        + Fellowships
        +
        + The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
        +
        +
        +

        To see more of what people are doing with Processing, check out these sites:
        » CreativeApplications.Net
        From ff7acad842bb1166e5b8e3643885b55be544fda5 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:34:37 -0800 Subject: [PATCH 150/299] Formatting update for homepage --- templates/template.cover.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index 2d7d3704f..e7be17bbf 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -9,6 +9,7 @@ Visit the Reference

        +

        Processing is a flexible software sketchbook and a language for learning how to code within the context of the visual arts. Since 2001, Processing has promoted software literacy within the visual arts and visual literacy within technology. There are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning and prototyping.

        • » Free to download and open source
        • @@ -18,11 +19,10 @@
        • » Over 100 libraries extend the core software
        • » Well documented, with many books available
        -
        +

        -

        Books

        @@ -64,10 +64,8 @@

        Donate

        - Fellowships
        -
        + Fellowships
        The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
        -

        From f4aa9f1fa42cdfd62c03c77565672bfa6e41549f Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:37:44 -0800 Subject: [PATCH 151/299] Formatting update for homepage --- templates/template.cover.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index e7be17bbf..c982bb10c 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -64,8 +64,9 @@

        Donate

        - Fellowships
        - The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019,11:59PM PST. Apply here!
        + Fellowships
        +
        + The Processing Foundation is currently accepting applications for the 2020 Fellowship Program. With this open call, the Processing Foundation celebrates its Fellowship Program’s fifth year of supporting members of our community in projects that converge and expand the fields of art, technology, education, and activism. The deadline is Thursday, December 19, 2019, 11:59PM PST. Apply here!

        From ab78f524c6c2bd3731f9f547b8fe44ffeec254c4 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 15:42:49 -0800 Subject: [PATCH 152/299] Update the People page --- content/static/people.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/content/static/people.html b/content/static/people.html index fb88b37c2..ddaa1f6c9 100755 --- a/content/static/people.html +++ b/content/static/people.html @@ -6,7 +6,7 @@

        People. Processing is a comm

        - Lead Developers
        + Project Leads
        Ben Fry and Casey Reas started Processing in Spring 2001 and continue to obsessively work on it. In 2012, they started the Processing Foundation along with Dan Shiffman, who formally joined as a third project lead.

        @@ -14,17 +14,12 @@

        People. Processing is a comm

        Senior Developers
        Andres Colubri (Boston), OpenGL / Video
        - Gottfried Haider (Los Angeles), Processing for Pi
        - Florian Jenett (Frankfurt), Forum
        Elie Zananiri (Montreal), Contributed Libraries / Tools
        - Scott Murray (San Francisco), Website / Reference / UI

        -

        + From e6aee06ea0e87e9f2fd95b0175d8dae14847757f Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 22 Nov 2019 19:38:36 -0800 Subject: [PATCH 157/299] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31485680e..bb8407cdb 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ If you have found an error in the Processing reference, examples, tutorials, or The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.) -###How to build the Javadoc +### How to build the Javadoc In "build" in the Processing respository type "ant doc" From d7ed7a75d317968e9c30d0f52bd10a85d4ab084c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 22 Nov 2019 20:25:05 -0800 Subject: [PATCH 158/299] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bb8407cdb..9d7851a31 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@ If you have found an error in the Processing reference, examples, tutorials, or The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.) ### How to build the Javadoc -In "build" in the Processing respository type "ant doc" + +1) In "build" in the "processing" repo, type "ant doc" +2) Copy the three generated folders to the "processing-javadocs" repo +3) Push changes From 5f08e9392a40fa078d483cdc3d9893135aa4e974 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 22 Nov 2019 20:51:36 -0800 Subject: [PATCH 159/299] CSS Updates for Environment and Tutorials --- css/style.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 2b67a77ea..a7cb371b2 100755 --- a/css/style.css +++ b/css/style.css @@ -1026,6 +1026,7 @@ h2 { margin-bottom: 0; margin-top: 0;} background-color: #eee; } +/* #Tutorials p.txt { margin-top: 0em; margin-bottom: 2em; @@ -1033,6 +1034,7 @@ h2 { margin-bottom: 0; margin-top: 0;} font-weight: normal; line-height: 200%; } +*/ /************************************************************** Books ***/ @@ -1173,7 +1175,7 @@ h2 { margin-bottom: 0; margin-top: 0;} #Environment h5 a { float: left; margin-left: -30px; } ul.nostyle { margin: 0; padding: 0; list-style: none outside; } #Environment td { padding-bottom: 1em; } -#Environment .content p, +/*#Environment .content p,*/ #Environment .content ul, #Environment .content table { width: 560px; From 712bf435df35724e965210cd81ce7e58675512ea Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Sat, 23 Nov 2019 18:02:02 -0800 Subject: [PATCH 160/299] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 9d7851a31..c0183179c 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,4 @@ If you have found an error in the Processing reference, examples, tutorials, or The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.) -### How to build the Javadoc - -1) In "build" in the "processing" repo, type "ant doc" -2) Copy the three generated folders to the "processing-javadocs" repo -3) Push changes - From 09a74fc8afbaf096952cf7c025b5fc4714063804 Mon Sep 17 00:00:00 2001 From: REAS Date: Mon, 25 Nov 2019 12:36:17 -0800 Subject: [PATCH 161/299] Update to People page, add Sam --- content/static/people.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/static/people.html b/content/static/people.html index 6973a586e..d406b648c 100755 --- a/content/static/people.html +++ b/content/static/people.html @@ -12,9 +12,10 @@

        People. Processing is a comm

        - Senior Developers
        - Andres Colubri (Boston), OpenGL / Video
        - Elie Zananiri (Montreal), Contributed Libraries / Tools
        + Developers
        + Andres Colubri (Boston), OpenGL / Video
        + Elie Zananiri (New York), Contributed Libraries / Tools
        + Samuel Pottinger (San Francisco), Processing Core

        header
        From 4ce81aea30513ea35517f5101ba04d4d2172fb75 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:06:26 -0800 Subject: [PATCH 163/299] Donate banner for site header --- css/style.css | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index fb9a8a2ec..7d4f85959 100755 --- a/css/style.css +++ b/css/style.css @@ -150,13 +150,13 @@ a.large-link:before { background: linear-gradient(to bottom, #1d517e, #d1f94e); } -#ribbon ul { +#ribbon #ribbon-announce ul { display: inline-block; margin: 0; padding: 0; } -#ribbon ul.left { +#ribbon #ribbon-announce ul.left { float: left; } @@ -168,7 +168,7 @@ a.large-link:before { float: right; } -#ribbon ul li { +#ribbon #ribbon-announce ul li { display: inline-block; margin: 0; padding: 6px 10px 5px 10px; @@ -177,7 +177,7 @@ a.large-link:before { background-color: rgba(0, 0, 0, 0.12); } -#ribbon ul.left li { +#ribbon #ribbon-announce ul.left li { float: left; border-right: 1px solid #1a1a1a; } @@ -198,16 +198,16 @@ a.large-link:before { font-weight: bold; } -#ribbon ul li a { +#ribbon #ribbon-announce ul li a { color: #b2b2b2; } -#ribbon ul li.highlight { +#ribbon #ribbon-announce ul li.highlight { background-color: black; border-right: none; } -#ribbon ul li.highlight a { +#ribbon #ribbon-announce ul li.highlight a { color: white; font-weight: bold; } From 307efd855c6621a5f8f7c858834d3f3c90a7c114 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:08:41 -0800 Subject: [PATCH 164/299] Donate banner for site header --- css/style.css | 52 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index 7d4f85959..88ec582bd 100755 --- a/css/style.css +++ b/css/style.css @@ -150,13 +150,23 @@ a.large-link:before { background: linear-gradient(to bottom, #1d517e, #d1f94e); } -#ribbon #ribbon-announce ul { +#ribbon ul { display: inline-block; margin: 0; padding: 0; } -#ribbon #ribbon-announce ul.left { +#ribbon ul.left { + float: left; +} + +#ribbon-announce ul { + display: inline-block; + margin: 0; + padding: 0; +} + +#ribbon-announce ul.left { float: left; } @@ -168,7 +178,16 @@ a.large-link:before { float: right; } -#ribbon #ribbon-announce ul li { +#ribbon ul li { + display: inline-block; + margin: 0; + padding: 6px 10px 5px 10px; + list-style: none; + background-color: transparent; + background-color: rgba(0, 0, 0, 0.12); +} + +#ribbon-announce ul li { display: inline-block; margin: 0; padding: 6px 10px 5px 10px; @@ -177,7 +196,12 @@ a.large-link:before { background-color: rgba(0, 0, 0, 0.12); } -#ribbon #ribbon-announce ul.left li { +#ribbon ul.left li { + float: left; + border-right: 1px solid #1a1a1a; +} + +#ribbon-announce ul.left li { float: left; border-right: 1px solid #1a1a1a; } @@ -198,16 +222,30 @@ a.large-link:before { font-weight: bold; } -#ribbon #ribbon-announce ul li a { +#ribbon ul li a { + color: #b2b2b2; +} + +#ribbon ul li.highlight { + background-color: black; + border-right: none; +} + +#ribbon ul li.highlight a { + color: white; + font-weight: bold; +} + +#ribbon-announce ul li a { color: #b2b2b2; } -#ribbon #ribbon-announce ul li.highlight { +#ribbon-announce ul li.highlight { background-color: black; border-right: none; } -#ribbon #ribbon-announce ul li.highlight a { +#ribbon-announce ul li.highlight a { color: white; font-weight: bold; } From 05f2972b2a23962b39538a03d5f02db807ccd58c Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:12:08 -0800 Subject: [PATCH 165/299] Donate banner for site header --- css/style.css | 19 +++++++------------ templates/template.html | 2 +- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/css/style.css b/css/style.css index 88ec582bd..5b2ef205e 100755 --- a/css/style.css +++ b/css/style.css @@ -201,8 +201,8 @@ a.large-link:before { border-right: 1px solid #1a1a1a; } -#ribbon-announce ul.left li { - float: left; +#ribbon-announce ul.center li { + float: center; border-right: 1px solid #1a1a1a; } @@ -226,6 +226,11 @@ a.large-link:before { color: #b2b2b2; } +#ribbon-announce ul li a { + color: white; + font-weight: bold; +} + #ribbon ul li.highlight { background-color: black; border-right: none; @@ -240,16 +245,6 @@ a.large-link:before { color: #b2b2b2; } -#ribbon-announce ul li.highlight { - background-color: black; - border-right: none; -} - -#ribbon-announce ul li.highlight a { - color: white; - font-weight: bold; -} - /* ================ HEADER ================== */ diff --git a/templates/template.html b/templates/template.html index d21dd6ba6..fe99f4645 100755 --- a/templates/template.html +++ b/templates/template.html @@ -35,7 +35,7 @@

      -
        +
        From c4b8505a19bccaabc2809d6163dda661b27e56ed Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:17:36 -0800 Subject: [PATCH 166/299] Donate banner for site header --- css/style.css | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index 5b2ef205e..387ba577f 100755 --- a/css/style.css +++ b/css/style.css @@ -166,8 +166,8 @@ a.large-link:before { padding: 0; } -#ribbon-announce ul.left { - float: left; +#ribbon-announce ul.center { + float: center; } #ribbon ul.right { @@ -203,7 +203,6 @@ a.large-link:before { #ribbon-announce ul.center li { float: center; - border-right: 1px solid #1a1a1a; } #ribbon ul.right li { @@ -241,10 +240,6 @@ a.large-link:before { font-weight: bold; } -#ribbon-announce ul li a { - color: #b2b2b2; -} - /* ================ HEADER ================== */ From a1487dd246a087a427440df1fe06f9e0fe74612e Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:22:54 -0800 Subject: [PATCH 167/299] Donate banner for site header --- css/style.css | 68 +++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/css/style.css b/css/style.css index 387ba577f..4114631e4 100755 --- a/css/style.css +++ b/css/style.css @@ -143,13 +143,6 @@ a.large-link:before { background: linear-gradient(to bottom, #003b6e, #1d517e); } -#ribbon-announce { - width: 900px; - height: auto; - background-color: #d1f94e; - background: linear-gradient(to bottom, #1d517e, #d1f94e); -} - #ribbon ul { display: inline-block; margin: 0; @@ -160,16 +153,6 @@ a.large-link:before { float: left; } -#ribbon-announce ul { - display: inline-block; - margin: 0; - padding: 0; -} - -#ribbon-announce ul.center { - float: center; -} - #ribbon ul.right { float: right; } @@ -187,23 +170,12 @@ a.large-link:before { background-color: rgba(0, 0, 0, 0.12); } -#ribbon-announce ul li { - display: inline-block; - margin: 0; - padding: 6px 10px 5px 10px; - list-style: none; - background-color: transparent; - background-color: rgba(0, 0, 0, 0.12); -} - #ribbon ul.left li { float: left; border-right: 1px solid #1a1a1a; } -#ribbon-announce ul.center li { - float: center; -} + #ribbon ul.right li { float: right; @@ -225,11 +197,6 @@ a.large-link:before { color: #b2b2b2; } -#ribbon-announce ul li a { - color: white; - font-weight: bold; -} - #ribbon ul li.highlight { background-color: black; border-right: none; @@ -240,6 +207,39 @@ a.large-link:before { font-weight: bold; } +#ribbon-announce { + width: 900px; + height: auto; + background-color: #d1f94e; + background: linear-gradient(to bottom, #1d517e, #d1f94e); +} + +#ribbon-announce ul { + display: inline-block; + margin: 0; + padding: 0; +} + +#ribbon-announce ul.center { + float: center; +} + +#ribbon-announce ul li { + display: inline-block; + margin: 0; + padding: 6px 10px 5px 10px; + list-style: none; +} + +#ribbon-announce ul.center li { + float: center; +} + +#ribbon-announce ul li a { + color: white; + font-weight: bold; +} + /* ================ HEADER ================== */ From 6f556dceacaf870cf58ee3d5522fc158a3677a2a Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 18:24:19 -0800 Subject: [PATCH 168/299] Donate banner for site header --- css/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/css/style.css b/css/style.css index 4114631e4..3c32cf6e7 100755 --- a/css/style.css +++ b/css/style.css @@ -76,6 +76,7 @@ body { img { border: 0px solid #000000; } a { + cursor: pointer; text-decoration: none; font-weight: normal; color: #2c7bb5; From 96c9a76d591d9607f6cc290fb22df3944b790967 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 20:57:39 -0800 Subject: [PATCH 169/299] Update banner for site header --- css/style.css | 1 + templates/template.cover.html | 7 ++++++- templates/template.nav.php | 3 ++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/css/style.css b/css/style.css index 3c32cf6e7..0000cc4b6 100755 --- a/css/style.css +++ b/css/style.css @@ -138,6 +138,7 @@ a.large-link:before { /* ================ RIBBON ================== */ #ribbon { + text-align: center; width: 900px; height: auto; background-color: #1d517e; diff --git a/templates/template.cover.html b/templates/template.cover.html index c982bb10c..da386fe1d 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -51,9 +51,14 @@
        » Github
        -
        + + +
        +

        Donate

        + #SupportPF2019 is a month-long online fundraising campaign to support and help sustain our software projects (Processing, p5.js, Processing.py, Processing for Pi, and Processing for Android), the Fellowship program, Processing Community Day, and our numerous education initiatives including our education portal. Please visit our Medium publication to learn more about this campaign.
        diff --git a/templates/template.nav.php b/templates/template.nav.php index 4f5574369..ba4dcd191 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -23,7 +23,8 @@ 'Environment' => array('/reference/environment/', 2), 'Download' => array('/download/', 1), - 'Donate' => array('/download/support.html', 1), + #'Donate' => array('/download/support.html', 1), + 'Donate' => array('https://donorbox.org/supportpf2019-fundraising-campaign', 1), 'Shop' => array('/shop/', 1), From 3a799ff2960491f9cc41a2b48ca2f36cbac3cb14 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 20:59:01 -0800 Subject: [PATCH 170/299] Update banner for site header --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 0000cc4b6..9fd2c7cdd 100755 --- a/css/style.css +++ b/css/style.css @@ -138,7 +138,6 @@ a.large-link:before { /* ================ RIBBON ================== */ #ribbon { - text-align: center; width: 900px; height: auto; background-color: #1d517e; @@ -210,6 +209,7 @@ a.large-link:before { } #ribbon-announce { + text-align: center; width: 900px; height: auto; background-color: #d1f94e; From 87208e3b5edca0d19ae3085eabd3cad0b352c606 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 21:03:11 -0800 Subject: [PATCH 171/299] Update banner for site header --- templates/template.cover.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index da386fe1d..1976a981e 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -58,7 +58,7 @@

        Donate

        Donate

        - #SupportPF2019 is a month-long online fundraising campaign to support and help sustain our software projects (Processing, p5.js, Processing.py, Processing for Pi, and Processing for Android), the Fellowship program, Processing Community Day, and our numerous education initiatives including our education portal. Please visit our Medium publication to learn more about this campaign. + #SupportPF is a month-long online fundraising campaign to support and help sustain our software projects (Processing, p5.js, Processing.py, Processing for Pi, and Processing for Android), the Fellowship program, Processing Community Day, and our numerous education initiatives including our education portal. Please visit our Medium publication to learn more about this campaign.
        From 8464e814beb968f3a2116f3273ca1c9a957b4ffb Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 3 Dec 2019 21:12:45 -0800 Subject: [PATCH 172/299] Reference page tempates for holiday giving --- java_generate/templates/class.template.html | 6 ++++++ java_generate/templates/generic.template.html | 6 ++++++ java_generate/templates/index.alphabetical.template.html | 6 ++++++ java_generate/templates/index.template.html | 6 ++++++ java_generate/templates/library.index.template.html | 6 ++++++ java_generate/templates/nav.web.template.html | 2 +- 6 files changed, 31 insertions(+), 1 deletion(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 3d715adf9..cf82291e0 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -36,6 +36,12 @@
      +
    + + + + From 52b601f018c304724e8dfa65279623759ce24f51 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 5 Dec 2019 13:15:21 -0800 Subject: [PATCH 174/299] Move header ribbon to bottom --- templates/template.html | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/templates/template.html b/templates/template.html index baa6c799c..fa336d617 100755 --- a/templates/template.html +++ b/templates/template.html @@ -56,20 +56,20 @@ © Info
    -
    +
    From fdae46dbdeb97ad3ba0c44e2c0cd0c0609501c6c Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 5 Dec 2019 13:16:29 -0800 Subject: [PATCH 175/299] Move header ribbon to bottom --- templates/template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/template.html b/templates/template.html index fa336d617..689b91897 100755 --- a/templates/template.html +++ b/templates/template.html @@ -23,7 +23,7 @@ From 0caf090f8b16325353bc5ab8a62630b67491fce5 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 5 Dec 2019 13:19:37 -0800 Subject: [PATCH 176/299] Move header ribbon to bottom for Reference --- java_generate/templates/class.template.html | 12 ++++++------ java_generate/templates/generic.template.html | 12 ++++++------ .../templates/index.alphabetical.template.html | 12 ++++++------ java_generate/templates/index.template.html | 12 ++++++------ java_generate/templates/library.index.template.html | 13 ++++++------- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index cf82291e0..33fc6ed63 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -36,12 +36,6 @@
    -
    +
    diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 409ecb8c4..a4328a0d9 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -37,12 +37,6 @@
    -
    +
    diff --git a/java_generate/templates/index.alphabetical.template.html b/java_generate/templates/index.alphabetical.template.html index 67b991854..f6a105a2a 100644 --- a/java_generate/templates/index.alphabetical.template.html +++ b/java_generate/templates/index.alphabetical.template.html @@ -35,12 +35,6 @@
    - + diff --git a/java_generate/templates/index.template.html b/java_generate/templates/index.template.html index 38823b4ac..192c6bc8a 100644 --- a/java_generate/templates/index.template.html +++ b/java_generate/templates/index.template.html @@ -34,12 +34,6 @@
    - + diff --git a/java_generate/templates/library.index.template.html b/java_generate/templates/library.index.template.html index eeec63b96..11a6537be 100644 --- a/java_generate/templates/library.index.template.html +++ b/java_generate/templates/library.index.template.html @@ -36,12 +36,6 @@
    - - + From 971a79c2f5d5e649e25f57e305b5644c3ed9ea50 Mon Sep 17 00:00:00 2001 From: REAS Date: Thu, 5 Dec 2019 13:23:21 -0800 Subject: [PATCH 177/299] Move header ribbon to bottom for Reference --- java_generate/templates/class.template.html | 26 ++++++++-------- java_generate/templates/generic.template.html | 31 +++++++++---------- .../index.alphabetical.template.html | 26 ++++++++-------- java_generate/templates/index.template.html | 26 ++++++++-------- .../templates/library.index.template.html | 29 ++++++++--------- 5 files changed, 69 insertions(+), 69 deletions(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 33fc6ed63..247aa1874 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -23,16 +23,9 @@ - -
    -
    - diff --git a/java_generate/templates/index.alphabetical.template.html b/java_generate/templates/index.alphabetical.template.html index f6a105a2a..a8760a637 100644 --- a/java_generate/templates/index.alphabetical.template.html +++ b/java_generate/templates/index.alphabetical.template.html @@ -22,16 +22,9 @@ - -
    -
    From 73b5ebfc0ccacaa97f1cacd3ae463d3e844609bf Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 6 Dec 2019 12:46:24 -0800 Subject: [PATCH 178/299] Move Donate ribbon below header --- templates/template.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/template.html b/templates/template.html index 689b91897..797b03d0e 100755 --- a/templates/template.html +++ b/templates/template.html @@ -21,12 +21,6 @@
    - + From 43cdc9464f5b787a44eba5847c73878d6d8c9150 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 6 Dec 2019 12:48:52 -0800 Subject: [PATCH 179/299] CSS adjustment for donate ribbon below header --- css/style.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 9fd2c7cdd..8c1005a91 100755 --- a/css/style.css +++ b/css/style.css @@ -214,6 +214,7 @@ a.large-link:before { height: auto; background-color: #d1f94e; background: linear-gradient(to bottom, #1d517e, #d1f94e); + margin-bottom: 0px; /* added when placed below the header */ } #ribbon-announce ul { @@ -248,7 +249,7 @@ a.large-link:before { #header { width: 900px; height: 106px; - margin-bottom: 30px; + margin-bottom: 0px; /* was 30px, but changed to 0 when ribbon placed below header */ overflow: hidden; background: #0c2033 url(../img/processing-web.png) center center no-repeat; background-position: bottom; From 8e87e2b24804613267ad704a69f017ae108b070a Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 6 Dec 2019 12:49:30 -0800 Subject: [PATCH 180/299] CSS adjustment for donate ribbon below header --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 8c1005a91..96d5d8e49 100755 --- a/css/style.css +++ b/css/style.css @@ -214,7 +214,7 @@ a.large-link:before { height: auto; background-color: #d1f94e; background: linear-gradient(to bottom, #1d517e, #d1f94e); - margin-bottom: 0px; /* added when placed below the header */ + margin-bottom: 30px; /* added when placed below the header */ } #ribbon-announce ul { From f87d5b18b1c78dd1301b468102b9c31dd7983e62 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 6 Dec 2019 12:53:06 -0800 Subject: [PATCH 181/299] Move Donate ribbon below header for Reference pages --- java_generate/templates/class.template.html | 12 ++++++------ java_generate/templates/generic.template.html | 12 ++++++------ .../templates/index.alphabetical.template.html | 12 ++++++------ java_generate/templates/index.template.html | 12 ++++++------ java_generate/templates/library.index.template.html | 12 ++++++------ 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 247aa1874..903e07337 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -23,12 +23,6 @@ - + diff --git a/java_generate/templates/index.template.html b/java_generate/templates/index.template.html index 47eda6268..e9215f46b 100644 --- a/java_generate/templates/index.template.html +++ b/java_generate/templates/index.template.html @@ -31,7 +31,7 @@
    diff --git a/java_generate/templates/library.index.template.html b/java_generate/templates/library.index.template.html index 8ad29c73d..2f15f76b9 100644 --- a/java_generate/templates/library.index.template.html +++ b/java_generate/templates/library.index.template.html @@ -33,7 +33,7 @@ From 5cdce6a12acb8b02de6b044450e15ffab6d1ca82 Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 6 Dec 2019 12:57:15 -0800 Subject: [PATCH 183/299] CSS change for reference to make the ref-notice more subtle --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 96d5d8e49..30628b06a 100755 --- a/css/style.css +++ b/css/style.css @@ -638,7 +638,7 @@ p.exhibition-nav { margin-top: 20px; margin-bottom: 10px; } margin-bottom: 20px; } -.ref-notice { margin: 0 0 2.5em 0; color: #FF3399; clear: both; margin-right: 40px;} +.ref-notice { margin: 0 0 2.5em 0; color: #666666; clear: both; margin-right: 40px;} .ref-item { margin-bottom: 60px; } .ref-item th { width: 100px; font-weight: bold; text-align: left; vertical-align: top; } From d8fbdf6e3a6c1d73dafdcc7b38d753c6a8d68f9f Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Fri, 13 Dec 2019 13:39:00 -0800 Subject: [PATCH 184/299] Add Rosetta Code example set --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 7b52ca617..6b485a4cc 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 249 +# Next ID: 250 # Increment after assigning ID to new contribution [Library : 3D] @@ -296,6 +296,7 @@ 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt 226 \ https://github.com/Apress/processing-for-android/releases/download/latest/processing-for-android-examples.txt 243 \ https://coding-creative.dringtech.com/examples/coding-creative-examples.txt +249 \ https://github.com/jeremydouglass/processing_rosetta_examples/releases/latest/download/processing_rosetta_examples.txt [Tool : ] 020 \ https://dl.dropboxusercontent.com/u/69944346/ColorSelectorPlus/ColorSelectorPlusTool.txt From 7b05c15ef5943e30146af7d445a2dad998185c7c Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 13 Dec 2019 21:24:19 -0800 Subject: [PATCH 185/299] Correction for Datatype Conversion example --- .../Basics/Data/DatatypeConversion/DatatypeConversion.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde b/content/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde index 1c2a398c9..ee7e74daf 100644 --- a/content/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde +++ b/content/examples/Basics/Data/DatatypeConversion/DatatypeConversion.pde @@ -16,7 +16,7 @@ textFont(createFont("SourceCodePro-Regular.ttf",24)); char c; // Chars are used for storing alphanumeric symbols float f; // Floats are decimal numbers int i; // Integers are values between 2,147,483,647 and -2147483648 -byte b; // Bytes are values between -128 and 128 +byte b; // Bytes are values between -128 and 127 c = 'A'; f = float(c); // Sets f = 65.0 From 673ef26f7210895081c06124ae2368b29783fc42 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Sun, 15 Dec 2019 08:26:05 -0500 Subject: [PATCH 186/299] Revert "Merge pull request #787 from jeremydouglass/patch-examples-rosetta-code" This reverts commit c8309ceca92227469c170b13884d911bc039babf, reversing changes made to 5cdce6a12acb8b02de6b044450e15ffab6d1ca82. --- contrib_generate/sources.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 6b485a4cc..7b52ca617 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 250 +# Next ID: 249 # Increment after assigning ID to new contribution [Library : 3D] @@ -296,7 +296,6 @@ 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt 226 \ https://github.com/Apress/processing-for-android/releases/download/latest/processing-for-android-examples.txt 243 \ https://coding-creative.dringtech.com/examples/coding-creative-examples.txt -249 \ https://github.com/jeremydouglass/processing_rosetta_examples/releases/latest/download/processing_rosetta_examples.txt [Tool : ] 020 \ https://dl.dropboxusercontent.com/u/69944346/ColorSelectorPlus/ColorSelectorPlusTool.txt From 76e49c2083722c43dea256c804ac50eacadab60d Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Sun, 15 Dec 2019 19:16:23 -0500 Subject: [PATCH 187/299] Adding Rosetta examples again, this time with new URL. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 7b52ca617..36caf8f44 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 249 +# Next ID: 250 # Increment after assigning ID to new contribution [Library : 3D] @@ -296,6 +296,7 @@ 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt 226 \ https://github.com/Apress/processing-for-android/releases/download/latest/processing-for-android-examples.txt 243 \ https://coding-creative.dringtech.com/examples/coding-creative-examples.txt +249 \ https://github.com/jeremydouglass/rosetta_examples_p5/releases/latest/download/rosetta_examples_p5.txt [Tool : ] 020 \ https://dl.dropboxusercontent.com/u/69944346/ColorSelectorPlus/ColorSelectorPlusTool.txt From 681906f826ea6e1c9faf6fb7905ffc9a93bb60bb Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Dec 2019 10:37:07 -0500 Subject: [PATCH 188/299] Better error message. --- contrib_generate/build_listing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/build_listing.py b/contrib_generate/build_listing.py index ee4dbd052..2c4a43b22 100755 --- a/contrib_generate/build_listing.py +++ b/contrib_generate/build_listing.py @@ -228,7 +228,7 @@ def missing_key(exports): key = missing_key(exports) if key: - print 'Error reading', prop_url + print 'Error missing key', prop_url print " No value for '%s'. Maybe it's a 404 page" % key continue # if no download is explicitly provided, use the default download url From 9087386eb057dcef942d266fdcc1edc31f328ba5 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Dec 2019 10:38:49 -0500 Subject: [PATCH 189/299] Update Syphon URL. --- contrib_generate/sources.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 36caf8f44..3062896e8 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -264,7 +264,7 @@ 150 \ https://github.com/processing/processing-video/releases/download/latest/video.txt 013 \ http://shiffman.net/p5/libraries/openkinect_processing/openkinect_processing.txt 023 \ http://www.v3ga.net/processing/BlobDetection/blobDetection.txt -041 \ https://github.com/Syphon/Processing/releases/download/latestv2/Syphon.txt +041 \ https://github.com/Syphon/Processing/releases/latest/download/Syphon.txt # 059 \ http://thomasdiewald.at/processing/libraries/dLibs_freenect/download/dLibs_freenect.txt # 077 \ http://s373.net/code/flob/download/flob.txt # 081 \ http://ubaa.net/shared/processing/opencv/download/opencv.txt @@ -272,7 +272,7 @@ 132 \ https://github.com/atduskgreg/opencv-processing/releases/download/latest/opencv_processing.txt 134 \ http://decoder.x10host.com/blobscanner/blobscanner.txt 146 \ http://boofcv.org/processing/boofcv_processing.txt -148 \ https://github.com/Syphon/Processing/releases/download/latest/Syphon.txt +# 148 \ https://github.com/Syphon/Processing/releases/download/latest/Syphon.txt 149 \ http://www.magicandlove.com/software/Kinect4WinSDK.txt 161 \ http://codigogenerativo.com/KinectPV2.txt 176 \ http://www.stefanobaldan.com/projects/ipcapture/download/IPCapture.txt From 5101bee2c7d96db6374fd0d4d56fa05be09b8da0 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Dec 2019 10:38:59 -0500 Subject: [PATCH 190/299] Add MatrixMath library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 3062896e8..73f4aaa16 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 250 +# Next ID: 251 # Increment after assigning ID to new contribution [Library : 3D] @@ -179,6 +179,7 @@ 131 \ http://www.lagers.org.uk/processing/qscript/QScript.txt 156 \ http://www.lagers.org.uk/processing/jasmine/Jasmine.txt 203 \ https://github.com/OliverColeman/hivis/releases/download/latest/HiVis.txt +251 \ https://github.com/pallav12/matrixMath-for-processing/releases/download/latest/MatrixMath.txt [Library : Other] 093 \ http://www.lagers.org.uk/processing/pathfinder/Path_Finder.txt From 579bc0f6eb81e10c0cecb55cd30255f683cb17fa Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Dec 2019 10:52:07 -0500 Subject: [PATCH 191/299] Took Syphon off the skipped list. --- contrib_generate/skipped.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib_generate/skipped.conf b/contrib_generate/skipped.conf index f4e2bf989..fb4891e7a 100644 --- a/contrib_generate/skipped.conf +++ b/contrib_generate/skipped.conf @@ -1,6 +1,5 @@ 007 039 -041 050 051 052 From 64cb0a251fb6f7bf57642e7abea4988bd1d03e33 Mon Sep 17 00:00:00 2001 From: REAS Date: Mon, 6 Jan 2020 13:40:30 -0800 Subject: [PATCH 192/299] Return to standard site 'ribbon' --- templates/template.cover.html | 12 ++++++------ templates/template.html | 29 +++++++++++++++-------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/templates/template.cover.html b/templates/template.cover.html index 1976a981e..4e776eb87 100755 --- a/templates/template.cover.html +++ b/templates/template.cover.html @@ -51,15 +51,15 @@
    » Github
    - +
    - From e81f2e1b542a9639bc90fd3dd507a364af2afb07 Mon Sep 17 00:00:00 2001 From: REAS Date: Mon, 6 Jan 2020 13:50:09 -0800 Subject: [PATCH 193/299] Return to standard site 'ribbon' --- templates/template.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/template.html b/templates/template.html index 42b85eb37..10a1d8545 100755 --- a/templates/template.html +++ b/templates/template.html @@ -43,6 +43,7 @@

    +
    + + - - - + diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 19e3da621..59789a7f2 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -23,6 +23,19 @@ + - diff --git a/java_generate/templates/index.alphabetical.template.html b/java_generate/templates/index.alphabetical.template.html index 2f45ade33..46e234153 100644 --- a/java_generate/templates/index.alphabetical.template.html +++ b/java_generate/templates/index.alphabetical.template.html @@ -22,6 +22,19 @@ + - diff --git a/java_generate/templates/index.template.html b/java_generate/templates/index.template.html index e9215f46b..205ea1a28 100644 --- a/java_generate/templates/index.template.html +++ b/java_generate/templates/index.template.html @@ -21,6 +21,19 @@
    +
    - diff --git a/java_generate/templates/library.index.template.html b/java_generate/templates/library.index.template.html index 2f15f76b9..98c01d64e 100644 --- a/java_generate/templates/library.index.template.html +++ b/java_generate/templates/library.index.template.html @@ -23,6 +23,19 @@ + - @@ -77,20 +84,7 @@
    Events
    © Info - - + diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index 664b4eff1..a754b73e7 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -2,7 +2,7 @@ Cover

    Download
    - Donate

    + Donate

    Exhibition

    diff --git a/templates/template.html b/templates/template.html index 10a1d8545..334c27412 100755 --- a/templates/template.html +++ b/templates/template.html @@ -43,7 +43,7 @@

    -
    + -
    + diff --git a/java_generate/templates/index.template.html b/java_generate/templates/index.template.html index 205ea1a28..f78bdb5e9 100644 --- a/java_generate/templates/index.template.html +++ b/java_generate/templates/index.template.html @@ -42,12 +42,12 @@

    -
    + diff --git a/templates/template.nav.php b/templates/template.nav.php index a88f3997f..92ba0e37d 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -9,8 +9,6 @@ 'Learning' => array('/learning/', 1), 'Tutorials' => array('/tutorials/', 2), 'Examples' => array('/examples/', 2), - # '3D' => array('/learning/3d/', 2), - # 'Library' => array('/learning/library/', 2), 'Books' => array('/books/', 2), 'Handbook' => array('/handbook/', 2), @@ -24,7 +22,6 @@ 'Download' => array('/download/', 1), 'Donate' => array('/download/support.html', 1), - #'Donate' => array('https://donorbox.org/supportpf2019-fundraising-campaign', 1), 'Shop' => array('/shop/', 1), From 0aebb91747b510512f870e27de869b95d2d6560b Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 8 Jan 2020 15:19:37 -0800 Subject: [PATCH 197/299] Update all Oracle JavaSE reference links in documentation ...including: 1. broken links (e.g. ArrayList), 2. forwarded links that have been migrated from http to https, and 3. bumping up links pointing back at JavaSE 5/6/7 documentation when the underlying build is 8. Closes #788 --- content/api_en/arrayCopy.xml | 2 +- content/api_en/include/ArrayList.xml | 2 +- content/api_en/include/HashMap.xml | 2 +- content/api_en/include/String.xml | 2 +- content/api_en/include/class.xml | 2 +- content/api_en/include/float.xml | 2 +- content/api_en/keyCode.xml | 2 +- content/api_en/match.xml | 2 +- content/api_en/matchAll.xml | 2 +- .../Topics/Curves/ArcLengthParametrization/BezierCurve.pde | 2 +- content/static/tutorials/arraylist/index.html | 2 +- content/static/tutorials/data/index-old.html | 4 ++-- content/static/tutorials/data/index.html | 2 +- content/static/tutorials/text/index.html | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/content/api_en/arrayCopy.xml b/content/api_en/arrayCopy.xml index 1d0d41ef7..1b5165a10 100644 --- a/content/api_en/arrayCopy.xml +++ b/content/api_en/arrayCopy.xml @@ -41,7 +41,7 @@ Copies an array (or part of an array) to another array. The src array is
    The simplified version with only two arguments — arrayCopy(src, dst) — copies an entire array to another of the same size. It is equivalent to arrayCopy(src, 0, dst, 0, src.length).

    -Using this function is far more efficient for copying array data than iterating through a for() loop and copying each element individually. This function only copies references, which means that for most purposes it only copies one-dimensional arrays (a single set of brackets). If used with a two (or three or more) dimensional array, it will only copy the references at the first level, because a two dimensional array is simply an "array of arrays". This does not produce an error, however, because this is often the desired behavior. Internally, this function calls Java's System.arraycopy() method, so most things that apply there are inherited. +Using this function is far more efficient for copying array data than iterating through a for() loop and copying each element individually. This function only copies references, which means that for most purposes it only copies one-dimensional arrays (a single set of brackets). If used with a two (or three or more) dimensional array, it will only copy the references at the first level, because a two dimensional array is simply an "array of arrays". This does not produce an error, however, because this is often the desired behavior. Internally, this function calls Java's System.arraycopy() method, so most things that apply there are inherited. ]]> diff --git a/content/api_en/include/ArrayList.xml b/content/api_en/include/ArrayList.xml index 1cf04f77d..8feb4dc3a 100644 --- a/content/api_en/include/ArrayList.xml +++ b/content/api_en/include/ArrayList.xml @@ -64,7 +64,7 @@ An ArrayList stores a variable number of objects. This is similar to maki
    An ArrayList is a resizable-array implementation of the Java List interface. It has many methods used to control and search its contents. For example, the length of the ArrayList is returned by its size() method, which is an integer value for the total number of elements in the list. An element is added to an ArrayList with the add() method and is deleted with the remove() method. The get() method returns the element at the specified position in the list. (See the above example for context.)

    -For a list of the numerous ArrayList features, please read the Java reference description. +For a list of the numerous ArrayList features, please read the Java reference description. ]]> diff --git a/content/api_en/include/HashMap.xml b/content/api_en/include/HashMap.xml index 89cba966a..493e893de 100644 --- a/content/api_en/include/HashMap.xml +++ b/content/api_en/include/HashMap.xml @@ -39,7 +39,7 @@ println("Casey is " + val); HashMap stores a collection of objects, each referenced by a key. This is similar to an Array, only instead of accessing elements with a numeric index, a String is used. (If you are familiar with associative arrays from other languages, this is the same idea.) The above example covers basic use, but there's a more extensive example included with the Processing examples. In addition, for simple pairings of Strings and integers, Strings and floats, or Strings and Strings, you can now use the simpler IntDict, FloatDict, and StringDict classes.

    -For a list of the numerous HashMap features, please read the Java reference description. +For a list of the numerous HashMap features, please read the Java reference description. ]]>
    diff --git a/content/api_en/include/String.xml b/content/api_en/include/String.xml index 886c433b9..2febbe7de 100755 --- a/content/api_en/include/String.xml +++ b/content/api_en/include/String.xml @@ -47,7 +47,7 @@ To compare the contents of two Strings, use the equals() method, as in Because a String is defined between double quotation marks, to include such marks within the String itself you must use the \ (backslash) character. (See the third example above.) This is known as an escape sequence. Other escape sequences include \t for the tab character and \n for new line. Because backslash is the escape character, to include a single backslash within a String, you must use two consecutive backslashes, as in: \\

    -There are more string methods than those linked from this page. Additional documentation is located online in the official Java documentation. +There are more string methods than those linked from this page. Additional documentation is located online in the official Java documentation. ]]> diff --git a/content/api_en/include/class.xml b/content/api_en/include/class.xml index 45eedd292..5f1e84cab 100755 --- a/content/api_en/include/class.xml +++ b/content/api_en/include/class.xml @@ -46,7 +46,7 @@ class HLine { Object-Oriented Programming is hosted on the Oracle website. +Keyword used to indicate the declaration of a class. A class is a composite of fields (data) and methods (functions that are a part of the class) which may be instantiated as objects. The first letter of a class name is usually uppercase to separate it from other kinds of variables. A related tutorial on Object-Oriented Programming is hosted on the Oracle website. ]]> diff --git a/content/api_en/include/float.xml b/content/api_en/include/float.xml index 964d946e6..134cb33f4 100755 --- a/content/api_en/include/float.xml +++ b/content/api_en/include/float.xml @@ -41,7 +41,7 @@ Data type for floating-point numbers, e.g. numbers that have a decimal point.
    Floats are not precise, so adding small values (such as 0.0001) may not always increment precisely due to rounding errors. If you want to increment a value in small intervals, use an int, and divide by a float value before using it. (See the second example above.)

    -Floating-point numbers can be as large as 3.40282347E+38 and as low as -3.40282347E+38. They are stored as 32 bits (4 bytes) of information. The float data type is inherited from Java; you can read more about the technical details here and here.
    +Floating-point numbers can be as large as 3.40282347E+38 and as low as -3.40282347E+38. They are stored as 32 bits (4 bytes) of information. The float data type is inherited from Java; you can read more about the technical details here and here.

    Processing supports the double datatype from Java as well. However, none of the Processing functions use double values, which use more memory and are typically overkill for most work created in Processing. We do not plan to add support for double values, as doing so would require increasing the number of API functions significantly. ]]> diff --git a/content/api_en/keyCode.xml b/content/api_en/keyCode.xml index f927a373c..8a3cd3d2f 100755 --- a/content/api_en/keyCode.xml +++ b/content/api_en/keyCode.xml @@ -39,7 +39,7 @@ When checking for these keys, it can be useful to first check if the key is code

    The keys included in the ASCII specification (BACKSPACE, TAB, ENTER, RETURN, ESC, and DELETE) do not require checking to see if the key is coded; for those keys, you should simply use the key variable directly (and not keyCode). If you're making cross-platform projects, note that the ENTER key is commonly used on PCs and Unix, while the RETURN key is used on Macs. Make sure your program will work on all platforms by checking for both ENTER and RETURN.

    -For those familiar with Java, the values for UP and DOWN are simply shorter versions of Java's KeyEvent.VK_UP and KeyEvent.VK_DOWN. Other keyCode values can be found in the Java KeyEvent reference. +For those familiar with Java, the values for UP and DOWN are simply shorter versions of Java's KeyEvent.VK_UP and KeyEvent.VK_DOWN. Other keyCode values can be found in the Java KeyEvent reference.

    There are issues with how keyCode behaves across different renderers and operating systems. Watch out for unexpected behavior as you switch renderers and operating systems and you are using keys are aren't mentioned in this reference entry.

    diff --git a/content/api_en/match.xml b/content/api_en/match.xml index 1db3a9f3a..92d1b2fdf 100755 --- a/content/api_en/match.xml +++ b/content/api_en/match.xml @@ -51,7 +51,7 @@ To use the function, first check to see if the result is null. If the result is
    If there are groups (specified by sets of parentheses) in the regular expression, then the contents of each will be returned in the array. Element [0] of a regular expression match returns the entire matching string, and the match groups start at element [1] (the first group is [1], the second [2], and so on).

    -The syntax can be found in the reference for Java's Pattern class. For regular expression syntax, read the Java Tutorial on the topic. +The syntax can be found in the reference for Java's Pattern class. For regular expression syntax, read the Java Tutorial on the topic. ]]> diff --git a/content/api_en/matchAll.xml b/content/api_en/matchAll.xml index 56feb6b5b..4f0345fbe 100644 --- a/content/api_en/matchAll.xml +++ b/content/api_en/matchAll.xml @@ -33,7 +33,7 @@ To use the function, first check to see if the result is null. If the result is
    If there are groups (specified by sets of parentheses) in the regular expression, then the contents of each will be returned in the array. Assuming a loop with counter variable i, element [i][0] of a regular expression match returns the entire matching string, and the match groups start at element [i][1] (the first group is [i][1], the second [i][2], and so on).

    -The syntax can be found in the reference for Java's Pattern class. For regular expression syntax, read the Java Tutorial on the topic. +The syntax can be found in the reference for Java's Pattern class. For regular expression syntax, read the Java Tutorial on the topic. ]]> diff --git a/content/examples/Topics/Curves/ArcLengthParametrization/BezierCurve.pde b/content/examples/Topics/Curves/ArcLengthParametrization/BezierCurve.pde index 531ea367b..299ba8180 100644 --- a/content/examples/Topics/Curves/ArcLengthParametrization/BezierCurve.pde +++ b/content/examples/Topics/Curves/ArcLengthParametrization/BezierCurve.pde @@ -110,7 +110,7 @@ class BezierCurve { if (index < 0) { // if the index is negative, exact length is not in the table, // but it tells us where it should be in the table - // see http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#binarySearch(float[], float) + // see https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#binarySearch-float:A-float- // interpolate two surrounding indexes int nextIndex = -(index + 1); diff --git a/content/static/tutorials/arraylist/index.html b/content/static/tutorials/arraylist/index.html index 613ffee6a..5f24a6ad5 100644 --- a/content/static/tutorials/arraylist/index.html +++ b/content/static/tutorials/arraylist/index.html @@ -1,4 +1,4 @@ -In truth, we could use a simple array to manage our Particle objects. Some particle systems might have a fixed number of particles, and arrays are magnificently efficient in those instances. Processing also offers expand(), contract(), subset(), splice() and other methods for resizing arrays. However, for these examples, the Java class ArrayList (found in the java.util package: http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html) will prove to be the best solution.

Using an ArrayList is conceptually similar to a standard array, but the syntax is different. Here is some code (that assumes the existence of a generic Particle class) demonstrating identical results: first with an array, and second with an ArrayList. +In truth, we could use a simple array to manage our Particle objects. Some particle systems might have a fixed number of particles, and arrays are magnificently efficient in those instances. Processing also offers expand(), contract(), subset(), splice() and other methods for resizing arrays. However, for these examples, the Java class ArrayList (found in the java.util package: https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) will prove to be the best solution.

Using an ArrayList is conceptually similar to a standard array, but the syntax is different. Here is some code (that assumes the existence of a generic Particle class) demonstrating identical results: first with an array, and second with an ArrayList. // THE STANDARD ARRAY WAY int total = 10; diff --git a/content/static/tutorials/data/index-old.html b/content/static/tutorials/data/index-old.html index 0df744e1b..6221a4a80 100644 --- a/content/static/tutorials/data/index-old.html +++ b/content/static/tutorials/data/index-old.html @@ -17,7 +17,7 @@

    Daniel Shiffman

    Manipulating Strings

    - In Strings and Drawing Text, we touched on a few of the basic functions available in the Java String class, such as charAt(), toUpperCase(), equals(), and length(). These functions are documented on the Processing reference page for Strings. Nevertheless, in order to perform some more advanced data parsing techniques, we'll need to explore some additional String manipulation functions documented in the Java API. + In Strings and Drawing Text, we touched on a few of the basic functions available in the Java String class, such as charAt(), toUpperCase(), equals(), and length(). These functions are documented on the Processing reference page for Strings. Nevertheless, in order to perform some more advanced data parsing techniques, we'll need to explore some additional String manipulation functions documented in the Java API.

    @@ -518,7 +518,7 @@

    Threads

    Two examples that follow this methodology can be found under Topics --> Advanced Data in the Processing examples.

    -

    While using the thread() function is a very simple way of getting an independent thread, it should be noted that it is somewhat limited. Being able to make a thread object is a great deal more powerful, and this can be done by extending the Java Thread class.

    +

    While using the thread() function is a very simple way of getting an independent thread, it should be noted that it is somewhat limited. Being able to make a thread object is a great deal more powerful, and this can be done by extending the Java Thread class.

    diff --git a/content/static/tutorials/data/index.html b/content/static/tutorials/data/index.html index e69e99529..ebafcce92 100644 --- a/content/static/tutorials/data/index.html +++ b/content/static/tutorials/data/index.html @@ -17,7 +17,7 @@

    Daniel Shiffman

    Manipulating Strings

    - In Strings and Drawing Text, we touched on a few of the basic functions available in the Java String, such as charAt(), toUpperCase(), equals(), and length(). These functions are documented on the Processing reference page for Strings. Nevertheless, in order to perform some more advanced data parsing techniques, we'll need to explore some additional String manipulation functions documented in the Java API. + In Strings and Drawing Text, we touched on a few of the basic functions available in the Java String, such as charAt(), toUpperCase(), equals(), and length(). These functions are documented on the Processing reference page for Strings. Nevertheless, in order to perform some more advanced data parsing techniques, we'll need to explore some additional String manipulation functions documented in the Java API.

    Let's take a closer look at the following two String functions: indexOf() and substring().

    indexOf() locates a sequence of characters within a string. It takes one argument — a search string — and returns a numeric value that corresponds to the first occurrence of the search string inside of the String object being searched.
    diff --git a/content/static/tutorials/text/index.html b/content/static/tutorials/text/index.html index fa9b928fd..4636aea5d 100644 --- a/content/static/tutorials/text/index.html +++ b/content/static/tutorials/text/index.html @@ -32,7 +32,7 @@

    Where do we find documentation for the String class?

    - This page only covers some of the available methods of the String class. The full documentation can be found on java's String page. + This page only covers some of the available methods of the String class. The full documentation can be found on java's String page.

    From 930ba3213d5723df644179f7d82582819b193bcd Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 8 Jan 2020 15:46:34 -0800 Subject: [PATCH 198/299] Document strokeCap setting for square points, invisible points problem closes #792 --- content/api_en/point.xml | 2 ++ content/api_en/strokeCap.xml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/content/api_en/point.xml b/content/api_en/point.xml index 141dc932f..ac8d5b36b 100755 --- a/content/api_en/point.xml +++ b/content/api_en/point.xml @@ -35,6 +35,8 @@ point(30, 75, -50); Draws a point, a coordinate in space at the dimension of one pixel. The first parameter is the horizontal value for the point, the second value is the vertical value for the point, and the optional third value is the depth value. Drawing this shape in 3D with the z parameter requires the P3D parameter in combination with size() as shown in the above example.

    Use stroke() to set the color of a point(). +

    +Point appears round with the default strokeCap(ROUND) and square with strokeCap(PROJECT). Points are invisible with strokeCap(SQUARE) (no cap). ]]> diff --git a/content/api_en/strokeCap.xml b/content/api_en/strokeCap.xml index f74330d4b..6308605ad 100755 --- a/content/api_en/strokeCap.xml +++ b/content/api_en/strokeCap.xml @@ -23,6 +23,8 @@ line(20, 70, 80, 70);
    +To make point() appear square, use strokeCap(PROJECT). Using strokeCap(SQUARE) (no cap) causes points to become invisible. ]]>
    From 6ee278e6aa0cafecaed9f3839d20105db1d761c0 Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 14 Jan 2020 10:28:08 -0800 Subject: [PATCH 199/299] Update for Handbook page, fix links --- content/static/handbook.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/static/handbook.html b/content/static/handbook.html index e1fbca351..27ef76ed6 100644 --- a/content/static/handbook.html +++ b/content/static/handbook.html @@ -6,13 +6,13 @@

    Processing: A Programming Handbook Published December 2014, The MIT Press.
    720 Pages. Hardcover.

    - » Order from MIT Press
    + » Order from MIT Press
    » Order from Amazon

    » Download Examples
    » Errata

    - If you are an educator, you can request a desk/exam copy from the MIT Press website. + If you are an educator, you can request a desk/exam copy from the MIT Press website.

    @@ -28,7 +28,7 @@

    Processing: A Programming Handbook

    - Interviews with SUE.C, Larry Cuba, Mark Hansen, Lynn Hershman Leeson, Jürg Lehni, LettError, Golan Levin and Zachary Lieberman, Benjamin Maus, Manfred Mohr, Ash Nehru, Josh On, Bob Sabiston, Jennifer Steinkamp, Jared Tarbell, Steph Thirion, and Robert Winter. + Interviews with SUE.C, Larry Cuba, Mark Hansen, Lynn Hershman Leeson, Jürg Lehni, LettError, Golan Levin and Zachary Lieberman, Benjamin Maus, Manfred Mohr, Ash Nehru, Josh On, Bob Sabiston, Jennifer Steinkamp, Jared Tarbell, Steph Thirion, and Robert Winter.

    From 723290241a1d18b7969d15d650993163bd3577ec Mon Sep 17 00:00:00 2001 From: REAS Date: Tue, 14 Jan 2020 10:32:56 -0800 Subject: [PATCH 200/299] Update for Handbook page, fix links --- content/static/books.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/static/books.html b/content/static/books.html index ac1fc9d0e..e935e82db 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -12,13 +12,13 @@

    Books. Processing books cove Processing: A Programming Handbook for Visual Designers,
    Second Edition

    Casey Reas and Ben Fry.
    Published December 2014, The MIT Press. 720 pages. Hardcover.
    - » Order from MIT Press
    + » Order from MIT Press
    » Order from Amazon

    The second edition of the Handbook has been thoroughly updated, influenced by the seven years of Processing being taught in classrooms, computer labs, and studios since the first edition. Every chapter has been revised, and added chapters introduce new ways to work with data and geometry. New “synthesis” chapters offer discussion and worked examples of such topics as sketching with code, modularity, and algorithms. Interviews have been added that cover a wider range of projects and history. “Extension” chapters are now offered online so they can be updated to keep pace with technological developments in such fields as computer vision and electronics.

    - If you are an educator, you can request a desk/exam copy from the MIT Press website.
    + If you are an educator, you can request a desk/exam copy from the MIT Press website.
    From 3061c4b05ad38f3c9ca9bc7c131a5f31956d49ae Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Fri, 17 Jan 2020 12:38:57 -0500 Subject: [PATCH 201/299] add 3.5.4 --- content/static/download.html | 22 +++++++++++++++------- download/latest.txt | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index dfb66439e..64ee058f0 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -9,16 +9,18 @@

    Download Processing. Process
    - 3.5.3 - (3 February 2019) + 3.5.4 + (17 January 2019)
    @@ -40,6 +42,14 @@

    Download Processing. Process

    Stable Releases

    +
  • + 3.5.4 + (17 January 2019) + Win 32 + Win 64 + Linux 64 + Mac OS X +
  • 3.5.3 (3 February 2019) @@ -81,7 +91,6 @@

    Stable Releases

    Linux ARMv6hf Mac OS X
  • - -->
  • 3.4 (26 July 2018) @@ -92,7 +101,6 @@

    Stable Releases

    Linux ARMv6hf Mac OS X
  • -
    - 3.5.4 - (17 January 2019) + 3.5.3 + (3 February 2019)
      -
    • Windows 64-bit
      - Windows 32-bit
    • -
    • Linux 64-bit
      +
    • Windows 64-bit
      + Windows 32-bit
    • +
    • Linux 64-bit

      Stable Releases

      +
    • 3.5.3 (3 February 2019) From d55ac4ac87d6661dd555b213bdc93fa29138cf4b Mon Sep 17 00:00:00 2001 From: REAS Date: Fri, 17 Jan 2020 14:35:53 -0800 Subject: [PATCH 203/299] Adding 3.5.4 back to download page --- content/static/download.html | 52 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index 798f76f7c..b4f0cc394 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -9,19 +9,19 @@

      Download Processing. Process
      - 3.5.3 - (3 February 2019) + 3.5.4 + (17 January 2020)
      @@ -42,25 +42,23 @@

      Download Processing. Process

      Stable Releases

      -
    • 3.5.3 (3 February 2019) - Win 32 - Win 64 - Linux 32 - Linux 64 - Linux ARMv6hf - Mac OS X + Win 32 + Win 64 + Linux 32 + Linux 64 + Linux ARMv6hf + Mac OS X
    • -
    • Mac OS X
    • +
    • Mac OS X
    @@ -45,20 +45,20 @@

    Stable Releases

  • 3.5.4 (17 January 2020) - Win 32 - Win 64 - Linux 64 - Mac OS X + Win 32 + Win 64 + Linux 64 + Mac OS X
  • 3.5.3 (3 February 2019) - Win 32 - Win 64 - Linux 32 - Linux 64 - Linux ARMv6hf - Mac OS X + Win 32 + Win 64 + Linux 32 + Linux 64 + Linux ARMv6hf + Mac OS X
  • +
  • + 4.0 alpha 1 + (18 January 2020) + Win 64 + Linux 64 + Mac OS X +
  • + + -
  • Mac OS X
  • +
  • Mac OS X
  • @@ -45,10 +45,10 @@

    Stable Releases

  • 3.5.4 (17 January 2020) - Win 32 - Win 64 - Linux 64 - Mac OS X + Win 32 + Win 64 + Linux 64 + Mac OS X
  • 3.5.3 From a12008567966a2fb033d6a5e83f84d6c42bf1416 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sat, 18 Jan 2020 22:34:55 -0500 Subject: [PATCH 207/299] link to changes.md instead of revisions.txt for 4.x --- content/static/download.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/download.html b/content/static/download.html index 64e0b1a68..1d438718e 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -429,7 +429,7 @@

    Pre-Releases

  • --> -

    The revisions cover incremental changes between releases, and are especially important to read for pre-releases.

    +

    The changes document covers incremental updates between 4.x releases, and is especially important to read for pre-releases.

    From 3f2896a3336c094e87570acad72cb585f8d550a3 Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 29 Jan 2020 13:36:26 -0800 Subject: [PATCH 208/299] Document strokeWeight(1) causing invisible point() problem and workarounds --- content/api_en/point.xml | 2 ++ content/api_en/strokeWeight.xml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/content/api_en/point.xml b/content/api_en/point.xml index ac8d5b36b..8989051e9 100755 --- a/content/api_en/point.xml +++ b/content/api_en/point.xml @@ -37,6 +37,8 @@ Draws a point, a coordinate in space at the dimension of one pixel. The first pa Use stroke() to set the color of a point().

    Point appears round with the default strokeCap(ROUND) and square with strokeCap(PROJECT). Points are invisible with strokeCap(SQUARE) (no cap). +

    +Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel use set() or draw the point using either circle() or square(). ]]> diff --git a/content/api_en/strokeWeight.xml b/content/api_en/strokeWeight.xml index d614509e9..f5e36551b 100755 --- a/content/api_en/strokeWeight.xml +++ b/content/api_en/strokeWeight.xml @@ -22,6 +22,8 @@ line(20, 70, 80, 70);
    +Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel use set() or draw the point using either circle() or square(). ]]>
    From 16cee9b9928dd4c5fe7ddec0afa430ebd9631cbe Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Mon, 3 Feb 2020 10:09:16 -0800 Subject: [PATCH 209/299] doccomment drops outdated ref to index.html generation and adds line on how to do javadoc generation with third-party tools. closes #796 --- content/api_en/include/doccomment.xml | 4 +++- content/api_en/include/multilinecomment.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/content/api_en/include/doccomment.xml b/content/api_en/include/doccomment.xml index bb4331414..fa036a032 100755 --- a/content/api_en/include/doccomment.xml +++ b/content/api_en/include/doccomment.xml @@ -22,7 +22,9 @@ line(50, 0, 50, 100);
    +Doc comments may be converted into browseable documentation using external editors and tools such as the command line javadoc, doc generators such as Doxygen, or IDEs such as Eclipse, Netbeans, or IntelliJ IDEA. ]]>
    diff --git a/content/api_en/include/multilinecomment.xml b/content/api_en/include/multilinecomment.xml index bd88002cb..a1c9dd6a1 100755 --- a/content/api_en/include/multilinecomment.xml +++ b/content/api_en/include/multilinecomment.xml @@ -22,7 +22,7 @@ line(50, 0, 50, 100); From 9605d8d6afe7b3b37ae4c7cda0324a07b78fd1a2 Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Mon, 3 Feb 2020 16:17:55 -0800 Subject: [PATCH 210/299] grammar fix: use -> using --- content/api_en/point.xml | 2 +- content/api_en/strokeWeight.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/api_en/point.xml b/content/api_en/point.xml index 8989051e9..6034c7f82 100755 --- a/content/api_en/point.xml +++ b/content/api_en/point.xml @@ -38,7 +38,7 @@ Use stroke() to set the color of a point().

    Point appears round with the default strokeCap(ROUND) and square with strokeCap(PROJECT). Points are invisible with strokeCap(SQUARE) (no cap).

    -Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel use set() or draw the point using either circle() or square(). +Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel using set() or drawing the point using either circle() or square(). ]]> diff --git a/content/api_en/strokeWeight.xml b/content/api_en/strokeWeight.xml index f5e36551b..e954ffb95 100755 --- a/content/api_en/strokeWeight.xml +++ b/content/api_en/strokeWeight.xml @@ -23,7 +23,7 @@ line(20, 70, 80, 70);
    -Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel use set() or draw the point using either circle() or square(). +Using point() with strokeWeight(1) or smaller may draw nothing to the screen, depending on the graphics settings of the computer. Workarounds include setting the pixel using set() or drawing the point using either circle() or square(). ]]>
    From f862b82f97c08532ab755e6309eec429f572983c Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 4 Feb 2020 22:41:10 -0500 Subject: [PATCH 211/299] Add Lunar library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 73f4aaa16..da422361b 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 251 +# Next ID: 252 # Increment after assigning ID to new contribution [Library : 3D] @@ -24,6 +24,7 @@ 215 \ http://maxlfarrell.gitlab.io/extruder/extruder.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt +251 \ http://www.bdhont.net/lunar.txt [Library : Animation] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From 18b0d2de9ec5d9baa5145b7d3f86d88de64197c6 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 4 Feb 2020 22:58:43 -0500 Subject: [PATCH 212/299] Fix duplicate ID. --- contrib_generate/sources.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index da422361b..42fa077e5 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 252 +# Next ID: 253 # Increment after assigning ID to new contribution [Library : 3D] @@ -24,7 +24,7 @@ 215 \ http://maxlfarrell.gitlab.io/extruder/extruder.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt -251 \ http://www.bdhont.net/lunar.txt +252 \ http://www.bdhont.net/lunar.txt [Library : Animation] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From a64b988d951a1afd8ee28426b3ba0e12d070d4e9 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 10 Feb 2020 21:03:54 -0500 Subject: [PATCH 213/299] Add Green library. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 42fa077e5..47e008191 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 253 +# Next ID: 254 # Increment after assigning ID to new contribution [Library : 3D] @@ -38,6 +38,7 @@ 231 \ http://objectstothinkwith.com/tracer/tracer.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt +253 \ https://ztdp.ca/projects/school/Green/Green.txt [Library : Compilation] 004 \ http://staff.city.ac.uk/~jwo/giCentre/utils/gicentreUtils.txt @@ -186,6 +187,7 @@ 093 \ http://www.lagers.org.uk/processing/pathfinder/Path_Finder.txt 157 \ http://www.lagers.org.uk/processing/steganos/Steganos.txt 185 \ http://softlab.pt/ptmx/ptmx.txt +253 \ https://ztdp.ca/projects/school/Green/Green.txt [Library : Simulation] 018 \ http://www.ricardmarxer.com/fisica/download/fisica.txt From 1a638db31ce20c26fe04889379fada4b716551af Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Sun, 8 Mar 2020 10:26:22 -0700 Subject: [PATCH 214/299] RegularPolygon example -- fix comment Closes #802 --- content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde b/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde index 09379230c..52d8f81af 100644 --- a/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde +++ b/content/examples/Basics/Form/RegularPolygon/RegularPolygon.pde @@ -24,7 +24,7 @@ void draw() { pushMatrix(); translate(width*0.5, height*0.5); rotate(frameCount / 50.0); - polygon(0, 0, 80, 20); // Icosahedron + polygon(0, 0, 80, 20); // Icosagon popMatrix(); pushMatrix(); From 868fa13a205e6c292a44364bfbd60cd84e1cbf13 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 31 Mar 2020 12:40:55 -0400 Subject: [PATCH 215/299] Update Ketai library URL. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 47e008191..61c739513 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -112,7 +112,7 @@ 024 \ https://github.com/firmata/processing/releases/download/latest/processing-arduino.txt 028 \ http://projects.formatlos.de/ambientlightsensor/download/AmbientLightSensor.txt # 064 \ http://www.muvium.com/frappuccino/frappuccino.txt -066 \ http://ketailibrary.org/ketai.txt +066 \ http://ketai.org/ketai.txt 071 \ http://motscousus.com/stuff/2011-01_dmxP512/dmxP512.txt 090 \ https://dl.dropbox.com/u/87680069/LeapMotion.txt # 102 \ http://s176381904.onlinehome.fr/processing/MoveLib/download/MoveLib.txt From bdd2a023a691cdd1b42b761d6a2816043281b0c7 Mon Sep 17 00:00:00 2001 From: Kevin Stadler Date: Fri, 17 Apr 2020 20:09:41 +0800 Subject: [PATCH 216/299] Add Sound library Waveform analyzer documentation Contributed by @mhamilt --- content/api_en/LIB_sound/Waveform.xml | 107 ++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 content/api_en/LIB_sound/Waveform.xml diff --git a/content/api_en/LIB_sound/Waveform.xml b/content/api_en/LIB_sound/Waveform.xml new file mode 100644 index 000000000..4251ddd60 --- /dev/null +++ b/content/api_en/LIB_sound/Waveform.xml @@ -0,0 +1,107 @@ + + + +Waveform + +Sound + +Analyzer + +Application + + + + + + + + + + + + + + + + +input() +Define the audio input for the analyzer + + + +analyze() +Gets the last nsamples captured from the connected input sound source, writes them + into this Waveform's `data` array, and returns it. + + + +stop() +Stop the analyzer + + + +data +`float[]` of length nsamples, with the sample amplitudes between `-1` and `1` + + + +Waveform(parent) + + + +parent +PApplet: typically use "this" + + + + + + + +Object + +Library + + From ba7c1a2423b5faae2802a1c1919bbc080506a1d7 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Fri, 1 May 2020 16:14:09 +0900 Subject: [PATCH 217/299] fix typo in noSmooth() docs --- content/api_en/noSmooth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/noSmooth.xml b/content/api_en/noSmooth.xml index aa1ceec8d..9c98dc192 100755 --- a/content/api_en/noSmooth.xml +++ b/content/api_en/noSmooth.xml @@ -38,7 +38,7 @@ void draw() { smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. +Draws all geometry and fonts with jagged (aliased) edges and images with hard edges between the pixels when enlarged rather than interpoloating pixels. Note that smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. ]]> From a046076ceebacfec50aa330e12e25cbc6cb54c57 Mon Sep 17 00:00:00 2001 From: John Belmonte Date: Fri, 1 May 2020 16:27:34 +0900 Subject: [PATCH 218/299] fix "interpolating" typo in noSmooth docs --- content/api_en/noSmooth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/noSmooth.xml b/content/api_en/noSmooth.xml index 9c98dc192..d40dd92e6 100755 --- a/content/api_en/noSmooth.xml +++ b/content/api_en/noSmooth.xml @@ -38,7 +38,7 @@ void draw() { smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. +Draws all geometry and fonts with jagged (aliased) edges and images with hard edges between the pixels when enlarged rather than interpolating pixels. Note that smooth() is active by default, so it is necessary to call noSmooth() to disable smoothing of geometry, fonts, and images. Since the release of Processing 3.0, the noSmooth() function can only be run once for each sketch, either at the top of a sketch without a setup(), or after the size() function when used in a sketch with setup(). See the examples above for both scenarios. ]]> From 744da894bbcb51d60ebbf760f70c1236324d0f4d Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Fri, 1 May 2020 10:34:36 -0400 Subject: [PATCH 219/299] Add ComposingForEveryone library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 61c739513..4626ac930 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 254 +# Next ID: 255 # Increment after assigning ID to new contribution [Library : 3D] @@ -219,6 +219,7 @@ 151 \ https://corajr.github.io/loom/download/loom.txt 170 \ https://github.com/shlomihod/cassette/releases/download/latest/cassette.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt +254 \ http://www.kramann.info/ComposingForEveryone.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From 342775674a927b06400cc44dbd91de79240d45bc Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 12 May 2020 10:31:30 -0400 Subject: [PATCH 220/299] Add UiBooster and LiveBrush contributions. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 4626ac930..041930fcc 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 255 +# Next ID: 257 # Increment after assigning ID to new contribution [Library : 3D] @@ -106,6 +106,7 @@ 180 \ http://interfascia.berg.industries/download/interfascia.txt 224 \ https://github.com/BillKujawa/meter/releases/download/latest/meter.txt 237 \ http://gicentre.org/handy/handy.txt +256 \ https://github.com/Milchreis/uibooster-for-processing/releases/latest/download/UiBooster.txt [Library : Hardware] 015 \ http://www.shiffman.net/p5/libraries/sms/sms.txt @@ -259,6 +260,7 @@ 245 \ https://github.com/VisualComputing/nub/releases/download/latest/nub.txt 246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt +255 \ https://bdhont.net/LiveBrush.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From d34c5b027ca8a9e189bba8ab04b2cf17d2b2f886 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 12 May 2020 11:18:00 -0400 Subject: [PATCH 221/299] Add InfinidecimalCanvas library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 041930fcc..a8e524c5d 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 257 +# Next ID: 258 # Increment after assigning ID to new contribution [Library : 3D] @@ -261,6 +261,7 @@ 246 \ https://github.com/federico-pepe/nice-color-palettes/releases/download/latest/NiceColorPalettes.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt 255 \ https://bdhont.net/LiveBrush.txt +257 \ https://rect.dev/processing/infinidecimal/GRInfinidecimalCanvas.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 734ef2c3ed09bfef36c045ac97711f304694a53d Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 13 May 2020 09:14:12 -0400 Subject: [PATCH 222/299] Add Grab library. --- contrib_generate/sources.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index a8e524c5d..4159127d1 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 258 +# Next ID: 259 # Increment after assigning ID to new contribution [Library : 3D] @@ -168,6 +168,7 @@ 232 \ https://github.com/haschdl/pLaunchController/releases/download/latest/pLaunchController.txt 239 \ http://skweezee.net/processing/download/SkweezeeForProcessing.txt 247 \ https://github.com/orgicus/image-sequence-player/releases/download/latest/ImageSequencePlayer.txt +258 \ https://github.com/Transmedia-Gx/grab/releases/latest/download/Grab.txt [Library : Language] 063 \ http://rednoise.org/rita/rita.txt @@ -262,6 +263,7 @@ 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt 255 \ https://bdhont.net/LiveBrush.txt 257 \ https://rect.dev/processing/infinidecimal/GRInfinidecimalCanvas.txt +258 \ https://github.com/Transmedia-Gx/grab/releases/latest/download/Grab.txt [Library : Typography] 038 \ http://www.ricardmarxer.com/geomerative/geomerative.txt From 1c0437f26e7994347f5464a92d32fcfc2468ac45 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 19 May 2020 09:58:30 -0400 Subject: [PATCH 223/299] Update GazeTrack URL. --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 4159127d1..e8ba0dba7 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -130,7 +130,7 @@ 218 \ https://github.com/cansik/sweep-processing/releases/download/latest/SweepProcessing.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt 224 \ https://github.com/BillKujawa/meter/releases/download/latest/meter.txt -225 \ http://hci.soc.napier.ac.uk/GazeTrack/GazeTrack.txt +225 \ http://web.tecnico.ulisboa.pt/augusto.esteves/GazeTrack/GazeTrack.txt 238 \ https://github.com/cansik/realsense-processing/releases/download/contributed/RealSenseProcessing.txt 239 \ http://skweezee.net/processing/download/SkweezeeForProcessing.txt From 67d6852577723a31bd358169172373291f8f05b5 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 19 May 2020 09:58:41 -0400 Subject: [PATCH 224/299] Add ShaderMode mode. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index e8ba0dba7..89f5bb071 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 259 +# Next ID: 260 # Increment after assigning ID to new contribution [Library : 3D] @@ -341,3 +341,4 @@ 169 \ https://py.processing.org/3/PythonMode.txt 199 \ https://github.com/fathominfo/processing-p5js-mode/releases/download/latest/p5jsMode.txt 220 \ https://github.com/processing-r/Processing.R/releases/latest/download/RLangMode.txt +250 \ https://github.com/Izza11/shader-mode/releases/download/latest/ShaderMode.txt From 5b74b1fd7512b11bee13ff78236495c1c2b88c0b Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 27 May 2020 20:39:35 -0400 Subject: [PATCH 225/299] Add procmod Library to list. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 89f5bb071..3e3d89eb8 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 260 +# Next ID: 261 # Increment after assigning ID to new contribution [Library : 3D] @@ -222,6 +222,7 @@ 170 \ https://github.com/shlomihod/cassette/releases/download/latest/cassette.txt 219 \ https://teddavis.org/xyscope/download/XYscope.txt 254 \ http://www.kramann.info/ComposingForEveryone.txt +260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From e349efaa358e03cadb1a65f05b4d422533c8fe23 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 2 Jun 2020 10:23:54 -0400 Subject: [PATCH 226/299] Add teilchen Library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 3e3d89eb8..c2426e881 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 261 +# Next ID: 262 # Increment after assigning ID to new contribution [Library : 3D] @@ -209,6 +209,7 @@ 201 \ https://github.com/diwi/PixelFlow/releases/download/latest/PixelFlow.txt 216 \ https://github.com/diwi/LiquidFunProcessing/releases/download/latest/LiquidFunProcessing.txt 244 \ http://giftedapprentice.com/ewbIK/ewbIK.txt +261 \ https://github.com/dennisppaul/teilchen/releases/latest/download/teilchen.txt [Library : Sound] 153 \ https://github.com/processing/processing-sound/releases/download/latest/sound.txt From 9ddcc036f768f8ded949b8a183412711ea43270b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 12:08:24 -0700 Subject: [PATCH 227/299] Update textFont.xml --- content/api_en/textFont.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textFont.xml b/content/api_en/textFont.xml index 30b9bb236..ebf06c7d6 100755 --- a/content/api_en/textFont.xml +++ b/content/api_en/textFont.xml @@ -14,7 +14,7 @@ PFont mono; // The font "andalemo.ttf" must be located in the // current sketch's "data" directory to load successfully -mono = loadFont("andalemo.ttf", 32); +mono = createFont("andalemo.ttf", 32); background(0); textFont(mono); text("word", 12, 60); From 615e7550c7b7fe1ee2a0c1962607d72e428c8b72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?aar=C3=B3n=20montoya-moraga?= Date: Tue, 2 Jun 2020 17:00:28 -0400 Subject: [PATCH 228/299] fix typo in reference page of filter() fixes PR #814 --- content/api_en/PImage_filter.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/PImage_filter.xml b/content/api_en/PImage_filter.xml index 30df9a9da..f30582ad1 100755 --- a/content/api_en/PImage_filter.xml +++ b/content/api_en/PImage_filter.xml @@ -156,7 +156,7 @@ POSTERIZE
    Limits each channel of the image to the number of colors specified as the parameter. The parameter can be set to values between 2 and 255, but results are most noticeable in the lower ranges.

    BLUR
    -Executes a Guassian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Guassian blur of radius 1. Larger values increase the blur.
    +Executes a Gaussian blur with the level parameter specifying the extent of the blurring. If no parameter is used, the blur is equivalent to Gaussian blur of radius 1. Larger values increase the blur.

    ERODE
    Reduces the light areas. No parameter is used.
    From 77cdb242e03b70e78b3e31b829feb1644b4c29be Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 18:03:30 -0700 Subject: [PATCH 229/299] Update intconvert.xml Add String to the list of data that int() can convert --- content/api_en/include/intconvert.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/include/intconvert.xml b/content/api_en/include/intconvert.xml index f14376165..56ba6ddb8 100755 --- a/content/api_en/include/intconvert.xml +++ b/content/api_en/include/intconvert.xml @@ -20,7 +20,7 @@ println(c + " : " + i); // Prints "E : 69" boolean
    , byte, char, color, float, int, or long) to its integer representation.
    +Converts any value of a primitive data type (boolean, byte, char, color, float, int, or long) or String to its integer representation.

    When an array of values is passed in, then an int array of the same length is returned. ]]> From 5bf93e09ed127f85e8981da947067de3c097a5cf Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 19:40:15 -0700 Subject: [PATCH 230/299] Update clientEvent.xml Update example to draw in the draw() and not in clientEvent() --- content/api_en/LIB_net/clientEvent.xml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/api_en/LIB_net/clientEvent.xml b/content/api_en/LIB_net/clientEvent.xml index b71892510..d831f37a4 100755 --- a/content/api_en/LIB_net/clientEvent.xml +++ b/content/api_en/LIB_net/clientEvent.xml @@ -19,25 +19,27 @@ int dataIn; void setup() { size(200, 200); myClient = new Client(this, "127.0.0.1", 5204); + noLoop(); } -void draw() { } // Empty draw keeps the program running +void draw() { + background(dataIn); +} -// ClientEvent message is generated when the server -// sends data to an existing client. +// ClientEvent message is generated when the +// server sends data to an existing client. void clientEvent(Client someClient) { print("Server Says: "); - dataIn = myClient.read(); + dataIn = someClient.read(); println(dataIn); - background(dataIn); - + redraw(); } ]]> From b5c0a287f78ab028ff8c05fbeef59833a5e07b18 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 2 Jun 2020 19:41:03 -0700 Subject: [PATCH 231/299] Update equality.xml Small typo correction --- content/api_en/include/equality.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/api_en/include/equality.xml b/content/api_en/include/equality.xml index bbb16aa3a..a47eac505 100755 --- a/content/api_en/include/equality.xml +++ b/content/api_en/include/equality.xml @@ -20,9 +20,10 @@ if (a == b) { +Determines if two values are equivalent. Please note the equality operator (==) is different from the assignment operator (=) and although they look similar, they have a different use. If you're comparing two variables, the equality operator (==) only works with primitive data types like int, boolean, and char. It doesn't work with composite data types like Array, Table, and PVector.
    +
    +Note that when comparing String objects, you must use the equals() method instead of ==. See the reference for String or the troubleshooting note for more explanation.

    -Note that when comparing String objects, you must use the equals() method instead of == to compare their contents. See the reference for String or the troubleshooting note for more explanation. ]]>
    From e545d663762dfef1287a8c841660aa5a6943ba29 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 16:39:24 -0700 Subject: [PATCH 232/299] Update examples_topics.xml Removing "spring" examples from Simulate topic --- content/examples_topics.xml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/content/examples_topics.xml b/content/examples_topics.xml index c46525d49..35e20f85f 100755 --- a/content/examples_topics.xml +++ b/content/examples_topics.xml @@ -75,15 +75,12 @@ Texture Cube - Spring - Springs - Chain - Soft Body - Flocking Simple Particle System Multiple Particle Systems Forces With Vectors Smoke Particle System + Flocking + Soft Body Bouncing Ball From 58615bda06a739dac6dda1a9c4cf07c29ccaca2c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 16:42:27 -0700 Subject: [PATCH 233/299] Removing Spring-related examples --- .../examples/Topics/Simulate/Chain/Chain.pde | 65 -------- .../Topics/Simulate/Spring/Spring.pde | 94 ----------- .../Topics/Simulate/Springs/Springs.pde | 151 ------------------ 3 files changed, 310 deletions(-) delete mode 100644 content/examples/Topics/Simulate/Chain/Chain.pde delete mode 100644 content/examples/Topics/Simulate/Spring/Spring.pde delete mode 100644 content/examples/Topics/Simulate/Springs/Springs.pde diff --git a/content/examples/Topics/Simulate/Chain/Chain.pde b/content/examples/Topics/Simulate/Chain/Chain.pde deleted file mode 100644 index 75b7ea36d..000000000 --- a/content/examples/Topics/Simulate/Chain/Chain.pde +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Chain. - * - * One mass is attached to the mouse position and the other - * is attached the position of the other mass. The gravity - * in the environment pulls down on both. - */ - - -Spring2D s1, s2; - -float gravity = 9.0; -float mass = 2.0; - -void setup() { - size(640, 360); - fill(255, 126); - // Inputs: x, y, mass, gravity - s1 = new Spring2D(0.0, width/2, mass, gravity); - s2 = new Spring2D(0.0, width/2, mass, gravity); -} - -void draw() { - background(0); - s1.update(mouseX, mouseY); - s1.display(mouseX, mouseY); - s2.update(s1.x, s1.y); - s2.display(s1.x, s1.y); -} - -class Spring2D { - float vx, vy; // The x- and y-axis velocities - float x, y; // The x- and y-coordinates - float gravity; - float mass; - float radius = 30; - float stiffness = 0.2; - float damping = 0.7; - - Spring2D(float xpos, float ypos, float m, float g) { - x = xpos; - y = ypos; - mass = m; - gravity = g; - } - - void update(float targetX, float targetY) { - float forceX = (targetX - x) * stiffness; - float ax = forceX / mass; - vx = damping * (vx + ax); - x += vx; - float forceY = (targetY - y) * stiffness; - forceY += gravity; - float ay = forceY / mass; - vy = damping * (vy + ay); - y += vy; - } - - void display(float nx, float ny) { - noStroke(); - ellipse(x, y, radius*2, radius*2); - stroke(255); - line(x, y, nx, ny); - } -} diff --git a/content/examples/Topics/Simulate/Spring/Spring.pde b/content/examples/Topics/Simulate/Spring/Spring.pde deleted file mode 100644 index 1e28a40b5..000000000 --- a/content/examples/Topics/Simulate/Spring/Spring.pde +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Spring. - * - * Click, drag, and release the horizontal bar to start the spring. - */ - -// Spring drawing constants for top bar -int springHeight = 32; // Height -int left; // Left position -int right; // Right position -int max = 200; // Maximum Y value -int min = 100; // Minimum Y value -boolean over = false; // If mouse over -boolean move = false; // If mouse down and over - -// Spring simulation constants -float M = 0.8; // Mass -float K = 0.2; // Spring constant -float D = 0.92; // Damping -float R = 150; // Rest position - -// Spring simulation variables -float ps = R; // Position -float vs = 0.0; // Velocity -float as = 0; // Acceleration -float f = 0; // Force - - -void setup() { - size(640, 360); - rectMode(CORNERS); - noStroke(); - left = width/2 - 100; - right = width/2 + 100; -} - -void draw() { - background(102); - updateSpring(); - drawSpring(); -} - -void drawSpring() { - - // Draw base - fill(0.2); - float baseWidth = 0.5 * ps + -8; - rect(width/2 - baseWidth, ps + springHeight, width/2 + baseWidth, height); - - // Set color and draw top bar - if(over || move) { - fill(255); - } else { - fill(204); - } - rect(left, ps, right, ps + springHeight); -} - - -void updateSpring() { - // Update the spring position - if(!move) { - f = -K * (ps - R); // f=-ky - as = f / M; // Set the acceleration, f=ma == a=f/m - vs = D * (vs + as); // Set the velocity - ps = ps + vs; // Updated position - } - if(abs(vs) < 0.1) { - vs = 0.0; - } - - // Test if mouse is over the top bar - if(mouseX > left && mouseX < right && mouseY > ps && mouseY < ps + springHeight) { - over = true; - } else { - over = false; - } - - // Set and constrain the position of top bar - if(move) { - ps = mouseY - springHeight/2; - ps = constrain(ps, min, max); - } -} - -void mousePressed() { - if(over) { - move = true; - } -} - -void mouseReleased() { - move = false; -} diff --git a/content/examples/Topics/Simulate/Springs/Springs.pde b/content/examples/Topics/Simulate/Springs/Springs.pde deleted file mode 100644 index 877e79e26..000000000 --- a/content/examples/Topics/Simulate/Springs/Springs.pde +++ /dev/null @@ -1,151 +0,0 @@ -/** - * Springs. - * - * Move the mouse over one of the circles and click to re-position. - * When you release the mouse, it will snap back into position. - * Each circle has a slightly different behavior. - */ - - -int num = 3; -Spring[] springs = new Spring[num]; - -void setup() { - size(640, 360); - noStroke(); - springs[0] = new Spring(240, 260, 40, 0.98, 8.0, 0.1, springs, 0); - springs[1] = new Spring(320, 210, 120, 0.95, 9.0, 0.1, springs, 1); - springs[2] = new Spring(180, 170, 200, 0.90, 9.9, 0.1, springs, 2); -} - -void draw() { - background(51); - - for (Spring spring : springs) { - spring.update(); - spring.display(); - } -} - -void mousePressed() { - for (Spring spring : springs) { - spring.pressed(); - } -} - -void mouseReleased() { - for (Spring spring : springs) { - spring.released(); - } -} - -class Spring { - // Screen values - float xpos, ypos; - float tempxpos, tempypos; - int size = 20; - boolean over = false; - boolean move = false; - - // Spring simulation constants - float mass; // Mass - float k = 0.2; // Spring constant - float damp; // Damping - float rest_posx; // Rest position X - float rest_posy; // Rest position Y - - // Spring simulation variables - //float pos = 20.0; // Position - float velx = 0.0; // X Velocity - float vely = 0.0; // Y Velocity - float accel = 0; // Acceleration - float force = 0; // Force - - Spring[] friends; - int me; - - // Constructor - Spring(float x, float y, int s, float d, float m, - float k_in, Spring[] others, int id) { - xpos = tempxpos = x; - ypos = tempypos = y; - rest_posx = x; - rest_posy = y; - size = s; - damp = d; - mass = m; - k = k_in; - friends = others; - me = id; - } - - void update() { - if (move) { - rest_posy = mouseY; - rest_posx = mouseX; - } - - force = -k * (tempypos - rest_posy); // f=-ky - accel = force / mass; // Set the acceleration, f=ma == a=f/m - vely = damp * (vely + accel); // Set the velocity - tempypos = tempypos + vely; // Updated position - - force = -k * (tempxpos - rest_posx); // f=-ky - accel = force / mass; // Set the acceleration, f=ma == a=f/m - velx = damp * (velx + accel); // Set the velocity - tempxpos = tempxpos + velx; // Updated position - - - if ((overEvent() || move) && !otherOver() ) { - over = true; - } else { - over = false; - } - } - - // Test to see if mouse is over this spring - boolean overEvent() { - float disX = tempxpos - mouseX; - float disY = tempypos - mouseY; - if (sqrt(sq(disX) + sq(disY)) < size/2 ) { - return true; - } else { - return false; - } - } - - // Make sure no other springs are active - boolean otherOver() { - for (int i=0; i Date: Wed, 3 Jun 2020 20:46:36 -0700 Subject: [PATCH 234/299] New example for rotating text --- .../Typography/TextRotation/TextRotation.pde | 57 +++++++++++++++ .../data/SourceCodePro-Regular.ttf | Bin 0 -> 120548 bytes content/examples_basics.xml | 1 + .../Typography/TextRotation/TextRotation.js | 65 ++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 content/examples/Basics/Typography/TextRotation/TextRotation.pde create mode 100644 content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf create mode 100644 content/examples_p5/Basics/Typography/TextRotation/TextRotation.js diff --git a/content/examples/Basics/Typography/TextRotation/TextRotation.pde b/content/examples/Basics/Typography/TextRotation/TextRotation.pde new file mode 100644 index 000000000..b480c38d6 --- /dev/null +++ b/content/examples/Basics/Typography/TextRotation/TextRotation.pde @@ -0,0 +1,57 @@ +/** + * Text Rotation. + * + * Draws letters to the screen and rotates them at different angles. + */ + +PFont f; +float angleRotate = 0.0; + +void setup() { + size(640, 360); + background(0); + + pixelDensity(2); + + // Create the font from the .ttf file in the data folder + f = createFont("SourceCodePro-Regular.ttf", 18); + textFont(f); +} + +void draw() { + background(0); + + strokeWeight(1); + stroke(153); + + pushMatrix(); + float angle1 = radians(45); + translate(100, 180); + rotate(angle1); + text("45 DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + pushMatrix(); + float angle2 = radians(270); + translate(200, 180); + rotate(angle2); + text("270 DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + pushMatrix(); + translate(440, 180); + rotate(radians(angleRotate)); + text(int(angleRotate) % 360 + " DEGREES", 0, 0); + line(0, 0, 150, 0); + popMatrix(); + + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} diff --git a/content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf b/content/examples/Basics/Typography/TextRotation/data/SourceCodePro-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b2cff928e42a31496c603d02b4605978eba66e59 GIT binary patch literal 120548 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 Letters Words + Text Rotation Embedded Links diff --git a/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js b/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js new file mode 100644 index 000000000..85f54e5ed --- /dev/null +++ b/content/examples_p5/Basics/Typography/TextRotation/TextRotation.js @@ -0,0 +1,65 @@ +/** + * Text Rotation. + * + * Draws letters to the screen and rotates them at different angles. + */ + +var f; +var angleRotate = 0.0; + +function setup() { + var canvas = createCanvas(640, 360); + canvas.parent("p5container"); + background(0); + + // Create the font from the .ttf file in the data folder + textFont("Source Code Pro", 18); +} + +function draw() { + background(0); + + + push(); + var angle1 = radians(45); + translate(100, 180); + rotate(angle1); + noStroke(); + fill(255); + text("45 DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + push(); + var angle2 = radians(270); + translate(200, 180); + rotate(angle2); + noStroke(); + fill(255); + text("270 DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + push(); + translate(440, 180); + rotate(radians(angleRotate)); + noStroke(); + fill(255); + text(int(angleRotate) % 360 + " DEGREES", 0, 0); + strokeWeight(1); + stroke(153); + line(0, 0, 150, 0); + pop(); + + angleRotate += 0.25; + + stroke(255, 0, 0); + strokeWeight(4); + point(100, 180); + point(200, 180); + point(440, 180); +} \ No newline at end of file From 2a5abe4dbd216866ca5ad38f30f1e90b56dba5a5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 20:48:59 -0700 Subject: [PATCH 235/299] Fix error in new Text Rotation example --- .../examples/Basics/Typography/TextRotation/TextRotation.pde | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/examples/Basics/Typography/TextRotation/TextRotation.pde b/content/examples/Basics/Typography/TextRotation/TextRotation.pde index b480c38d6..8ed649178 100644 --- a/content/examples/Basics/Typography/TextRotation/TextRotation.pde +++ b/content/examples/Basics/Typography/TextRotation/TextRotation.pde @@ -10,8 +10,6 @@ float angleRotate = 0.0; void setup() { size(640, 360); background(0); - - pixelDensity(2); // Create the font from the .ttf file in the data folder f = createFont("SourceCodePro-Regular.ttf", 18); From bd1f0ce225bca78cbba01fa42761c1949734f3f5 Mon Sep 17 00:00:00 2001 From: Jeremy Douglass Date: Wed, 3 Jun 2020 21:09:13 -0700 Subject: [PATCH 236/299] Sound Tutorial - ex3-6 link sketches w/required MP3s, closes #714 --- content/static/tutorials/sound/index.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/content/static/tutorials/sound/index.html b/content/static/tutorials/sound/index.html index 20b03bc75..7f5b2ccd7 100644 --- a/content/static/tutorials/sound/index.html +++ b/content/static/tutorials/sound/index.html @@ -389,6 +389,9 @@

    Example 3, 4: Sample playback

     * different octaves. The sequencer triggers an event every 200-1000   * milliseconds randomly. Each time a sound is played a colored   * rect with a random color is displayed. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Soundfile > Sampler   */ import processing.sound.*; @@ -484,6 +487,9 @@

    Example 3, 4: Sample playback

     * Five soundfiles are mapped to the numbers on the keyboard.   * Numbers 1-5 are played back an octave lower and numbers  * 6-0 an octave higher. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Soundfile > Keyboard   */ import processing.sound.*; @@ -580,6 +586,9 @@

    Example 5, 6: Audio analysis

     * of sound. Change the variable bands to get more or less   * spectral bands to work with. The smooth_factor variable determines   * how much the signal will be smoothed on a scale form 0-1. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Analysis > FFTSpectrum   */ import processing.sound.*; @@ -653,6 +662,9 @@

    Example 5, 6: Audio analysis

     * stream of sound. In this case a sample is analyzed. The smoothFactor  * variable determines how much the signal will be smoothed on a scale  * from 0 - 1. + *  + Load this example with included MP3s from:  +   Examples > Libraries > Sound > Analysis > PeakAmplitude   */ import processing.sound.*; From 58bcc561d9e32bce2e93f6598f669b4b6b8aaecc Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:37:47 -0700 Subject: [PATCH 237/299] Sound Tutorial code example update and cleanup --- content/static/tutorials/sound/index.html | 868 ++++++++++++---------- 1 file changed, 464 insertions(+), 404 deletions(-) diff --git a/content/static/tutorials/sound/index.html b/content/static/tutorials/sound/index.html index 7f5b2ccd7..e1fada6b0 100644 --- a/content/static/tutorials/sound/index.html +++ b/content/static/tutorials/sound/index.html @@ -233,140 +233,140 @@

    Example 1, 2: Synthesizer

    -/**
    - * Processing Sound Library, Example 1
    - * 
    - * Five sine waves are layered to construct a cluster of frequencies. 
    - * This method is called additive synthesis. Use the mouse position 
    - * inside the display window to detune the cluster.
    - */
    -
    -import processing.sound.*;
    -
    -SinOsc[] sineWaves; // Array of sines
    -float[] sineFreq; // Array of frequencies
    -int numSines = 5; // Number of oscillators to use
    -
    -void setup() {  
    -  size(640, 360);
    -  background(255);
    -
    -  sineWaves = new SinOsc[numSines]; // Initialize the oscillators
    -  sineFreq = new float[numSines]; // Initialize array for Frequencies
    -
    -  for (int i = 0; i < numSines; i++) {
    -    // Calculate the amplitude for each oscillator
    -    float sineVolume = (1.0 / numSines) / (i + 1);
    -    // Create the oscillators
    -    sineWaves[i] = new SinOsc(this);
    -    // Start Oscillators
    -    sineWaves[i].play();
    -    // Set the amplitudes for all oscillators
    -    sineWaves[i].amp(sineVolume);
    -  }
    +/**
    + * Processing Sound Library, Example 1
    + * 
    + * Five sine waves are layered to construct a cluster of frequencies. 
    + * This method is called additive synthesis. Use the mouse position 
    + * inside the display window to detune the cluster.
    + */
    +
    +import processing.sound.*;
    +
    +SinOsc[] sineWaves; // Array of sines
    +float[] sineFreq; // Array of frequencies
    +int numSines = 5; // Number of oscillators to use
    +
    +void setup() {  
    +  size(640, 360);
    +  background(255);
    +
    +  sineWaves = new SinOsc[numSines]; // Initialize the oscillators
    +  sineFreq = new float[numSines]; // Initialize array for Frequencies
    +
    +  for (int i = 0; i < numSines; i++) {
    +    // Calculate the amplitude for each oscillator
    +    float sineVolume = (1.0 / numSines) / (i + 1);
    +    // Create the oscillators
    +    sineWaves[i] = new SinOsc(this);
    +    // Start Oscillators
    +    sineWaves[i].play();
    +    // Set the amplitudes for all oscillators
    +    sineWaves[i].amp(sineVolume);
    +  }
     }
     
    -void draw() {
    -  //Map mouseY from 0 to 1
    -  float yoffset = map(mouseY, 0, height, 0, 1);
    -  //Map mouseY logarithmically to 150 - 1150 to create a base frequency range
    -  float frequency = pow(1000, yoffset) + 150;
    -  //Use mouseX mapped from -0.5 to 0.5 as a detune argument
    -  float detune = map(mouseX, 0, width, -0.5, 0.5);
    -
    -  for (int i = 0; i < numSines; i++) { 
    -    sineFreq[i] = frequency * (i + 1 * detune);
    -    // Set the frequencies for all oscillators
    -    sineWaves[i].freq(sineFreq[i]);
    -  }
    +void draw() {
    +  //Map mouseY from 0 to 1
    +  float yoffset = map(mouseY, 0, height, 0, 1);
    +  //Map mouseY logarithmically to 150 - 1150 to create a base frequency range
    +  float frequency = pow(1000, yoffset) + 150;
    +  //Use mouseX mapped from -0.5 to 0.5 as a detune argument
    +  float detune = map(mouseX, 0, width, -0.5, 0.5);
    +
    +  for (int i = 0; i < numSines; i++) { 
    +    sineFreq[i] = frequency * (i + 1 * detune);
    +    // Set the frequencies for all oscillators
    +    sineWaves[i].freq(sineFreq[i]);
    +  }
     }
     	

    -/**
    - * Processing Sound Library, Example 2
    - * 
    - * This sketch shows how to use envelopes and oscillators. 
    - * Envelopes describe to course of amplitude over time. 
    - * The Sound library provides an ASR envelope which stands for 
    - * attack, sustain, release. 
    - * 
    - *       .________
    - *      .          ---
    - *     .              --- 
    - *    .                  ---
    - *    A       S        R 
    - */
    -
    -import processing.sound.*;
    -
    -// Oscillator and envelope 
    -TriOsc triOsc;
    -Env env; 
    -
    -// Times and levels for the ASR envelope
    -float attackTime = 0.001;
    -float sustainTime = 0.004;
    -float sustainLevel = 0.2;
    -float releaseTime = 0.2;
    -
    -// This is an octave in MIDI notes.
    -int[] midiSequence = { 
    -  60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72
    -}; 
    -
    -// Set the duration between the notes
    -int duration = 200;
    -// Set the note trigger
    -int trigger = 0; 
    -
    -// An index to count up the notes
    -int note = 0; 
    -
    -void setup() {
    -  size(640, 360);
    -  background(255);
    -
    -  // Create triangle wave and envelope 
    -  triOsc = new TriOsc(this);
    -  env  = new Env(this);
    +/**
    + * Processing Sound Library, Example 2
    + * 
    + * This sketch shows how to use envelopes and oscillators. 
    + * Envelopes describe to course of amplitude over time. 
    + * The Sound library provides an ASR envelope which stands for 
    + * attack, sustain, release. 
    + * 
    + *       .________
    + *      .          ---
    + *     .              --- 
    + *    .                  ---
    + *    A       S        R 
    + */
    +
    +import processing.sound.*;
    +
    +TriOsc triOsc;
    +Env env; 
    +
    +// Times and levels for the ASR envelope
    +float attackTime = 0.001;
    +float sustainTime = 0.004;
    +float sustainLevel = 0.3;
    +float releaseTime = 0.2;
    +
    +// This is an octave in MIDI notes.
    +int[] midiSequence = { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72 }; 
    +
    +// Play a new note every 200ms
    +int duration = 200;
    +
    +// This variable stores the point in time when the next note should be triggered
    +int trigger = millis(); 
    +
    +// An index to count up the notes
    +int note = 0; 
    +
    +void setup() {
    +  size(640, 360);
    +  background(255);
    +
    +  // Create triangle wave and start it
    +  triOsc = new TriOsc(this);
    +
    +  // Create the envelope 
    +  env = new Env(this);
     }
     
    -void draw() { 
    +void draw() { 
     
    -  // If value of trigger is equal to the computer clock and if not all 
    -  // notes have been played yet, the next note gets triggered.
    -  if ((millis() > trigger) && (note<midiSequence.length)) {
    +  // If the determined trigger moment in time matches up with the computer clock and
    +  // the sequence of notes hasn't been finished yet, the next note gets played.
    +  if ((millis() > trigger) && (note<midiSequence.length)) {
     
    -    // midiToFreq transforms the MIDI value into a frequency in Hz which we use 
    -    //to control the triangle oscillator with an amplitute of 0.8
    -    triOsc.play(midiToFreq(midiSequence[note]), 0.8);
    +    // midiToFreq transforms the MIDI value into a frequency in Hz which we use to
    +    // control the triangle oscillator with an amplitute of 0.5
    +    triOsc.play(midiToFreq(midiSequence[note]), 0.5);
     
    -    // The envelope gets triggered with the oscillator as input and the times and 
    -    // levels we defined earlier
    -    env.play(triOsc, attackTime, sustainTime, sustainLevel, releaseTime);
    +    // The envelope gets triggered with the oscillator as input and the times and
    +    // levels we defined earlier
    +    env.play(triOsc, attackTime, sustainTime, sustainLevel, releaseTime);
     
    -    // Create the new trigger according to predefined durations and speed
    -    trigger = millis() + duration;
    +    // Create the new trigger according to predefined duration
    +    trigger = millis() + duration;
     
    -    // Advance by one note in the midiSequence;
    -    note++; 
    +    // Advance by one note in the midiSequence;
    +    note++; 
     
    -    // Loop the sequence
    -    if (note == 12) {
    -      note = 0;
    -    }
    -  }
    -} 
    +    // Loop the sequence, notice the jitter
    +    if (note == 12) {
    +      note = 0;
    +    }
    +  }
    +} 
     
    -// This function calculates the respective frequency of a MIDI note
    -float midiToFreq(int note) {
    -  return (pow(2, ((note-69)/12.0)))*440;
    +// This helper function calculates the respective frequency of a MIDI note
    +float midiToFreq(int note) {
    +  return (pow(2, ((note-69)/12.0))) * 440;
     }
     
    -
    +

    @@ -380,100 +380,96 @@

    Example 3, 4: Sample playback

    -/**
    - * Processing Sound Library, Example 3
    - * 
    - * This example shows how to make a simple sampler and sequencer 
    - * with the Sound library. In this sketch, five different samples are 
    - * loaded and played back at different pitches, in this case five 
    - * different octaves. The sequencer triggers an event every 200-1000 
    - * milliseconds randomly. Each time a sound is played a colored 
    - * rect with a random color is displayed.
    - * 
    - Load this example with included MP3s from: 
    -   Examples > Libraries > Sound > Soundfile > Sampler 
    - */
    -
    -import processing.sound.*;
    -
    -SoundFile[] files;
    -
    -// Create an array of values which represent the octaves. 
    -// 1.0 is playback at normal speed, 0.5 is half and therefore 
    -// one octave down. 2.0 is double so one octave up.
    -float[] octave = { 
    -  0.25, 0.5, 1.0, 2.0, 4.0
    -};
    -
    -// The playSound array is defining how many samples will be 
    -// played at each trigger event
    -int[] playSound = { 
    -  1, 1, 1, 1, 1
    -};
    -
    -// The trigger is an integer number in milliseconds so we 
    -// can schedule new events in the draw loop
    -int trigger=0;
    -
    -// This array holds the pixel positions of the rectangles 
    -// that are drawn each event
    -int[] posx = {
    -  0, 128, 256, 384, 512
    -};
    -
    -
    -void setup() {
    -  size(640, 360);
    -  background(255);
    -
    -  // Create an array of 5 empty soundfiles
    -  files = new SoundFile[5];
    -
    -  // Load 5 soundfiles from a folder in a for loop. By naming 
    -  // the files 1., 2., 3., [...], n.aif it is easy to iterate 
    -  // through the folder and load all files in one line of code.
    -  for (int i = 0; i < files.length; i++) {
    -    files[i] = new SoundFile(this, (i+1) + ".aif");
    -  }
    +/**
    + * Processing Sound Library, Example 3
    + * 
    + * This example shows how to make a simple sampler and sequencer 
    + * with the Sound library. In this sketch, five different samples are 
    + * loaded and played back at different pitches, in this case five 
    + * different octaves. The sequencer triggers an event every 200-1000 
    + * milliseconds randomly. Each time a sound is played a colored 
    + * rect with a random color is displayed.
    + * 
    + * Load this example with included sound files from the Processing Editor: 
    + * Examples > Libraries > Sound > Soundfile > Sampler 
    + */
    +
    +import processing.sound.*;
    +
    +SoundFile[] file;
    +
    +// Define the number of samples 
    +int numsounds = 5;
    +
    +// Create an array of values which represent the octaves. 
    +// 1.0 is playback at normal speed, 0.5 is half and 
    +// therefore one octave down. 2.0 is double so one octave up.
    +float[] octave = {0.25, 0.5, 1.0, 2.0, 4.0};
    +
    +// The playSound array is defining how many samples will 
    +// be played at each trigger event
    +int[] playSound = {1, 1, 1, 1, 1};
    +
    +// The trigger is an integer number in milliseconds so we 
    +// can schedule new events in the draw loop
    +int trigger;
    +
    +// This array holds the pixel positions of the rectangles 
    +// which are drawn each event
    +int[] posx = {0, 128, 256, 384, 512};
    +
    +
    +void setup() {
    +  size(640, 360);
    +  background(255);
    +
    +  // Create an array of empty soundfiles
    +  file = new SoundFile[numsounds];
    +
    +  // Load 5 soundfiles from a folder in a for loop. 
    +  // By naming the files 1., 2., 3., n.aif it is easy to iterate
    +  // through the folder and load all files in one line of code.
    +  for (int i = 0; i < numsounds; i++) {
    +    file[i] = new SoundFile(this, (i+1) + ".aif");
    +  }
    +
    +  // Create a trigger which will be the basis for our random sequencer. 
    +  trigger = millis();
     }
     
    -void draw() {
    -
    -  // If the determined trigger moment in time matches up with 
    -  // the computer clock events get triggered.
    -  if (millis() > trigger) {
    -
    -    // Redraw the background every time to erase old rects
    -    background(255);
    -
    -    // By iterating through the playSound array we check for 
    -    // 1 or 0, 1 plays a sound and draws a rect, for 0 nothing happens
    -
    -    for (int i = 0; i < files.length; i++) {      
    -      // Check which indexes are 1 and 0.
    -      if (playSound[i] == 1) {
    -        float rate;
    -        // Choose a random color and get set to noStroke()
    -        fill(int(random(255)), int(random(255)), int(random(255)));
    -        noStroke();
    -        // Draw the rect in the positions we defined earlier in posx
    -        rect(posx[i], 50, 128, 260);
    -        // Choose a random index of the octave array
    -        rate = octave[int(random(0, 5))];
    -        // Play the soundfile from the array with the respective 
    -        // rate and loop set to false
    -        files[i].play(rate, 1.0);
    -      }
    -
    -      // Renew the indexes of playSound so that at the next event 
    -      // the order is different and randomized.
    -      playSound[i] = int(random(0, 2));
    -    }
    -
    -    // Create a new triggertime in the future, with a random offset 
    -    // between 200 and 1000 milliseconds
    -    trigger = millis() + int(random(200, 1000));
    -  }
    +void draw() {
    +
    +  // If the determined trigger moment in time matches up with the 
    +  // computer clock events get triggered.
    +  if (millis() > trigger) {
    +    // Redraw the background every time to erase old rects
    +    background(255);
    +
    +    // By iterating through the playSound array we check for 1 or 0, 
    +    // 1 plays a sound and draws a rect, for 0 nothing happens.
    +
    +    for (int i = 0; i < numsounds; i++) {      
    +      // Check which indexes are 1 and 0.
    +      if (playSound[i] == 1) {
    +        float rate;
    +        // Choose a random color and get set to noStroke()
    +        fill(int(random(255)), int(random(255)), int(random(255)));
    +        noStroke();
    +        // Draw the rect in the positions we defined earlier in posx
    +        rect(posx[i], 50, 128, 260);
    +        // Choose a random index of the octave array
    +        rate = octave[int(random(0, 5))];
    +        // Play the soundfile from the array with the respective rate and loop set to false
    +        file[i].play(rate, 1.0);
    +      }
    +
    +      // Renew the indexes of playSound so that at the next event the order is different and randomized.
    +      playSound[i] = int(random(0, 2));
    +    }
    +
    +    // Create a new triggertime in the future, with a random offset between 200 and 1000 milliseconds
    +    trigger = millis() + int(random(200, 1000));
    +  }
     }
     
     
    @@ -481,84 +477,150 @@

    Example 3, 4: Sample playback


    -/**
    - * Processing Sound Library, Example 4
    - * 
    - * Five soundfiles are mapped to the numbers on the keyboard. 
    - * Numbers 1-5 are played back an octave lower and numbers
    - * 6-0 an octave higher.
    - * 
    - Load this example with included MP3s from: 
    -   Examples > Libraries > Sound > Soundfile > Keyboard 
    - */
    -
    -import processing.sound.*;
    -
    -AudioDevice device;
    -SoundFile[] file;
    -
    -int red, green, blue;
    -
    -void setup() {
    -  size(640, 360);
    -  background(255);
    -
    -  // Create an AudioDevice with low buffer size 
    -  // and create an array containing 5 empty soundfiles
    -  device = new AudioDevice(this, 48000, 32);
    -  file = new SoundFile[5];
    -
    -  // Load 5 soundfiles from a folder in a for loop. 
    -  for (int i = 0; i < file.length; i++) {
    -    file[i] = new SoundFile(this, (i+1) + ".aif");
    -  }
    +/**
    + * Processing Sound Library, Example 4
    + * 
    + * This example shows how to make a simple keyboard-triggered sampler with the Sound
    + * library. In this sketch 5 different short samples are loaded and played back at
    + * different speeds, which also changes their perceived pitch by one or two octaves.
    + * 
    + * Load this example with included sound files from the Processing Editor:  
    + * Examples > Libraries > Sound > Soundfile > Keyboard 
    + */
    +
    +import processing.sound.*;
    +
    +SoundFile[] file;
    +
    +// Define the number of samples 
    +int numsounds = 5;
    +
    +// Define a variable to store the randomly generated background color in
    +int backgroundColor[] = {255, 255, 255};
    +
    +void setup() {
    +  size(640, 360);
    +
    +  // Create a Sound renderer and an array of empty soundfiles
    +  file = new SoundFile[numsounds];
    +
    +  // Load 5 soundfiles from a folder in a for loop. By naming
    +  // the files 1.aif, 2.aif, 3.aif, ..., n.aif it is easy to iterate
    +  // through the folder and load all files in one line of code.
    +  for (int i = 0; i < numsounds; i++) {
    +    file[i] = new SoundFile(this, (i+1) + ".aif");
    +  }
     }
     
    -void draw() {
    -  background(red, green, blue);
    +void draw() {
    +  background(backgroundColor[0], backgroundColor[1], backgroundColor[2]);
     }
     
    -void keyPressed() {
    -  // Set a random background color each time you hit then number keys
    -  red=int(random(255));
    -  green=int(random(255));
    -  blue=int(random(255));
    -
    -  // Assign a sound to each number on your keyboard. 1-5 play at
    -  // an octave below the original pitch of the file, 6-0 play at
    -  // an octave above.
    -  switch(key) {
    -  case '1':
    -    file[0].play(0.5, 1.0);
    -    break;
    -  case '2':
    -    file[1].play(0.5, 1.0);
    -    break;
    -  case '3':
    -    file[2].play(0.5, 1.0);
    -    break;
    -  case '4':
    -    file[3].play(0.5, 1.0);
    -    break;
    -  case '5':
    -    file[4].play(0.5, 1.0);
    -    break;
    -  case '6':
    -    file[0].play(2.0, 1.0);
    -    break;
    -  case '7':
    -    file[1].play(2.0, 1.0);
    -    break;
    -  case '8':
    -    file[2].play(2.0, 1.0);
    -    break;
    -  case '9':
    -    file[3].play(2.0, 1.0);
    -    break;
    -  case '0':
    -    file[4].play(2.0, 1.0);
    -    break;
    -  }
    +void keyPressed() {
    +  // We use a boolean helper variable to determine whether one of the branches
    +  // of the switch-statement was activated or not
    +  boolean validKey = true;
    +
    +  switch(key) {
    +  case 'a':
    +    file[0].play(0.5, 1.0);
    +    break;
    +
    +  case 's':
    +    file[1].play(0.5, 1.0);
    +    break;
    +
    +  case 'd':
    +    file[2].play(0.5, 1.0);
    +    break;
    +
    +  case 'f':
    +    file[3].play(0.5, 1.0);
    +    break;
    +
    +  case 'g':
    +    file[4].play(0.5, 1.0);
    +    break;
    +
    +  case 'h':
    +    file[0].play(1.0, 1.0);
    +    break;
    +
    +  case 'j':
    +    file[1].play(1.0, 1.0);
    +    break;
    +
    +  case 'k':
    +    file[2].play(1.0, 1.0);
    +    break;
    +
    +  case 'l':
    +    file[3].play(1.0, 1.0);
    +    break;
    +
    +  case ';':
    +    file[4].play(1.0, 1.0);
    +    break;
    +
    +  case '\'':
    +    file[0].play(2.0, 1.0);
    +    break;
    +
    +  case 'q':
    +    file[1].play(2.0, 1.0);
    +    break;
    +
    +  case 'w':
    +    file[2].play(2.0, 1.0);
    +    break;    
    +
    +  case 'e':
    +    file[3].play(2.0, 1.0);
    +    break;
    +
    +  case 'r':
    +    file[4].play(2.0, 1.0);
    +    break; 
    +
    +  case 't':
    +    file[0].play(3.0, 1.0);
    +    break;
    +
    +  case 'y':
    +    file[1].play(3.0, 1.0);
    +    break;
    +
    +  case 'u':
    +    file[2].play(3.0, 1.0);
    +    break;    
    +
    +  case 'i':
    +    file[3].play(3.0, 1.0);
    +    break;
    +
    +  case 'o':
    +    file[4].play(3.0, 1.0);
    +    break;
    +
    +  case 'p':
    +    file[0].play(4.0, 1.0);
    +    break;    
    +
    +  case '[':
    +    file[1].play(4.0, 1.0);
    +    break;
    +
    +    // no valid key was pressed, store that information
    +  default:
    +    validKey = false;
    +  }
    +
    +  // If a new sample playback was triggered, change the background color
    +  if (validKey) {
    +    for (int i = 0; i < 3; i++) {
    +      backgroundColor[i] = int(random(255));
    +    }
    +  }
     }
     
     
    @@ -579,75 +641,74 @@

    Example 5, 6: Audio analysis

    -/**
    - * Processing Sound Library, Example 5
    - * 
    - * This sketch shows how to use the FFT class to analyze a stream  
    - * of sound. Change the variable bands to get more or less 
    - * spectral bands to work with. The smooth_factor variable determines 
    - * how much the signal will be smoothed on a scale form 0-1.
    - * 
    - Load this example with included MP3s from: 
    -   Examples > Libraries > Sound > Analysis > FFTSpectrum 
    - */
    -
    -import processing.sound.*;
    -
    -// Declare the processing sound variables 
    -SoundFile sample;
    -FFT fft;
    -AudioDevice device;
    -
    -// Declare a scaling factor
    -int scale = 5;
    -
    -// Define how many FFT bands we want
    -int bands = 128;
    -
    -// declare a drawing variable for calculating rect width
    -float r_width;
    -
    -// Create a smoothing vector
    -float[] sum = new float[bands];
    -
    -// Create a smoothing factor
    -float smooth_factor = 0.2;
    -
    -void setup() {
    -  size(640, 360);
    -  background(255);
    -
    -  // If the Buffersize is larger than the FFT Size, the FFT will fail
    -  // so we set Buffersize equal to bands
    -  device = new AudioDevice(this, 44000, bands);
    -
    -  // Calculate the width of the rects depending on how many bands we have
    -  r_width = width/float(bands);
    -
    -  // Load and play a soundfile and loop it. This has to be called 
    -  // before the FFT is created.
    -  sample = new SoundFile(this, "beat.aiff");
    -  sample.loop();
    -
    -  // Create and patch the FFT analyzer
    -  fft = new FFT(this, bands);
    -  fft.input(sample);
    -}      
    -
    -void draw() {
    -  // Set background color, noStroke and fill color
    -  background(204);
    -  fill(0, 0, 255);
    -  noStroke();
    -
    -  fft.analyze();
    -  for (int i = 0; i < bands; i++) {
    -    // Smooth the FFT data by smoothing factor
    -    sum[i] += (fft.spectrum[i] - sum[i]) * smooth_factor;
    -
    -    // Draw the rects with a scale factor
    -    rect( i*r_width, height, r_width, -sum[i]*height*scale );
    -  }
    +/**
    + * Processing Sound Library, Example 5
    + * 
    + * This sketch shows how to use the FFT class to analyze a stream
    + * of sound. Change the number of bands to get more spectral bands
    + * (at the expense of more coarse-grained time resolution of the spectrum).
    + * 
    + * Load this example with included sound files from the Processing Editor: 
    + * Examples > Libraries > Sound > Analysis > FFTSpectrum 
    + */
    +
    +import processing.sound.*;
    +
    +// Declare the sound source and FFT analyzer variables
    +SoundFile sample;
    +FFT fft;
    +
    +// Define how many FFT bands to use (this needs to be a power of two)
    +int bands = 128;
    +
    +// Define a smoothing factor which determines how much the spectrums of consecutive
    +// points in time should be combined to create a smoother visualisation of the spectrum.
    +// A smoothing factor of 1.0 means no smoothing (only the data from the newest analysis
    +// is rendered), decrease the factor down towards 0.0 to have the visualisation update
    +// more slowly, which is easier on the eye.
    +float smoothingFactor = 0.2;
    +
    +// Create a vector to store the smoothed spectrum data in
    +float[] sum = new float[bands];
    +
    +// Variables for drawing the spectrum:
    +// Declare a scaling factor for adjusting the height of the rectangles
    +int scale = 5;
    +// Declare a drawing variable for calculating the width of the 
    +float barWidth;
    +
    +public void setup() {
    +  size(640, 360);
    +  background(255);
    +
    +  // Calculate the width of the rects depending on how many bands we have
    +  barWidth = width/float(bands);
    +
    +  // Load and play a soundfile and loop it.
    +  sample = new SoundFile(this, "beat.aiff");
    +  sample.loop();
    +
    +  // Create the FFT analyzer and connect the playing soundfile to it.
    +  fft = new FFT(this, bands);
    +  fft.input(sample);
    +}
    +
    +public void draw() {
    +  // Set background color, noStroke and fill color
    +  background(125, 255, 125);
    +  fill(255, 0, 150);
    +  noStroke();
    +
    +  // Perform the analysis
    +  fft.analyze();
    +
    +  for (int i = 0; i < bands; i++) {
    +    // Smooth the FFT spectrum data by smoothing factor
    +    sum[i] += (fft.spectrum[i] - sum[i]) * smoothingFactor;
    +
    +    // Draw the rectangles, adjust their height using the scale factor
    +    rect(i*barWidth, height, barWidth, -sum[i]*height*scale);
    +  }
     }
     
     
    @@ -655,60 +716,59 @@

    Example 5, 6: Audio analysis


    -/**
    - * Processing Sound Library, Example 6
    - * 
    - * This sketch shows how to use the Amplitude class to analyze a
    - * stream of sound. In this case a sample is analyzed. The smoothFactor
    - * variable determines how much the signal will be smoothed on a scale
    - * from 0 - 1.
    - * 
    - Load this example with included MP3s from: 
    -   Examples > Libraries > Sound > Analysis > PeakAmplitude 
    - */
    -
    -import processing.sound.*;
    -
    -// Declare the processing sound variables 
    -SoundFile sample;
    -Amplitude rms;
    -
    -// Declare a scaling factor
    -float scale = 5.0;
    -
    -// Declare a smooth factor
    -float smoothFactor = 0.25;
    -
    -// Used for smoothing
    -float sum;
    -
    -void setup() {
    -  size(640, 360);
    -
    -  //Load and play a soundfile and loop it
    -  sample = new SoundFile(this, "beat.aiff");
    -  sample.loop();
    -
    -  // Create and patch the rms tracker
    -  rms = new Amplitude(this);
    -  rms.input(sample);
    -}      
    -
    -void draw() {
    -  // Set background color, noStroke and fill color
    -  background(0, 0, 255);
    -  noStroke();
    -  fill(255, 0, 150);
    -
    -  // Smooth the rms data by smoothing factor
    -  sum += (rms.analyze() - sum) * smoothFactor;  
    -
    -  // rms.analyze() return a value between 0 and 1. It's
    -  // scaled to height/2 and then multiplied by a scale factor
    -  float rmsScaled = sum * (height/2) * scale;
    -
    -  // Draw an ellipse at a size based on the audio analysis
    -  ellipse(width/2, height/2, rmsScaled, rmsScaled);
    +/**
    + * Processing Sound Library, Example 6
    + * 
    + * This sketch shows how to use the Amplitude class to analyze the changing
    + * "loudness" of a stream of sound. In this case an audio sample is analyzed.
    + * 
    + * Load this example with included sound files from the Processing Editor: 
    + * Examples > Libraries > Sound > Analysis > PeakAmplitude 
    + */
    +
    +import processing.sound.*;
    +
    +// Declare the processing sound variables 
    +SoundFile sample;
    +Amplitude rms;
    +
    +// Declare a smooth factor to smooth out sudden changes in amplitude.
    +// With a smooth factor of 1, only the last measured amplitude is used for the
    +// visualisation, which can lead to very abrupt changes. As you decrease the
    +// smooth factor towards 0, the measured amplitudes are averaged across frames,
    +// leading to more pleasant gradual changes
    +float smoothingFactor = 0.25;
    +
    +// Used for storing the smoothed amplitude value
    +float sum;
    +
    +public void setup() {
    +  size(640, 360);
    +
    +  //Load and play a soundfile and loop it
    +  sample = new SoundFile(this, "beat.aiff");
    +  sample.loop();
    +
    +  // Create and patch the rms tracker
    +  rms = new Amplitude(this);
    +  rms.input(sample);
    +}      
    +
    +public void draw() {
    +  // Set background color, noStroke and fill color
    +  background(125, 255, 125);
    +  noStroke();
    +  fill(255, 0, 150);
    +
    +  // smooth the rms data by smoothing factor
    +  sum += (rms.analyze() - sum) * smoothingFactor;
    +
    +  // rms.analyze() return a value between 0 and 1. It's
    +  // scaled to height/2 and then multiplied by a fixed scale factor
    +  float rms_scaled = sum * (height/2) * 5;
    +
    +  // We draw a circle whose size is coupled to the audio analysis
    +  ellipse(width/2, height/2, rms_scaled, rms_scaled);
     }
     
     
    From 4618c60a0bb8140f56f0c28cfa76c72f8a5ddbe7 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:47:19 -0700 Subject: [PATCH 238/299] Removing Exhibition from site navigation --- templates/template.nav.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/templates/template.nav.php b/templates/template.nav.php index 92ba0e37d..01dd329bd 100755 --- a/templates/template.nav.php +++ b/templates/template.nav.php @@ -8,9 +8,9 @@ 'Learning' => array('/learning/', 1), 'Tutorials' => array('/tutorials/', 2), - 'Examples' => array('/examples/', 2), - 'Books' => array('/books/', 2), - 'Handbook' => array('/handbook/', 2), + 'Examples' => array('/examples/', 2), + 'Books' => array('/books/', 2), + 'Handbook' => array('/handbook/', 2), 'Reference' => array('/reference/', 1), @@ -21,7 +21,7 @@ 'Environment' => array('/reference/environment/', 2), 'Download' => array('/download/', 1), - 'Donate' => array('/download/support.html', 1), + 'Donate' => array('/download/support.html', 1), 'Shop' => array('/shop/', 1), @@ -58,7 +58,7 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . l('Download', $section == 'Download') . "
    \n"; $html .= "\t\t\t\t\t" . l('Donate', $section == 'Donate') . "

    \n"; - $html .= "\t\t\t\t\t" . l('Exhibition', $section == 'Exhibition') . "

    \n"; + #$html .= "\t\t\t\t\t" . l('Exhibition', $section == 'Exhibition') . "

    \n"; $html .= "\t\t\t\t\t" . l('Reference', $section == 'Reference') . "
    \n"; $html .= "\t\t\t\t\t" . l('Libraries', $section == 'Libraries') . "
    \n"; @@ -82,7 +82,7 @@ function navigation($section = '') $html .= "\t\t\t\t\t" . "»Wiki
    \n"; $html .= "\t\t\t\t\t" . "»FAQ
    \n"; $html .= "\t\t\t\t\t" . "»Twitter
    \n"; - $html .= "\t\t\t\t\t" . "»Facebook
    \n"; + #$html .= "\t\t\t\t\t" . "»Facebook
    \n"; $html .= "\t\t\t\t\t" . "»Medium
    \n"; $html .= "\t\t\t\t\n"; From 2b7c2e615069ff9100383aad62bdbc8691236bdd Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:52:21 -0700 Subject: [PATCH 239/299] Remove Exhibition from site navigation for the Reference --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index a754b73e7..cbe313cb0 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -4,7 +4,7 @@ Download
    Donate

    - Exhibition

    + Reference
    Libraries
    From ad8713cc8ec2f0b4d493bf0ba4bf7b657aa6ac6d Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 21:53:50 -0700 Subject: [PATCH 240/299] Update nav.web.template.html --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index cbe313cb0..3a6d60507 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -28,6 +28,6 @@ »Wiki
    »FAQ
    »Twitter
    - »Facebook
    + »Medium \ No newline at end of file From abc68760856dc32e5c480942b711f24385c6d9ab Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 22:04:41 -0700 Subject: [PATCH 241/299] Update Creative Commons license embed on reference pages --- java_generate/templates/class.template.html | 31 +------------------ java_generate/templates/generic.template.html | 31 +------------------ 2 files changed, 2 insertions(+), 60 deletions(-) diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 411377a94..908e61656 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -89,37 +89,8 @@ - diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 4d31c053a..901972be3 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -88,37 +88,8 @@ - From 8f77bd6545c648f248209835ed6d99648c41d3e5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 3 Jun 2020 22:18:07 -0700 Subject: [PATCH 242/299] Attempt to get Creative Commons image to load by adding to Processing site --- img/cc.png | Bin 0 -> 1672 bytes java_generate/templates/class.template.html | 2 +- java_generate/templates/generic.template.html | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 img/cc.png diff --git a/img/cc.png b/img/cc.png new file mode 100644 index 0000000000000000000000000000000000000000..4acf8c4ec36d493f16cdc812c3a318b96eaa9181 GIT binary patch literal 1672 zcmYk+X*Ane9|!Qi>FA=Q(P%AcC1aOXZKYKmq}KG5TFdC;p(Wbq85+h;D)xPus3o+h zQpX-iL=YrIRy0J@r)oTyXsMyp%vh&2fA8jdKKFj_@0|Pco}26L=B%Wkp#T7Y62`^B z6Kp?lA&wsbcki=%60nfLE}pIckf;j)Dd_;PdjR%F0EjUGfR!KsxJCj1Ra{9R*9pA) z?E|zc8UQFo_3l!(g=jP_# zNTpM6BoZlTa`H83VgfWJ7Eg&^NnX9093MY4CKijwC&tDOjgE;&M-PccUx`HHLg697 zsAyC$CJ>DA`J;TEh$j>Xcp@%W$QAJUT;a$FNWkF;I3s)xhd(^bA0Fbe*@sx{5f*D? zki{7s1Pu=i9O`GWSp7r&{X@)tc0ZHNWU~AESfJkCK~PW60E5xr-PhaO&7{-&y1M#k zUA;6~50%znFdG}hJE)z#M5)I6`Qt*x!8uC6Vwsv=dESC*GmmXgXVo{*jpONqoML}Kw_ zatm?`^74za^Ru(EGqN%=GBeUL(=t-i2&u^_DJhQ$csv20oPwYljf#%> zDJtS8Ttq~~qp+}t*wEm>dqF`#0sjv0_w{r4a0g@WU~gwg_*gj znW?FXiHWJvB_ksv6bfaCG6Z8_XaEMKuWz8Mr=z2zjX;7yz|X$UKp@trPc|qq5&lC>n^S%xO`shEc~)ee0H3jL{-Q(V8y4=t)So zU5-Xa*n%eBFT!P)(~uc5$T$>>ovJ!Ea%gb zlrX&kbu7~8>i1vS6U!QA^G?$3DNdw z-`qr3Fc`Lf0Y2tc#C)fyo%GoQ&CkZ2&tc{gDg{TU69jM?xjsaK_R$N8+~t!j0<5^w#> z#wB^TN}9~&koTIQoZ8hZTCiYovxD-dtDU)NL<5pAROTO7n4|Dk1(KAs4?hX3JUvqo zUa-8_9+=j$@q1tAh-w-3sPz1^YF}n4b>~-`2fpH7r#n#Mz1)j8yFOJ21>B0aKP#~Cwk)~uOBqcpqNS5X?`^8-6BOB6d}AHRdvMVClVY)(6! zx1x3iO=1eq@a(N4)u|GnHnn8dbm=8|vWms`@feka=GLWOHl89D0jsjo3%X05$+urT zVq8{ez%h2)-c3R*Ga3H~62Hu)dl5Evkj57p3Ou^)fGW*K=C)8+lcd4}_Z^ z1-qe{%;LNX_?bG=^2(>*P8GY}3MBn_Q;ngspo#P?`;O*s`O>&{nRGOQPhs^zOa-jclI>XiQ$xdOhGkANGqnUeS7LiWJ21v}pXJ9#tlJ zJnn5_2jiW`EC#=q5h_(*{ud#_(h^ZEl}*=GJqApY6UEc9DLA_S-2`+PA+9y_R<$w~ z-jpRZN}bw$^Czu@^C-^c0U0Od)lI7YFX>-J_D2>D_5&BpZ)3J`%*HUH+EZ8~_zwUW MM>mI#8$oG*16KD<`Tzg` literal 0 HcmV?d00001 diff --git a/java_generate/templates/class.template.html b/java_generate/templates/class.template.html index 908e61656..96634b4c1 100644 --- a/java_generate/templates/class.template.html +++ b/java_generate/templates/class.template.html @@ -89,7 +89,7 @@ diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 901972be3..be8235926 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -88,7 +88,7 @@ From b7666866d9f8900a6020cf747cba01069e6acddd Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Thu, 4 Jun 2020 10:57:22 -0700 Subject: [PATCH 243/299] Updates to some of the oldest examples to fit with current style --- .../Structure/Coordinates/Coordinates.pde | 22 ++++++------- .../examples/Basics/Structure/Loop/Loop.pde | 20 ++++-------- .../Basics/Structure/NoLoop/NoLoop.pde | 32 +++++++------------ .../Basics/Structure/SetupDraw/SetupDraw.pde | 30 ++++++++--------- 4 files changed, 44 insertions(+), 60 deletions(-) diff --git a/content/examples/Basics/Structure/Coordinates/Coordinates.pde b/content/examples/Basics/Structure/Coordinates/Coordinates.pde index 222ab50d6..dce834d05 100644 --- a/content/examples/Basics/Structure/Coordinates/Coordinates.pde +++ b/content/examples/Basics/Structure/Coordinates/Coordinates.pde @@ -4,9 +4,9 @@ * All shapes drawn to the screen have a position that is * specified as a coordinate. All coordinates are measured * as the distance from the origin in units of pixels. - * The origin [0, 0] is the coordinate is in the upper left + * The origin (0, 0) is the coordinate is in the upper left * of the window and the coordinate in the lower right is - * [width-1, height-1]. + * (width-1, height-1). */ // Sets the screen to be 640 pixels wide and 360 pixels high @@ -16,11 +16,11 @@ size(640, 360); background(0); noFill(); -// The two parameters of the point() method each specify coordinates. -// The first parameter is the x-coordinate and the second is the Y +// The two parameters of the point() function define its location. +// The first parameter is the x-coordinate and the second is the y-coordinate stroke(255); -point(width * 0.5, height * 0.5); -point(width * 0.5, height * 0.25); +point(320, 180); +point(320, 90); // Coordinates are used for drawing all shapes, not just points. // Parameters for different functions are used for different purposes. @@ -28,10 +28,10 @@ point(width * 0.5, height * 0.25); // the coordinates of the first endpoint and the second two parameters // specify the second endpoint stroke(0, 153, 255); -line(0, height*0.33, width, height*0.33); +line(0, 120, 640, 120); -// By default, the first two parameters to rect() are the -// coordinates of the upper-left corner and the second pair -// is the width and height +// The first two parameters to rect() are the coordinates of the +// upper-left corner and the second pair is the width and height +// of the rectangle stroke(255, 153, 0); -rect(width*0.25, height*0.1, width * 0.5, height * 0.8); +rect(160, 36, 320, 288); diff --git a/content/examples/Basics/Structure/Loop/Loop.pde b/content/examples/Basics/Structure/Loop/Loop.pde index 1ad323f34..4c9ae5574 100644 --- a/content/examples/Basics/Structure/Loop/Loop.pde +++ b/content/examples/Basics/Structure/Loop/Loop.pde @@ -1,14 +1,13 @@ /** * Loop. * - * The loop() function causes draw() to execute - * continuously. If noLoop is called in setup() - * the draw() is only executed once. In this example - * click the mouse to execute loop(), which will - * cause the draw() the execute continuously. + * If noLoop() is run in setup(), the code in draw() + * is only run once. In this example, click the mouse + * to run the loop() function to cause the draw() the + * run continuously. */ -float y = 100; +float y = 180; // The statements in the setup() function // run once when the program begins @@ -16,18 +15,11 @@ void setup() { size(640, 360); // Size should be the first statement stroke(255); // Set stroke color to white noLoop(); - - y = height * 0.5; } -// The statements in draw() are run until the -// program is stopped. Each statement is run in -// sequence and after the last line is read, the first -// line is run again. void draw() { - background(0); // Set the background to black + background(0); // Set the background to black line(0, y, width, y); - y = y - 1; if (y < 0) { y = height; diff --git a/content/examples/Basics/Structure/NoLoop/NoLoop.pde b/content/examples/Basics/Structure/NoLoop/NoLoop.pde index 595de53ea..9fc29afcf 100644 --- a/content/examples/Basics/Structure/NoLoop/NoLoop.pde +++ b/content/examples/Basics/Structure/NoLoop/NoLoop.pde @@ -1,34 +1,26 @@ /** * No Loop. * - * The noLoop() function causes draw() to only - * execute once. Without calling noLoop(), the - * code inside draw() is run continually. + * The noLoop() function causes draw() to only run once. + * Without calling noLoop(), the code inside draw() is + * run continually. */ -float y; +float y = 180; -// The statements in the setup() function -// execute once when the program begins -void setup() -{ +// The statements in the setup() block +// run once when the program begins +void setup() { size(640, 360); // Size should be the first statement - stroke(255); // Set line drawing color to white + stroke(255); // Set line drawing color to white noLoop(); - - y = height * 0.5; } -// The statements in draw() are executed until the -// program is stopped. Each statement is executed in -// sequence and after the last line is read, the first -// line is executed again. -void draw() -{ +// In this example, the code in the draw() block +// runs only once because of the noLoop() in setup() +void draw() { background(0); // Set the background to black + line(0, y, width, y); y = y - 1; if (y < 0) { y = height; } - line(0, y, width, y); } - - diff --git a/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde b/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde index 5c46b53d3..53e73d576 100644 --- a/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde +++ b/content/examples/Basics/Structure/SetupDraw/SetupDraw.pde @@ -2,28 +2,28 @@ * Setup and Draw. * * The code inside the draw() function runs continuously - * from top to bottom until the program is stopped. + * from top to bottom until the program is stopped. The + * code in setup() is run once when the program starts. */ -int y = 100; +int y = 180; -// The statements in the setup() function -// execute once when the program begins +// The statements in the setup() block run once +// when the program begins void setup() { size(640, 360); // Size must be the first statement - stroke(255); // Set line drawing color to white - frameRate(30); + stroke(255); // Set line drawing color to white } -// The statements in draw() are executed until the -// program is stopped. Each statement is executed in -// sequence and after the last line is read, the first -// line is executed again. + +// The statements in draw() are run until the program +// is stopped. Each statement is run in sequence from top +// to bottom and after the last line is read, the +// first line is run again. void draw() { - background(0); // Clear the screen with a black background + background(0); // Clear the screen with a black background + line(0, y, width, y); y = y - 1; if (y < 0) { - y = height; - } - line(0, y, width, y); + y = height; + } } - From dd55b55cad8b6f7e2f0bce2835badfc0ff21821c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Sat, 6 Jun 2020 19:00:06 -0700 Subject: [PATCH 244/299] Reference category adjustment for textWidth() --- content/api_en/textWidth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textWidth.xml b/content/api_en/textWidth.xml index 7d5db2aea..cdbe3afe2 100755 --- a/content/api_en/textWidth.xml +++ b/content/api_en/textWidth.xml @@ -4,7 +4,7 @@ Typography -Attributes +Metric From f5f107710196fd357c119a6faa24bf2c11235262 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Sat, 6 Jun 2020 19:01:28 -0700 Subject: [PATCH 245/299] Update textWidth.xml --- content/api_en/textWidth.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api_en/textWidth.xml b/content/api_en/textWidth.xml index cdbe3afe2..b2adacc25 100755 --- a/content/api_en/textWidth.xml +++ b/content/api_en/textWidth.xml @@ -4,7 +4,7 @@ Typography -Metric +Metrics From 652ebd111c773fd8613ff6bc28533cd7af5bc43b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 11:53:20 -0700 Subject: [PATCH 246/299] Add Sponsor button to repository --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..f8c6bc52b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: processing From b81bef5bf297a0a6ade0ae2e8521fbce12d5f2a2 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 12:16:04 -0700 Subject: [PATCH 247/299] Add external sponsor link to Foundation --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index f8c6bc52b..2cf28e94b 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ github: processing +custom: https://processingfoundation.org/support From 45c96dfc5abd7cc722e81da2f3b1ee5e29710931 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 12 Jun 2020 15:10:03 -0700 Subject: [PATCH 248/299] Update FUNDING.yml --- .github/FUNDING.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2cf28e94b..93c4b27b4 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ github: processing -custom: https://processingfoundation.org/support +custom: https://processingfoundation.org/ From b660f465551f035577a5d9d0e9597f9e1b8aa77d Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:50:42 -0700 Subject: [PATCH 249/299] Add three new book to Books page --- content/static/books.html | 210 +++++++++++++++++++------------------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/content/static/books.html b/content/static/books.html index e935e82db..80b69c929 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -3,7 +3,6 @@

    Books. Processing books cove

    - @@ -38,7 +37,8 @@

    Books. Processing books cove » Order Print/EBook from O'Reilly
    » Order from Amazon.com
    - This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help reader: +
    + This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help readers:
    • Quickly learn programming basics, from variables to objects
    • Understand the fundamentals of computer graphics
    • @@ -88,6 +88,7 @@

      Books. Processing books cove Published August 2015, Morgan Kaufmann. 564 pages. Paperback.
      » Order from Amazon.com
      +
      The second edition of Learning Processing has been updated for compatibility with Processing 3 and includes several new chapters of content including video, sound, data visualization, and networking. For more, visit the Learning Processing website.

      Dan Shiffman says, "This book tells a story. It's a story of liberation, of taking the first steps towards understanding the foundations of computing, writing your own code, and creating your own media without the bonds of existing software tools. This story is not reserved for computer scientists and engineers. This story is for you." @@ -97,7 +98,7 @@

      Books. Processing books cove

      If you are an educator, you can request a desk/exam copy from the Elsevier website.
      -

      +

    @@ -120,9 +121,43 @@

    Books. Processing books cove How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital worlds? This book focuses on a range of programming strategies and techniques behind computer simulations of natural systems, from elementary concepts in mathematics and physics to more advanced algorithms that enable sophisticated visual results. Readers will progress from building a basic physics engine to creating intelligent moving objects and complex systems, setting the foundation for further experiments in generative design. Subjects covered include forces, trigonometry, fractals, cellular automata, self-organization, and genetic algorithms. + +

    + + + - + + + + + + + + + + + + + + + + @@ -135,14 +170,13 @@

    Books. Processing books cove Ben Fry.
    Published December 2007, O'Reilly. 384 pages. Paperback.
    » Order from Amazon.com -
    +

    The O'Reilly website says, "How you can take advantage of data that you might otherwise never use? With the help of a powerful new programming environment [Processing], this book helps you represent data accurately on the Web and elsewhere, complete with user interaction, animation, and more. You'll learn basic visualization principles, how to choose the right kind of display for your purposes, and how to provide interactive features to design entire interfaces around large, complex data sets."

    Martin Wattenberg from the IBM Watson Research Center says, "This wonderfully detailed guide, by one of the masters of modern data graphics, tells you everything you need to know to code your own visualizations from scratch. Perhaps most valuable are the many examples where Fry demonstrates how to refine a bare-bones concept into a beautiful, effective finished piece. Read this book, and you'll never again be dependent on someone else's view of your data."
    -

    + -

    @@ -154,14 +188,14 @@

    Books. Processing books cove

    + @@ -176,7 +210,7 @@

    Books. Processing books cove Derek Runberg.
    2015, No Starch Press. 232 pages. Paperback.
    » Order from Amazon.com -
    +

    The publisher writes, "The SparkFun Guide to Processing teaches you to craft your own digital artwork and even combine it with hardware—no prior programming experience required. Over the course of the book, you’ll learn the basics by drawing simple shapes, move on to photo editing and video manipulation, and ultimately affect the physical world by using Processing with an Arduino."

    The publisher lists: @@ -187,7 +221,7 @@

    Books. Processing books cove
  • Fetch weather data from the Web and build a custom weather dashboard
  • Create visualizations that change based on sound, light, and temperature readings
  • -

    +

    @@ -197,14 +231,14 @@

    Books. Processing books cove

    + alt="Processing: An Introduction to Programming"/> + @@ -232,7 +266,7 @@

    Books. Processing books cove Published April 2013, friends of ED. 472 pages. Paperback.
    » Order Print from Apress
    » Order from Amazon.com -
    +

    The authors write, "If you’ve been curious about coding, but the thought of it also makes you nervous, this book is for you; if you consider yourself a creative person, maybe worried programming is too non-creative, this book is also for you; if you want to learn about the latest Processing 2.0 language release and also start making beautiful code art, this book is also definitely for you. Based on research funded by the National Science Foundation, this book brings together some of the most engaging and successful approaches from the digital arts and computer science classrooms:
    • Learn the latest features of Processing 2.0
    • Gain a solid understanding of coding concepts, such as design, analysis, and object-oriented programming
    • @@ -255,19 +289,17 @@

      Books. Processing books cove Andrew S. Glassner.
      Published August 2010, A K Peters. Paperback.
      » Order from Amazon.com -
      +

      The book description reads, "Learn how to create gorgeous and expressive imagery with the Processing programming language and environment... Walk with veteran author Andrew Glassner on a journey of shared discovery as he takes actual Processing projects from inspiration to reality. You'll closely follow every step he takes and see exactly how each project evolves, including big and small mistakes he's made along the way (and how to fix them!), and the times when he changed direction. Once you see the results, you'll understand why programming is such a powerful skill for self-expression."

      This book has a different perspective from the others because of Glassner's deep experience in computer graphics. His bio reads, "Dr. Andrew Glassner is a writer-director, and a consultant in story structure, interactive fiction, and computer graphics. He started working in 3D computer graphics in 1978, and has carried out research at the NYIT Computer Graphics Lab, Case Western Reserve University, the IBM TJ Watson Research Lab, the Delft University of Technology, Bell Communications Research, Xerox PARC, and Microsoft Research... He is also a well-known writer, and has published numerous technical papers and books on topics ranging from 3D modeling, rendering, and animation to digital sound synthesis. His book '3D Computer Graphics: A Handbook for Artists and Designers' has taught a generation of artists through two editions and three languages. Glassner created and edited the 'Graphics Gems' series and created and wrote several chapters in the book 'An Introduction to Ray Tracing'. He wrote the two-volume text 'Principles of Digital Image Synthesis'."

    - - - + - - - - - +

    + The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks." + + + @@ -335,7 +365,7 @@

    Books. Processing books cove Matt Pearson.
    Published March 2011, Manning Publications. 300 pages. Paperback.
    » Order from Amazon.com -
    +

    Matt provides a list of bullet points:
    • The complete guide to creating generative graphics for print, video and the web.
    • @@ -348,7 +378,6 @@

      Books. Processing books cove

    - @@ -365,19 +394,16 @@

    Books. Processing books cove Kostas Terzidis.
    Published May 2009, Wiley. 384 Pages. Hardcover.
    » Order from Amazon.com -
    +

    The Wiley website says, "this book offers a series of generic procedures that can function as building blocks and encourages you to then use those building blocks to experiment, explore, and channel your thoughts, ideas, and principles into potential solutions. The book covers such topics as structured shapes, solid geometry, networking and databases, physical computing, image processing, graphic user interfaces, and more."

    - - - - - - + - + @@ -441,12 +463,12 @@

    Books. Processing books cove Daniel Sauter.
    Published February 2013, The Pragmatic Programmers. ~300 pages. Paper and eBook.
    » Order from The Pragmatic Bookshelf
    -
    +

    The publisher writes, "Create mobile apps for Android phones and tablets faster and more easily than you ever imagined. Whether you’re a student, teacher, hobbyist, or experienced developer, Rapid Android Development puts the fast-growing market for Android phone and tablet applications within your reach. Without needing to master the complexities of Java, Eclipse, or the Android SDK, you’ll find yourself writing dazzling graphics displays and location-aware programs in no time. With more than 30 ready-to-run demos, applications, and games, you’ll find yourself diving deeper than you thought possible into the treasure trove of software and hardware packed into today’s Android devices." -

    + @@ -458,7 +480,7 @@

    Books. Processing books cove Jan Vantomme.
    Published September 2012, PACKT. 350 pages. Paperback and eBook.
    » Order from PACKT
    -
    +

    The publisher lists:
    • Explore the Processing language with a broad range of practical recipes for computational art and graphics
    • @@ -533,20 +555,40 @@

      Books. Processing books cove

    - + + + + + + + + + + + @@ -564,7 +606,7 @@

    Books. Processing books cove Text in German.

    The OReilly.de site writes, "Processing ist eine auf Grafik, Simulation und Animation spezialisierte objektorientierte Programmiersprache, die besonders für Menschen mit wenig Programmiererfahrung geeignet ist. Deshalb eignet sie sich vor allem für Künstler, Bastler und Programmiereinsteiger. Die aus Java abgeleitete Sprache wurde geschaffen, um schnell und effektiv mit relativ wenig Aufwand zu beeindruckenden Ergebnissen zu kommen. Processing führt den Leser zügig in die Programmieressentials ein und geht dann unmittelbar zur Programmierung grafisch anspruchsvoller Anwendungen über. Spielerisch wird dem Leser die 2D- und 3D-Programierung, Textrendering, die Bildbearbeitung und sogar die Videomanipulation nahe gebracht." -

    + @@ -636,7 +678,8 @@

    Books. Processing books cove During the 50‘s ”era of cybernetics“, computer entered into the history of art simultaneously in different parts of the world. Art and science were in great turmoil. Science, with its theories and experiments, was approaching artificially mimicking both natural phenomena, such as light and sound, and the human phenomena of language and communication. Art, with its aesthetic and exhibitions, had transcended the boundaries of the avant-garde. Now, with the computer, it was confronting a reality that challenged ”the where“ and ”the how“ of doing art and the very meaning of ”masterpiece“. Antonio Rollo takes us on a tour of these seminal works from his unique perspective of the artist, through the code!

    - There's additional information on the publisher's website. + There's additional information on the publisher's website. + @@ -656,7 +699,8 @@

    Books. Processing books cove
    Note from Casey: "I received a copy of this book from the authors on a recent trip to Japan. It's a beautifully produced full-color book with sections introducing Processing, featuring work created with Processing (many are from the Exhibition section of the Processing website), and introducing programming through progressively complicated examples. The majority of the book is an introduction to programming. There are many good examples and the code is color-coded like in the Processing Environment. This book is less comprehensive than the Greenberg and Reas/Fry books, but it appears to be a good, brief introduction."

    - There's additional information on the publisher's website. + There's additional information on the publisher's website. + @@ -686,49 +730,5 @@

    Books. Processing books cove - - -

    - - - - - - -
    Processing: A Programming Handbook for Visual Designers (Second Edition)

     

     

    Pro Processing for Images and Computer Vision with OpenCVPro Processing for Images and Computer Vision with OpenCV
    + Bryan WC Chung.
    + Published 2017, APress. Paperback, eBook.
    + » Order from APress +

    + The Publisher writes, "Pro Processing for Images and Computer Vision with OpenCV is a step-by-step training tool that guides you through a series of worked examples in linear order. Each chapter begins with a basic demonstration, including the code to recreate it on your own system. Then comes a creative challenge by which to engage and develop mastery of the chapter’s topic. The book also includes hints and tips relating to visual arts, interaction design, and industrial best practices. This book is intended for any developer of artistic and otherwise visual applications, such as in augmented reality and digital effects, with a need to manipulate images, and to recognize and manipulate objects within those images. The book is specifically targeted at those making use of the Processing language that is common in artistic fields, and to Java programmers because of Processing’s easy integration into the Java programming environment." +

     

     

    Programming 101: The How and Why of Programming Revealed Using the Processing Programming LanguageProgramming 101: The How and Why of Programming Revealed Using the Processing Programming Language
    + Jeanine Meyer.
    + Published 2018, APress. Paperback, eBook.
    + » Order from Apress +

    + The Publisher writes, "Understand the importance of programming, even if you’ve never programmed before! This book will teach you the basics of programming using the Processing programming language. You will create your own Processing sketches, using personal images, themes, or hobbies that you enjoy. The chapters in the book will demonstrate the process of programming, starting with formulating an idea, planning, building on past projects, and refining the work, similar to writing an essay or composing a song. This approach will guide you to make use of logic and mathematics to produce beautiful effects. The term for program in Processing is sketch, though the sketches featured in this book are far more than static drawings; they incorporate interaction, animation, video, audio, and accessing files on the local computer and on the Web. Technical features are introduced and explained in the context of complete examples: games (Snake, Hangman, jigsaw, slingshot), making a collage of family images and video clips, preparing directions for folding an origami model, rotating objects in 3D, and others." +

     

     

     

     

    Generative Design
    Hartmut Bohnacker, Benedikt Gross, Julia Laub, and Claudius Lazzeroni.
    August 2012, Princeton Architectural Press. 472 pages.
    - Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
    + Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
    » Order from Amazon.com -
    +

    This book is extraordinary; the design is clear and the production quality is fantastic. This is the design book about Processing that we've hoped for. Unlike most other Processing books, it doesn't discuss programming basics so it's free to start with exciting examples. The publisher promotes, "Generative design is a revolutionary new method of creating artwork, models, and animations from sets of rules, or algorithms. By using accessible programming languages such as Processing, artists and designers are producing extravagant, crystalline structures that can form the basis of anything from patterned textiles and typography to lighting, scientific diagrams, sculptures, films, and even fantastical buildings. Opening with a gallery of thirty-five illustrated case studies, Generative Design takes users through specific, practical instructions on how to create their own visual experiments by combining simple-to-use programming codes with basic design principles. A detailed handbook of advanced strategies provides visual artists with all the tools to achieve proficiency. Both a how-to manual and a showcase for recent work in this exciting new field, Generative Design is the definitive study and reference book that designers have been waiting for."

    More information about buying this book in German, as well as the complete source code for the examples, are at the book's website.

    -

    The SparkFun Guide to Processing Processing: An Introduction to Programming
    Jeffrey L. Nyhoff, Larry R. Nyhoff.
    Published May 2017, CRC Press. 544 pages. eBook, Paperback.
    » Order from CRC Press
    » Order from Amazon.com -
    +

    The publisher writes, "The book uses Processing’s capabilities for graphics and interactivity in order to create examples that are simple, illustrative, interesting, and fun. It is designed to appeal to a broad range of readers, including those who want to learn to program to create digital art, as well as those who seek to learn to program to process numerical information or data. It can be used by students and instructors in a first course on programming, as well as by anyone eager to teach them self to program."

    The publisher lists: @@ -215,7 +249,7 @@

    Books. Processing books cove
  • Covers all of the standard programming constructs
  • Presents the material in a fun, conversational, and approachable way
  • -

     

     

    Processing: Creative Coding and Computational Art (Foundation) Processing: Creative Coding and Computational Art (Foundation)
    @@ -279,11 +311,10 @@

    Books. Processing books cove
    The Friends of Ed website says, "This book is written especially for artists, designers, and other creative professionals and students exploring code art, graphics programming, and computational aesthetics. The book provides a solid and comprehensive foundation in programming, including object-oriented principles, and introduces you to the easy-to-grasp Processing language, so no previous coding experience is necessary. The book then goes through using Processing to code lines, curves, shapes, and motion, continuing to the point where you'll have mastered Processing and can really start to unleash your creativity with realistic physics, interactivity, and 3D! In the final chapter, you'll even learn how to extend your Processing skills by working directly with the powerful Java programming language, the language Processing itself is built with." (Quote from the Friends of Ed website)

    -

     

     

    + Programming Interactivity: A Designer's Guide to Processing, Arduino, and openFrameworksProgramming Interactivity
    +
    Programming Interactivity
    Joshua Noble.
    Published January 2012, O'Reilly. 728 pages. Paperback.
    » Order from Amazon.com -
    - The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks."

     

     

     

     

    Data-driven Graphic Design: Creative Coding for Visual Communication @@ -387,20 +413,16 @@

    Books. Processing books cove Andrew Richardson.
    Published January 2016, Bloomsbury. 224 Pages. Paperback.
    » Order from Amazon.com -
    +

    The book description reads, "Data-driven Graphic Design introduces the creative potential of computational data and how it can be used to inform and create everything from typography, print and moving graphics to interactive design and physical installations. Using code as a creative environment allows designers to step outside the boundaries of commercial software tools, and create a set of unique, digitally informed pieces of work. The use of code offers a new way of thinking about and creating design for the digital environment."

     

     

     

     

     

    O Código Transcendente: Uma Introdução Prática à Programação e Arte GerativaO Código Transcendente: Uma Introdução Prática à Programação e Arte Gerativa
    + Mateus Berruezo.
    + Published December 2019. 270 pages. PDF, Web.
    + Text in Portuguese.
    + » Download
    + » Read online +
    +
    + Este livro é um guia de programação com enfoque prático considerando o contexto da arte gerativa e do pensamento computacional. Ele conta com explicações e exemplos visuais cuidadosamente projetados para serem de valor tanto para programadores quanto artistas. As aplicações e estudos de caso foram direcionados para a linguagem Processing cuja própria filosofia segue o princípio da exploração do artístico através do código. +

     

     

    Einführung ins Programmieren mit Processing Einführung ins Programmieren mit Processing
    - Matthias Wolf.
    - Published August 2013. 178 pages. PDF, Paperback.
    - Text in German.
    - » Order Print/EBook from lulu.com
    -
    -

    Die eigenständige Programmiersprache Processing basiert auf Java und ähnelt diesem sehr, verbirgt aber gleichzeitig viel von dessen Komplexität. Dadurch ist Processing für den Programmieranfänger ideal geeignet, um sich Konzepte des Programmierens zu erschließen und bewahrt gleichzeitig die Möglichkeit eines späteren Umstiegs. Dennoch ist die Sprache keineswegs nur für triviale Anfängeraufgaben geeignet: speziell im Bereich der graphischen Datenverarbeitung spielt Processing seine Stärken aus.

    -

    Dieses Buch richtet sich in erster Linie an den Einsteiger, den es an die Bewältigung auch komplexerer Aufgaben heranführt, wobei grundlegende Konzepte der imperativen und der objektorientierten Programmierung vorgestellt werden. Auch notwendige theoretische Hintergründe kommen dabei nicht zu kurz. Ausführlich kommentierter Beispielcode erschließt Konzepte und Sprache. Aber auch der routinierte Programmierer, der sich "nur" eine neue Sprache erschließen will, wird fündig!

    -

    Aus dem Inhalt: Datentypen — Variablen — Arrays (ein- und mehrdiomensional) — Flusssteuerung — Methoden — Objektorientiertes Programmieren — 2D-Graphik — 3D-Graphik — Dateizugriff — PDF — QuickTimeTM — Arduino®-Mikrocontroller — Alphabetischer Index + Matthias Wolf.
    + Published August 2013. 178 pages. PDF, Paperback.
    + Text in German.
    + » Order Print/EBook from lulu.com
    +
    +

    Die eigenständige Programmiersprache Processing basiert auf Java und ähnelt diesem sehr, verbirgt aber gleichzeitig viel von dessen Komplexität. Dadurch ist Processing für den Programmieranfänger ideal geeignet, um sich Konzepte des Programmierens zu erschließen und bewahrt gleichzeitig die Möglichkeit eines späteren Umstiegs. Dennoch ist die Sprache keineswegs nur für triviale Anfängeraufgaben geeignet: speziell im Bereich der graphischen Datenverarbeitung spielt Processing seine Stärken aus.

    +

    Dieses Buch richtet sich in erster Linie an den Einsteiger, den es an die Bewältigung auch komplexerer Aufgaben heranführt, wobei grundlegende Konzepte der imperativen und der objektorientierten Programmierung vorgestellt werden. Auch notwendige theoretische Hintergründe kommen dabei nicht zu kurz. Ausführlich kommentierter Beispielcode erschließt Konzepte und Sprache. Aber auch der routinierte Programmierer, der sich "nur" eine neue Sprache erschließen will, wird fündig!

    +

    Aus dem Inhalt: Datentypen — Variablen — Arrays (ein- und mehrdiomensional) — Flusssteuerung — Methoden — Objektorientiertes Programmieren — 2D-Graphik — 3D-Graphik — Dateizugriff — PDF — QuickTimeTM — Arduino®-Mikrocontroller — Alphabetischer Index

     

     

     

    - Processing is also discussed through examples and projects in the following books: - -
    - -
    - - 10 PRINT CHR$(205.5+RND(1)); : GOTO 10
    By Nick Montfort, Patsy Baudoin, John Bell, Ian Bogost, Jeremy Douglass, Mark C. Marino, Michael Mateas, Casey Reas, Mark Sample, Noah Vawter. Examples use Processing to explore a modern interpretation of a 1982 Commodore 64 program.
    - -
    - - Make: Getting Started with Arduino
    By Massimo Banzi. Examples use Processing to communicate with an Arduino board.
    - -
    - - Building Wireless Sensor Networks: with ZigBee, XBee, Arduino, and Processing
    By Robert Faludi. Network examples use Processing.
    - -
    - - Physical Computing: Sensing and Controlling the Physical World with Computers
    - By Dan O'Sullivan and Tom Igoe. Examples using Processing for RS-232 communication and - computer vision.
    - -
    - - Aesthetic Computing.
    - Edited by Paul Fishwick. Casey Reas and Ben Fry contributed a chapter entitled - "Processing Code: Programming within the Context of Visual Art and Design."
    - -
    - - Hacking Roomba: ExtremeTech
    By Tod E. Kurt. Processing is introduced and used to design an application to control a Roomba (a robot vacuum cleaner).
    - -
    - Analog In, Digital Out
    By Brendan Dawes. Numerous projects created with Processing are illustrated and discussed.

    From 8f7a93ebf6e0b9218b76549f74160ffbd4bdb1f8 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:53:27 -0700 Subject: [PATCH 250/299] Add images for three new books --- img/learning/books/o-codigo.jpg | Bin 0 -> 35213 bytes img/learning/books/pro-processing.jpg | Bin 0 -> 50551 bytes img/learning/books/programming-101.jpg | Bin 0 -> 40748 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/learning/books/o-codigo.jpg create mode 100644 img/learning/books/pro-processing.jpg create mode 100644 img/learning/books/programming-101.jpg diff --git a/img/learning/books/o-codigo.jpg b/img/learning/books/o-codigo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e70fad0e9313e36541d9489dec2d02a59dd63d60 GIT binary patch literal 35213 zcmeEvc|6qJ_xO9P*^4Cm63M>rA<3R(4_U`xEHh#T5h^WD8)aWYkv++t5h`nl>|2&X zcCs^=`Mrl!&+~bn&*$^{eqX=8zP)>Szt27Q+FiE0swt| zKo9_c0{}UM9v}uG2>1_xumGgHFaS6}SbxB-kQ3i&h(H<%0DJ@7;GY*nau+@f!V$OO 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 ws&O975(a27Buf%;;)4N0YtT?Q2+n{ literal 0 HcmV?d00001 diff --git a/img/learning/books/pro-processing.jpg b/img/learning/books/pro-processing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..25e7f6863d1b823ef02489bc88ece2329367922f GIT binary patch literal 50551 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
    )ftm>>@MSdAzKRK{j6`n!v1AO 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 literal 0 HcmV?d00001 diff --git a/img/learning/books/programming-101.jpg b/img/learning/books/programming-101.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3749c36a21a91c28425d10f5bdb38b9a1edf679d GIT binary patch literal 40748 zcmeFZbzD@>_c(l)rMpDB1&i)nIs~LakPw!oVd)M9B}7SS0TmRGQV?k{C<&1kL6DY) zC71l&#d!PveBR%9{hrtJ{PTQfxpU8)bLPyMGjr$8nYqKs=aWf%B4s}ZTL4g3zX;$1 z06+==5GVivAt@*b{)Drz0RRhxK@{*Byr4hvI3SGs6UG8z%AYVM|CygKCJ#LX=Tv4r z2s8YIn?acI5B~Fi$Ps{G0c;?>3%mqDm>RsVfR{rg_Ng3fumFDW!ax1JY2^XPxdGtU zUET(1jbPQWM|vSW?U8P*f&#n(tmn0?;0~@B%mqM@UyxstUsO^+gjGO5Qb-v51BHXN zgFO0CcZ~j6kA9TZj-mX7nK6XZfcx79xM2EM{X#(culhxR@Sk;pVEvF63*xbU!rqw7 zU{C`ujObtYlg}qB0P$%(EETl?$jK@|dYS@kZemzZMuFP^F+M&%0X{JS0Wk#;ArZwH zGGbz~GqhAxXQ-%XDTq(Q&)bj0zs3*}A|et}5^_>fa%xgiQff>@O8p}X#s5aY$s2$I zA5aGPp%8Weivj|rfSh~Ayr4jwK(4wP63BvL@J*(e2Y(-&U9Whm7JKxCE{HnI$`CSUIg+OhwPj$k>#SuAGflYuC8`Qv^oeD?r zRsuCfgSUFU>q4B?lOAD-iuz~Zp28dFa4`ztaf!U^1C_`V=s4t-^n;0ry`j zoO}U@p{He105AZRm!V&Y54ZFmdB3+2q9+mc@yxJ`!##>V~9eN8@XQqld#^ zWVC}FS3S#VO$D?{TFyX?pH`Dpta)eRW16-=;4TJzP8WQi(@=&pJjjV*rE z;wh#<2KE$;j2IV;%HAJ>EgvUaWKERr-(_)FWN|&y`HDTk=y4`VU<1>5WR*8d$x+hs zfh<^*{R!~)0@=vo5zE1|^D*>J-(j*7-(V-7P@qND6t)E7jgb+SmrZ*G;6H$?d-7v0%TEu7M|;IHr&?#W|&+|8M2HoWq+X#y^GBok+J zJ!V@|ATC6?l<%uZ`8&}n?`I8bJ`7bRFCPrsRUDs@xi(?YEIjj>Smd=#n;Yv1Aikfz zWBIA3DSfSmt$Tfh7PWAsq(L5E=$0d#>OCG4+`8NE8LY<=3@QFHPgTbn5Y{TSRkDM0 z@je0a3@aKdw=Z>$+}pgbk#-UCvfc=AdcI9Rx;YY?Y7n*0NZZr*DJEI-eT+TT&VRJjctR}AC&TyREb#?1ipS)W_y%JQeU0fcer@iMU=EJS_23)#3?Y(uOl4?)wRktHT9)xTft`-~d<09a@+<0jAzO zyO+!NAljcn9@~}Wq<`_~*dZ=s9XmCrb7|Y>{n`indK}Jy#+9taedm##rl%)>gP3NB zZ(+rz&k3*y>thxAlrt>byWj#t#ci7H9@y<^A53jvC*L!ECmXtcAsDWaMOp z%)z|AYe->4VDW&_Up1!uqsH29UJgiCPmq2V z!>Q=z<@&1#F(+V*!)aJFInC%m4gv)3tJ$In^LKFdIbi? z@Pc=Y+JGj)_J^2%Db@g--2GFr`f%qTcpVS8oC!w4X&{GtAl;1Z5n$tjJ=DR~?w9#U zF$6tOCk3RJ7t+NU>1y{g3-K=sMuk7{B){-_4tDl`5{P~gK;3@xW1bZ#X8sEH8pvfZ z2IoJ&?x)WY*C`F0d;bcso4}9$MskV)r{4hcDJR|E)6mV+G{I>MMv&87+&`XH!k-Tb zh(6U|`;S~+GX?_ZqF^}XrN=-}Z7}+wJthf2FkJ26 zMFL0wVt_ax00@JzFdzsB0iqyI6ue`M`tRXS94O&b(%-oLWcWq+Ysdgxy`3>58^&qE zwMKfo+IarU6ASke0BNTcz;yH9eF;SVOJ4*Oe)riQYUusdB{7x5^>lWCBRq|qH8Bqr zmS&Sexd))PGoJTh;&AJ{9#;*AMzDce-pqgz*VFx#?}O0NH_46?1}hu ztRi#<2ep605?h}Rg8zmm0-M^d{UrTd+*}Y|R;+$5&aR%4 zelqN*!X-f%gXUvrJ!SE7l3_nxR%X4XrNgR-^gytR^78Y*`S}G|#UywIM1_S!`7g6# zmdpA01^EPoc=!b*`Nbp!1zCRvcCa)L8(T>|C6%9LfhigGpOy0U_2u;y;zfGc@d-#s zNMK|L3i5y)Jf8lpURHiQuAUsfBq$*~;T{gB-ZLvkBIp@x@3e3mI3L0p;ev4W@&xTFfT{keP`6)O1i!QVP4sW_X=D7#1e#V$>z_0H zYBv{`-$i(ODf@uc`0rZT6Elh9(?fV7y*=OvWgk#Y4oqQgl8PP(E6`6i0Da_N4fWRo z&A;wy{E-C#de#UTc1*kR@Qd;Yh!|kDIfNvI1bD#KhOlF2{cTCf)5$4VGN_)=pLlgeMR3W**1;Jh zc!J9ntm?{&q5=}4qCA4U0;l?FX-TTPdU{#8!V&69GVGvzcpV&UBt->8c1rstn_CP_61Pq3N&e?Ck42=||mvjgjC|BS;7y2({dRqDXCGVdM^1tgK zKWh4q2Kn=0_`fsAPjkcVtz7L8;NZ>2j;RhGW|;fY*nI!m4^C-+42i$k!EqJ?{vP0E ze+|U{x&Oxk|FOV-Ebt!-{Ko?SvB3Y2Eby0$h;Rj`7QUbZcrrzN4V+I~>gZ{!sB0>p z`m@Apnhvf=EOG#F0k;Y<6YOgyrmT1$!5s(!&>aQ$8m!=+Zd&>(n7vg1oP4ulX5kq4 zudp-pV=JVeM@@&7^)LMY3Zj6!d4PL{5FLs+bw+r3@#uhlyOoCx=vBM8S-JWHz>hj(asib8 z=HZ;8e?D6#>SH#p4`GY&K!6@8s}b1Cz#V0FwPpQ zgX`aX*gquvUuOG50tWoiuR(w+?--!Aw|yJ->_fooXc z@)pbdkA4rrApJD{TZ9z{Cb2vnPIu-2MLh#nxVMMT4;F094F@0u*T$#;I)EAA0L}wE z;0l)*AO*;Qn>kkiZNLC90W1JGxJu>%euCi(1Oc~z2p|UB=1B%JfE*wXCNQ6NH`=0k_gFwJcblPUP5XhZy_Hby^s;eBxC`Cg6v~Kv52v#v6!&9u=udV zvE;Edune%wvFxziu>!DeW5r^nVLibr#(ItQ7ON9$5bGP(64o~OjVlq92FeEIfr>*F zq1sSWs4dh38UnowO@TgvmO^WxZP0$`H|R1Hjg5;EOEjWWXvp74rxVSX9 z+_+-6YPcr2j<|ui_i(dt%W&V|_ToSji@;0AE5>WW>%*JH z+ruZqXTcZ5SHU;Mcf}9GPr-kV--zFbKaYPvKu&OuK$1Y4z=pt|AdVo9pq8MAV3y#3 zkb;n#P=?Te(2?*KVH#m6VGH3H;U*Cg5j&9tkuH$~(M_T>q8CK%M3Y2lVoKtR#EQgb z#NNcQ#QDT;h)0MwNk~YzNaRRNNxVp6NeW5clZ=z>ky4TJlB$#1kcN_GlD;PGBV8pU zAUj7UPi8?DK$b#QLDoaIOin<~MXpG0MIJ()NnS%fOukJ)MIk_;P2oaukK#GS2a4~M zc$8d}%9J*gw<&We-&0OgL8&;X6sh1;;Z%84EmX7AxYXR#>ePRP@WM! zV|2#vOy-$}Gv8>SG+Z?5G|n_}H03lyH2Y_n&dQ%foQ*zPdbaQEE-eGC94&(OE^Qg@ zAniUKE1fc(6I}vb72Q{QZ2F7zy7a#E+4L>+%M8>EQVej0yA0(FUl_3%FEZ*e1~TR{ zb}?=;=uBNrHN&c^$e>#t21jFYcuOQ z8zY+X8IwvTKF?A+{z>|yL>>|Z$uIm9_^IUaDl<5=fp;nd;`;w<9)a*p7f_&NJ? zsps0x?Q(H*8FNK)RdIdirsY=W4&W~09y?ER9(LaS{FCzo7jQ3#UvRpRb>Y)RtcxNS z?Js6t?74(>N%WG#rL0T6mvJsjTz0+ucMM1b=rr>}OiI9p=s8F@ghVUg}gmAX-XAvq9 zEs;o(cOplkVxk_RrJ@UBoMJb`9*PZ%Q;X|}-xF__z>!dp2$iUpKud~BdP$Z`u1WDo zIY~X2`Yz2ajgZcho|a*kv66W#^G%jj_J-^u*>5m5m=){^Y)Xzp&PMK;+`Rk+c}MwT z`Bepe1rLQvgC+LrMpTWl_`}Cl{1vbRoGSRREkvARYg<-Ro|%LsA;Gr zs12(#sl(L^)z`0xT?xL@tU;`yuaTiKrFl`)L$g*3OY4eOlGfPOb5~ujR%rv;>e@-# zUv;>3+;!@7admZcGj-?m1oVRR+VrXPE%l%4?-(c;#2Jhlo;UP1d}l;vWM))ov}>$n zoM`;*8sD|xYn>+aCJrXmrg)}Crq4{buPa|qzCLRvVisXGWX^5wXa2#0-on|U!II3< z%Ch1H&JE)m&u<)BXrpmrq7D zm4K&#*n#lCcR_4Hw}K{v<%1uGKtilT-i306-VU9;sd}^E7U3OL)6D;q3HDJi5aXLvW>GcEF2X`NAC0izcND)rSNhM76PW_gq znO2?7nI4~hm|>qWn5mFi_K@*m^uygOo2yd3KcVn*Xgpub{b5tg!Goc57zg# zU#Y)!Kz*Qd@akaikm1nhVYA_HpKU&WA8{Vp_~P^BVD#n~&e+|r-95U!0<<`~ZQpo*{=oMT z?=bD?!cpz9#_`yR3-}q=U*{0yz`4MWa|l?!0~Cay*kBBPH;;`8IJh{c0T&k!4<8Q? zmwT!t3FaIE_~}zS z6as#@|JOMLI`A9|n%=~mML>ApN&ayj;lDVJAg*@J-Y+Vx zpt}9@_q_`e>Lw2U(dmUXA4V3?7bUNlItJX$cwXD_WpV$hePml=h7DQ zyLD%LE-o8>E_!JcJfE0KbF4b>SbxC+ZQI9{m`UeslhWN1r20h2WTcAD_SQmt&h4A= z2cw(FcR`UO6$7w&T4xyVwssdox7a3!@ew3{F+g+3l=Rg`g*@`PwlMqGd~dvdJt!Z? z`oO0I(|P^R?Ck>+ZD+oQ~QYAaz%j}D~ za%|$CtJ7cqULq0wtu)o!{-t1cV07BxEd;i}p07)xa`)>hjW}(g%bAqYrQ9XxxXOVY zq=WV={x=K9nKQ^x-=;a4W!Lf0lIv~0I2B{^_Rne7RUu9=Z6ELFL*-@foGhd0=dx*W zt)`T&t?l|Y5N}&x*Iytfn2|Y}xEUEO+$50Z_1VI9kh^}?T0zO0aDGZomO@_dU7g64 zp$BxSPun65DJW_h>m#RE+`RP%9Jp+JB1yM>*N&LAiw_^?gE+kY{e&@d>*!JyT^K(=S{^Mxj8TFIq3IJ#WG4fjt%@6jOVM){C!t7-H*9< za4AqxBU6^4?O8K{p!7Uj6|t&*ARUTf@a3B1ae#l_hn!4i-xqz^!@4M&)K-z+%JYe8 zbnkBZ;bAK+J4!Ma2j8I@(xB1WVX>>;Lf7%|-B{QTxNLi4FS#q&vgDF>H{XYDQr&sv zrDKin`<7WEXG1mg{2;HY9>m>svd?~z`?9P+7te57YyH?x3lLNhpcJz$THA^f1gs9@ zO1ls4)uwk6JLU!+L^Icr%|%lUXG$O5J?z^|ofDg5ekDEZ?&44K@qSR_^?pj$*8~@_ zjD+vVLm2XT+Z`G%Uj8(f5|qq#BPZu7qIoB#g5TatEWFQJo-^2Tbas3*%eWJk8v4-U z+VBY=&~%BOhs>lu{sTH1?d#sGW#yJB)qHKkZ{+P(wxB_Fy`OsrBAm3GGKHh+f+fH2 zR_B(Qb3h$2{gI`uZA9iZf~M6u2~A%#xokmJn?{|Vsl@_~7ShT}q}gM%l_SMELFWVO zUiz6D$ihv9HT{~UMtcz`F|m6ayrXWsNdq12j>s|=7>Ai}uNv3X#%OF!H&#kIUv0H4 z%yT2ZM%AIaegd?;_dt>g%TnjRi%p9oryV&AVuj_R~>J_H>y7;AviQLWI2d*%-!jm zfrZ+xg`B&^YO{n%=Qxb_s)rt5ypY5A`Du6@=~R2;F~uh@hC>SvdLCm`9$Sgn1;tn$ zhE^=qg{CQCF^);(<^Cq=trI}fVQ2jM;WFxK^89z~?1#Pyqs0La^w?nZY7Y`@IBeJo zcjTYnYi%ixkQ0~#VrG<4tH*4!%A<}_z`~rTy@v*I(c`VPaoI$v<)8o3S3PZ*NR{4o@qRjvE}?i@(VpepIQb@t)Q z7uIG4(${d$s~~K( zo_zYZG12((S7XD&^1l3SXwNKEQbT2x(Bx-lpo9S3vUC zSc3HYoVM_>r9&g3w4dUS*xa#&)B1EqlhmY{_LZHf;U?~^+o z#J*qiYeIN`c3a55(0N-$ujunFyL>-1r>Ny-tZ8hf!#gt{ zO$;Z;^Uayq`@X!nGn8YJm!f7f#md|iSFsXkocRjL9%69p;9s{H*)5srpSg)=K4{yB zI-AIrdA~7%z&Ma;?euK_)fs{ALptgVd$ffx3YjAK$_vOOi;KDj{hfcbS%nAyhiYU*M z;gy_Mo6=@`xNCpUG%e9*BL2|Vll$8~o}GqhqV7!^@sP4NCxC_}^VRC|j9|%2bk+oR zc+Yq0T}Eu~PZwsZj-8>zd7kJq*)Jeyw{gRr@=|AJR-DGSnT_Ms@ z9Y>i3I7kr^j~6 z`R{mEleB8@s^18--@Pgz0PQDwLo@Pj(2+#&tFbL{c$C3SXdoppyyc7~;kvZN+;7z) z5O*1Ivpp-1*zXpsZ~SSGt7Z@CJ!;xw6E+h%SC%XyF@=gKoBOIVsy^hcrB3X=u_Q8{N~wR-^#HN^`%*Pd+ckyMZcOB zOgHepq^Gwu7oVbD3hvhJ3R2y!Yl-3oj6FJ6Hoinkpw|~RH8`&x%_ldw%F5V6;yCS* zFQkTbgJJqwd8S&0ExsZB3r{m_lfPBPZwQ2OeuJFhd`ako7mq#J!szcwoG9#+HgjL8 z{9FG+o%^WIIsLQ4MPorZbFj`FSu|H0Dsz*h)Qd;*XOx!go)?@rLQ>>{Fz+iO!5Y@Y}3Le3l%IibGyQavo|>W zmQR3_-hUrU^Fqv6`cmn46Kw*xvxMhg_YagmIZmpCnY=g`#XX%UL^HA0HQ-aVnoFW~ z0-U=98%TW?%IeqD?cp{4#OiQzXOpF9YAXlbDkIjO5trrt`tZXhY|pqOfF@eDs=(qB zcD6qJvNF%Nqt}TFTLy9_b#~^T$Cxh&#Ya)p$r^6%k|G6GNL^GeQyex5C2{7l1INj$ z0r;`yQg{nhbKLWIhlNKPA4Da&Q?EXKgf3Eeoul8&$E#KwOK_g;em=>y8G&jXIUvc@ zz|OK@FvOTuU?SOBy7p}Mf!NDP=Nk_zt~{kn~iZ*_WdJS?b!~=mm}7FjDS`*O3IZ(C)KxrWLIGScUX#QO3vvVSF5S1dR<%7 z)R?`$G37Io?UZgl#nWt9W1w@>-lx%Y^#bt?XWWS|&WB?c0!0O;KNNkCmCj?9!=JF! zl#6?pa*R0E_1Et?w%x2e0cKk(czSZAGyO$!vJYc?C7hy0m@K4XZVdW_>1>nMCqJiN z>nJVKATCdZRM2C4GpUlV9;b2)#=&=1T|^mm2UR2JaNgYrKzxdsZN0Q06${UuJumF{ zN^O;=bd~+?v3hs$zJ5UV6NTja$pw$XzX+s;37#gY`6&Zlf&8l&3V^KBTDQsjEB z8+HGEBzSx_w5_huagM>TWRu00!|l8)zO?6_$jf{P5FF8gO(foriz*Q z#M2RNJv(Olu@%&+k}3MiQn%?)5^31Rl4Mptg~*+zq7JD9V|Z=Er19m$D4~~`5IW^qb$)7mHoX4Nf9!qlF=5N)V+J>~eAFdnxx;ht7 zPv*GuI{*4xafKIGtg)1kLN(IR0*3v_{6`bM56q9f{b8GS%BdeF9v&Mu1~a$s8)dA9 zhsxaEcuJ?J?!rJDC5$(1q(23gjl3b0omLL;g zQ}Ky&8=P}oKD6o_R=r?aF5od9#~thgToV=D4TuIJesiKH;d6SiBk-?N!1 zRyH6Ek3H|OB`DNlYxwc)bEbE>vx`@s$P|w9uY0S|Zj66Z9lQklnA~m&(=xsk$Q+K2 zoSo=80Xq34(W9GIcD=7+NGv{fnq;ckk>!uHE4hE&cTe2p^iU&`&{Nx)y}pi!xTe7w zhmW=iF?nT4ys_;ELU4`c%7*xI4&)e{{-Mz3wq!+8pCklV)^0A zgRoFO^y>=^PUT7C{JrtLH`R4N=e$yJ6gi4NM}JH%UpE?3bvPlg+u&<+pw2iX z$H9ty1>4{jV++&U#>mME;#w`qDTX8Is~Hi=Jau_h6zPeIPUq-nZ#{xMmw2=s7FKz~ zTe4Vyvz6=3nD3$aah$F!vqWq3=eWWBP`xM0P8{-9?lO(Z#PLMdn+y>IjORm2i{DV% z7t1I}J36W`iDq-|c?h51JoJDU4_@VHx$PJA9IHv&V$Kuoi>5zzDQ_5-?tK1!HWd7r zxVy~1d=3#tf$jW!)^^UBUOk%mJHSn_1`6lmM-reX)Y;)XDHdGi+5SenaKu_#E1l_up$<9b? zt*zDEp}KLZ7s7qZV>%J`8&tgE>6=WvXz3j7D$xw{?eJG;SuE5VE8Q;_c8vHR&)yQ@ zNIK+jU%zG6x3I~0t@_*|ciC6-HLb$_dm|BQ`$_@EZzjGy2`V8zzTWV9lX(ArovFi@ zFgmz{|Cn@)f+~GHJ_{9T=CW8Ca>NRX3~6aY_()aAe5_9uA|j zbA8co=hiNNc1RU7rf}2}_Apg3EAMEad2U~<1>q!DlUd3L_K9-Lew3|U(h;ZUe(h%0_@F>5jEi&c?1Tkfl9p(!P`Iw<@ zP^9)Do7QG4ZsqMns);1>r%jK#G*yK(jQZy1Y~HO68k$HOF7tk-P26bM@4Dv7k-I$dO>{4a+o|{>gOZoQdrkXNV$$8V;Gwar|NwFpf z&m2MN=;Y8VD&MmeyIThwxkn}V+q6lUWT7up#_Vn@_Q4{sqT}=e@Vbq^Ft*NpS=G`T zUep`SHSMN82#{|SoQ#5oJI^I!>pOp1VuMjqO>OP^#*GY(_bX>p-TrpN@7A0uNB?|Z z@^+`#5ci!#HQ|vI+9&%}#Rc_e4CFcbql@2M*bN9zUgYM{%zfu4#$x+^ez&|29-Bxx zjT_X%vpaT(_nCPKjV$yxKWsvWqm}2gkXwkdxpNPV&eG3j6!(sd4XWj{UtIkD+~^f| z%2Y%aDS?7c_T`AKJM^1JtXqpHnfw@Ol-1xut{rjp%~ajSak=oGd{4m~)O5FH>ItwJ zo9%_lPw(s3l{MbHFj!wz;Bc=S5uCT^#Go=He*)CWjlEYn0c^6KGX%n)Wiy?>9hLgr z(5zaEzBGHS;qBWme%=k`g44KMes9v^w^iIY1L}63$InR>e#=S8Nj~=7bbabnh<1{% zNfFK&GN{ofd2A>m*VU0%nBT1Z+2Z;qeGyaME^e`C3Ki9q6M#(SxUFC%WaMr5Rrk3x z3TVgSVX@cR2+n*{CsM+nLkDE($~g0#;F9_q6+~2Sga~&GMRS$nl|c`>1EFxSyYigO zmKE9ESy`jBmDg~k^%*%sq^nSy!E9wA`sj*HDwIA7-Vs33k`nXu&2WhAW^2uJloNvn z#o4C>)%WqYCk8w=p0DVBNQ3BB_dLxG7QTUh&#%Gk`u&JeZ>jnS+2Qw(SDeuZDv9-| z>3bnhG>g{`*&}AwK4F1V&i;QJ8jY>X^ifRThPDpM*t!MZ7W8=4R>kvOzq>CvAjdaY zQ$^3Sc(JWcN9`r^!&pa=LsPStLy8Z4J{)N@@`VU39v7x2B}Eax6pyp8I9}VV30&B^ zdf%bI@}qZ$<_nn&3$+UD2)WkBE6JP}E4R-~v);v>5rs<0hjTgj^(MFKVEZyKNg{ja zxSzL#$r9%-PIDAKmvIViboeYJ^;wH)rCH~5kTDG*`?TLVX-aZ)G=885VZ**@;Xy# z1-OJmTwhBriyFi(z$ zWLs!E4mODfrO)<=p*K+ndIM|H33GR{a&tCG-wpLm**Tnzry_V_pLBE7dkSl{ayqrm z5Wna4W@#{djt?nwJgWSo;w9p~Iqi0`T1+0z-Ea z50N&6)3SUoX-aPWhk|O!ls`=9{Q+E=?w{#Jzm!dsj1eR+(oRL_z9*{!OW*A$xC+`?{tXiyu#6DB!;a0@l}@v4-uV{a14O=#Kb;SE zVf3v^U}bH$nl@!Ceij)of<2U;5GO388D-#%8gF6}J@|UHqI`45HBsj}`>?jrWV!fvo~DU0Ds zc{XZi+u-_j(_0s%kvrGZxW8Q_aoBL<{6s!d(QjY=o^w^{Yhcq0G;(awn<+nEJXewe zYwbX)tpnY-)aSL(bP0BTJ2O<=KRIY8C_yHA)A#{hpT_kIys{!MQuOG;lig;WI_KBt zl>{D&uc~e@^Y-|R)i(OeXi8~VvS2YX-dLY0wO*Va=PTn~Ef(vM+(}07KDxG$t$4W5 za9F*ii+uv5*4~Ec_LuI}AXPMC_^y1zE%C9wne;)Pc*Lw{?lG-(P6RT(Hg!90NS0(@ zi|cA@m#3rGw4PYuXQ8-lIG^fR$gJf>besHPJnHFq%zW8L7sbs0%OYX*Sz4DnA9I|^ z*m?Q_<98p@&|~8{3za;#h`u$ zZ*^@_M&!xBKMZ6gVe;7Y z6xAGOg576(L|I^H`O;@ekr~p(CiTtK0B6{2?^z?^i(7LFV>-RpqVZUCU-%dyJLB4~ z8d8NoRvYFc4y&@I#@g;;?J3?be%q3?DL~`1ffpPsxQ9y3qUz4E-^Z=u4KLEHJv07t zTZzSRa5_4jCt4c87FB?Q_w2&J{oRkbT8|&_$E#8>1vU&f)qGkKd71KrJ0=X>)>OOi zpL33^b4A)5z0_GN19}FQ^#daKde|(hE%Ap}-gZM^PLFhT<-;qy=CvgsM02?HR8}%` z(Os>Uiv?dfzTboG#8T>4=9_+CcpdjChDQt)F`ShloJZmt!LYtmGPUg*h6m$Vl3Aj>ZHKSfS_%hM=5SFIf}cMI z12+ra=Olq1i(TWe^h7B-Qu9uCX@21tgSoCjd~d5lxk2G)dYV<`3sYWS3#XMftc&n+ zv?cd;51E%<)>FiamuKrTc%!(#C754-*~e2-GWT%NNb_7>2$^xL))Q0uoA5D#XJaj% zETWJ046*#$IztC$ZuBPsx=Ez?M1hBgNf&3@fm9cws?ifp$C zMbVU@E6`$dQFApY*P_|Fqd?T6VVapksy`T@Ub)YMWZ9yZ%ZzqyO39)F^*igl>mo|BLM7m(9FX6WKknQxSnnyDq%O ziE?Moy}o~~KCy`ZVpJvd=WVRp&JG#GU-Xms9}pC5GR=4H9J0u@70|wML&4=!`w>&YAQwM+)2E})7wa6z3LS4Tn)cL z^Dmb7tCLx7cDFw0ko143Faw!96H*e{<>h~Mv@J%oNh?xEH3HEhCBlp!&Jh$z@Yp`4 z>B1r``2~qdBMvv?nk$!TXUd-ZsMb(_s%Ai%I|19>D;c%6=J&FsW#nsqD(^E`bvFdcF8)Mpicxool7y;n zH}qui9|oh+7L%OW`K)ce&Kya9-;cEhG`m%jI5WPK4yjS+D(i34YdN_yV3kq#CdT5A zG5QI#-%6C$UF2<4Lei1C$B%PGjfvRZ&X3i-eUAVeOEO3j9sY90vQ%&hwwcK6Uxl*F z31#0VyU>PqD)|y!vLz$oV%;Yk7WZy(!tDAdSDX7{hMa?px&gUjy3bZf?4pUebOf@9 zJz2?UYTol%b}6~S3F*W>knH8M2zNeNc6RIX7U&X^+n>_BHyx_E?zSI9$DIHD3~?6G zr_$@F{;i1zY(sbt<_>4}yA(KPX;*2QuQCoVS;H6INje^749B@je6pb}`&d<$e>l3W z|Fr)EIM3)=3hNvi^PVycRqaR8fDdsN3Oqo4X8 zPc%t45BrS;9wIlkc8y!U9`GFIphL%k%|o+7%bH4pSa`p82k^MwTRBLQR-oDlu)M~) z&$+Qz9b76hamV3+u3NQrGBtW@!|MPBAMHUMx_{f>)0SPSZgTX{40C#hr)@5g5OJ?J zT6wti()I>ha8cVq?UppGqf6ZHVIazfP8vq$*ih8iC!;yeqI5Jd zXA01;MQKL+1vO?=n(EDQZEKat@{=B-LwX1gMLwpgPpxajq*^R)Zmuqkqvu~mR)AAF zQkJ#iU}^L=>VS92%Od3q@%XjcxMTO1_4kqJh`jsCLDP(pI@^9Pjy}L@nCxYA-vmil zb>cG$u2%QjEol^W z=y}#*o<+g@+KZ@Y*(YE82-(M?lqN{T*H@Akatq2u%%ny7s?lDPTf1601#{%=a4XLQy zP2X-Ve%jA=RTkdT2v!@gnzZNjzD!*;zy) zGPPtsNZwNoH-3sMRFbEJc#$pC)8{HQCpE!yY^_>gFY7uSRQb$I+9$&{-;L*0`2Yc9 zWRgT7lNQtfdALUOay^o6FPSqBKA>XdnvAj(YpX=bA5?h)fTi(m_HP#dkydGn3 z7pGruMKYRV)haAg#qq0}$-YHzW9@W-*KEK7^50}AjZnRvfoc7*rs&?>SZayv> zp7<~yoZl`SV3zJiO7&@X*K#^lEH6aYe{++lN31C$^kIlIAAF|dQm60!+1Yv`*OXc_ zA(r&++QJ^v9h= zDVN{zGiao*9%Y{Z;om9xRYfmcQBA$NG50}wp=8PQ!OLK{X=c~X)CdQk)T+A$I~OW; zm^qW5B|XAgF)W>cQ~ZRezi_mZF+rFTSJi|Jmk^R)N$Ro{=J6JWKM*DC+F`{ zV`q88df1_S5mL<_NEj{8rX^qxGQ?T1OiHav@G@}<%j9`g=UpY3 zzBk1eWl%bG?ofBM&%b}}tKk05ny&JoD|bWxYWhlklhL^j=!aQqPLu-C-TP@Suk9bl zaGA9=kK^4?g#~_|eZc>%m?HunAYC8XmXtT>eO>07mYsC1a!Gv)rMCyM84h`@Cb*(W zBGYM1LHv1hESUcQxiL|W_%`3aKEtSgKsNnhE9(Tv0RQ`GN6v@P&LiV?8VF|TUQ{G7 zOH{^`h^k=q7GdGXg{E!kyxn{-F2D{MCKw+;P+a-KFNuw=?Q zZ(goNCW>fZ)Ig`sijiA>|MIR$szlJqXxq9vVr8)y&Y7^tqJv|lqfS@%X{s|KC_s>v zV2VFp@T~;1H|_pQ&CRKn;l)<}dgLop9$rm5t|uxIfWUNIJ|7t`RiI7emfh>)bX34< z8Cq&)LfF5*$09gme7YyZfs)P@#_NpaaV~{>o3dOR>s;ud4f*6q{?&N0E1~#p+&RbG zZyFCYqf(@^bvtAzQvEvLC>F*RnZ#+tF+Yf&E}4T&MW(kLO)~rKwS7UYT>5wn-?Yr+ zYvS34p<9SXW$3$SR4eXe4D0n7J#R9tudk22L|J~n?JN`-zCu6$UN^;qT%41mf#FM2 zmfa`o05_IQBXeFJQHtkr_A2@!)}?~5?tAQ4ueEzmF>ibw4oXKG&ysZ_rJWMdS2eOM z4ov%aSG-v`jvO!WU7n05-^h%;K|b;I6JbgrD?Ot6r6Tc%J6GZ~a`#YfB46_hR!BHi z+$TxdmSlYA@Rnv*gQC$5==6D>kYjKQ$v6W$`|2m@Vwz4hlru|BL?128m;S{gVma(s z2IuMJ7u^<3#t)+DYndbhBU9a2&XzA*wD;e*hoE!6Vmm8T!?`JYd@zyh`lh&Sbz3S} zru3;mM{e(Sm`XX0u3>umClvo(1MkO7*M)1mB?RHP3Q>%8C&0_^{Pr)cJCsPmLd;J9 z5jEz?#0#U^)i2^TH+XJ|e)MZGpah^{t_pj5S#v`m)8gwAqaROq7b)3}CqcTq28$1#y>aXOB^KsKL1yxnuda(`xVSpZWHsMC3~CrX zG`||s-QPxSWi7V}`v0iLK-u;30bZDJ==sW+CJD6NA;W%d*@wL30 zf=29T;`(jGqdbdQ1kJ11oRX*zh)qqIrY+Uk? ze@uGJH(i<+u`Kz28vD+$rn+_8D5zMFrgR9s7wMe{NRuW_I!JHQK?o&LP>|kxliqui z8kJ5c(j_2B3(_TlU?9Ys@0_#uJ>S0j-g|y5o+l5iEY_UwoNpUr%<=q&!q0O%^zMzU z)}7}hBMWjz$dD)_&)6+eAi88Mlb+B=6yE0i1K5fP(-<#s4*B+@y|c)hJ7&n5W=L`+ z(HO9D;v`O2!&DJ#N-`W{m?SsN3>=o?IdmYiOcY|SAA)8d#C;*szt@C!jXnumA+qzV zT>&89;J)F`QERx(j^xl-`wzSAU5j~{PYQ-dWmlTNEGC&g9dzsqCs~@vu_WiwxfjE8 z%{)1=UY@+p;q7@-BukvNTHyXDK1})Go`dK2rLck!72{Mc{$U12U%ByQ9LtqR4M=t5 zrS?GkzXf^O{R0P!@frh8C5{V^hU`wI2e>l85p9FD1um$(aY$K}syk1zeM%vt!;#F8 zaiyz)t-Upg5%PgF{j8H5XH57_+auZGo%Y$6$cCxwtttYKQ4ROPf5SVYIQi(n3o*q;CMB1et(E3!B7Jc;=OhcpfEoCrV zHmt0F%o66pJ$e)zMab`vZ&3BwuC;5BjF}4O827uSKGM;uWXB~UT{mz2crj-#75zDf z_LnW4h>z_`>Us(rv@XWveIhH#3C}RcYliXb>Ss<0uVh!s#zhOUgA;~I zz38hM^$Q!l9<*+Dpl!gtjzX(&>NKFPYWf#lPQdls0&Ne^;g{S(uo%&}6C^cRrPhN> zSX2VhCOM<9`>$OXH_xQ#@aMjH>BA}eem40xt^1GXPYb6Cg}_sAMeok$PTT^nVRkzM zDpuEn@Lzm|L0##qo>H+37)C1Xkt{_BQv!(NI>=ldr-qr-GVHwjSmVBgX?uPwwo})) zz)EL_C@Q39J~-`qpD*bv{p5Ga7x$PVzN9pg?T~@hZM5IGBgHuQEyg#l2wopsfh#e9D$&9ncq#K3expcOYkyZ zqqzfzS;zP4bzr9rLwe2qmDPa{tj3Z*``?ycJT-Jf6?6zB05)CL(RfhwcDm~C)hS@v|q(uhP6^#4CY*SIz_Xjztj(wBL)mDe~C2?lo|l3BHv7E>Zj12jN1n zqB9KBX9JrPZnNlYIOFg1YVag=?#hRElk@QDy?($%#q8vHpIsE`oq7+ApLWx z{{?v$`HI6L!>*Y#=&05UtVLDX244O&RksG*lz1isY*sV7H6dl zWzCY+-E+*Ujh^t@x2EJaQa*KIvBn}H&fqsnPjCLz3wBz*^^(zfm&i?G5xLufVHqRI z8~?n^x4d;3I|4+f!_bKZwy;jLSH5HFXkoTVFw;VG{k}~}sk?&Hj6c# zVC~4TLsvvP-DvK7sC?^{6CJGCFkT5QjchxuZcPbV z&ytOxMoITaLI-X?KlyN+aNMyifT`qgMAIIQ#K2D56+NU+!#Yaxo)q0X;m&ik1l^uq zPGUKp=R$Shw#aasQz;bQ zudIduOC6;zZ8W3k-qD5gCG_VX!-Tmerw^EC7TkPx26@&W-HeuZpyb;C)C*2-#jmns zEB*jvymo-&3|SuH`D8k%j`UX8%1=eBXyPV|kK6AZ7fUd;Y6CVDp?{ zkPHwFuom9;7CI4c{0ERPEFs6l)XJo8V0M~q7rD9EMse|?by~YePfUNP54*GWOB+*T ze6Z$#_j}69`#U*ao088YG*0Jm^)LjenrKoO9%vjAGMs!I5*bg(821U+Aa-iIaN;+N zLw*n&{Q+W&H~86+v+RQR))5U6e9FKK`4C?l-i2~lH~3WLC{O!5Z?a-p*roffeu+X& zqE4z_b)M~D)Ii)x_PlAqaQ@-s`=*wBTw%$a8Z=Xk@-@uZYbreqBZGp3nSn!W=C)%< zrBvo5ZtrxY?2&lXm8Gwe7_~N67pLeypd6PZst?9nIo*4lJt+cs{qoHd6vLUqEtA3o zUigdKzuCkSd9gL)$wN1J-h1xV?5es!1R@WVbVsTxeDoK418nHWWx z6n|NJlw~`bWND`pcvsWD<71A0TjXudt_-CIuSUvBU2kuY^E~9pugd0ne4owbel37w zmSwIdbBBp`sB1XwET3mAQsdqByMY_Y!Hs7WZnylhvO@GU3om;bGj&P{$jNlwC$ zBqbl!bIN2o{9t>8YB8m)BRzCFy)Pxp!?T_e{GvT0sLmvRJh?=4s8>b?@Q!&$nBWLsYY?N* z=Z^pd8vAv(ESp*zVZGB0wFdz@r|{9k?F9b9-(L=jY#I(y(>LdBM|qXSqSGKBNVpVF zW;e!6x5;l46Tv5(s*3kz8Bdno&2^5F{lx7|J&s?bd|#FPCR-a*8lm%k_+|yQ&tQyC z(#?7frptD-%`{RCier-&)LK>>Lu{-9=<%Fa{UO^~eVxalQ-(%K8MuorrABwlkUiBR zg7Ha33JcZa6ae=}24vPoUOYhaoX7lU&cs*F|bk+H`~w~2CB2-v-;Ef!n`j!;8q!g@{6XCev44caz$ z54QE1mW)wGU2Jn018LY+=Br!RRSfeQ2tZE3KLGw+5O3-O|B&C)ndd1-KbF56shz)K ztW_k7P~=G!iVEvPoUeUef96WxHrM{h!Zk2ZY|kNHlJ-OL>W_rJl@jXJi8_c!b^3k7BDRQN z&5_mMC}1f{Ck#Db}=PlQ&(qMz3nKZ zQ13RA*AxPj5|FPxs%Y_WF?5l%w9eM!qv4*V&-yb{Bce9dU}S^gau=y&4Rfkckh-E? z`AwAs>z`<^gj|jfPHaKy*6(fDAOvU^T5entZ;0zd^%WtHMJ$InD3H;8ucd=dDx6&6SQF+udl=E(2QKitpUlk-!GFeYWz{+bY4s4K=gEYz)Ds5~V5GUd(4UoRX-BUvZ> zkLHL?5e$9cyNUO8p`8@S41#mYQ=;V&JK&@Y~=9oiV z346B?bW#RvgPw-*_3R=W#*ZhU6N3Eus5wDsDXGx#Q>}`mr`x3x-nA>y)~Yd;cV4$R z^@T+oa<^W@-$F$)%6f3+_`r8Z2?T}r45|Vb$Hq=%ylPY#HtXt3H{aY>E#ZtPe3nBF zkzJ_nd5N)Kf=ppx`iP6wncmyI@k<0H=)H?;eodblkxReH?cN~ z7E8;$r;OGHC_MsvYG=dRWA5}&O1A}VlJy6`$B7nB_2AZ+29Em{){Kht&FRba-|ePQ zc4rT$nv}+5v=|@U=g~EgZrU3Xcx&~WXzp6w?_V7QZ z?3yn_&f0D)!7B2e_Yr<{qWT)Jq@{RUh%4BA448fqnSY}r1IpDFdnLJOJuj|8bU}%5 zZBq8M+B2RT*+ZszRCm_@0fgTKI<^IcsBk4}W(rk{as|Iv^BqhSOkkBSw*>gJu_PRx zdmIGqy*)XZq=@&RdzSoAxxK~u@?qE1$j?(42j1%sU}~5_J#F3sCpd3MfJX15;LQn3oz8RIOEUzyVm zGlv-i9=E7x@;(4<6C%wuWJ5k|hv10iU{XE1;8JYE6eu0<(w2%M6rJ>EYPTYu=4|dY z^-Hu>zE^H=J&SrIMPKIvCT$MuJdkpF1#Jsvo}3v9YIJMTaHPolJib-84%UEE{mMGkHT1@d}t{5T6{4P}qJ zdPUl;;MC=PNMiT?x~SX%>5;n4^oce|5GvjC{V%H@#l{k>5Siq1VY9W6Tj6#hl_Gv9 zI)gy$Z5PMvh3vO$U?&v%wfBX&HpbSRx{)By5V^A91E<{f(Y&_i46%(d-?S12kvLYT z5|Z}`^wcECIN44u8+i%lJKHMR#d=Vi!1N<51ImEp^cdR@!cO+ej?=!Zlc;fFc}@8^ zK_=ZO3~=w%%Wcay#NwM+#?}}04VB87$E3_qHmHgm`h3T$5JVV`ox7kNs~;vL;{+PP&^JL>VK;CBy}8S z1{H?N;?A&B1S<(7*o&)ho{#{`Y-sj}pXPdLp&g}WN)@|^fVRh3O2m9p*&CEHb`ar~ zL6?%9`els0>Nm&&=JD)pI;YVTFt-fdr0?z^FI1eFcHU!h^4Pe1!C}tD&&QZ>#N!It z@ZtHhB|_|mjy^ZB)+UUQ3gH^W4WbSQy1a5TmbIo|p5;1=tSnoMY4|;eQDLp!n%9tc z7F;=Tjw5Gf3T(5AFCHguTtV6e#+BY&kO5XSD2EVGDBRSEk{X9XCUYUMSr++;TDJm% z-4}ZQl%2|zV956}MFEjDy9nx#y#V6vtQ<&2AnXd!g)S z2bAef!wupdQ*6Zjd>Xmf0TNp^-Oip^DmIj~mnB9w4D=0Gfwj;LQ#ScFXaYk6o!-&s zQ}E?3kmnmVPyV@XP~~@iKebvG_KR}$Vrh5oLs>v7E2-!j zypIaHW)zxi0xC2g&g-e$IUZHuTYJ*iI_>|vK~Q2@i%adTcpE3t`-N`S8+o46jYzT< z#aYb#7E3ucTG8FJRGDjeagLD&w_-ipLj1ZCvt$bMX53igkWB(1A$vV#->;aRS21KG z4U?KsMcB?Gm^fkIVJ-Q3C=P{_!KYYOEmk$FBe;qxTz>Tr@z!PBhwl1zJssdJ9-3jX zbFs+9G%OVzoHqws51nu-JP&)Kv5uey7Z0l zy}S&`y9US){9l>PW?lupd{xo>y`+2^lMwrqwI*vw%rz>?Z+ZXC^>a3S@|@Yh zENC$qaodsLXrF6O?pt{sOTYpvawlGc)`+z35AwdRIc`wi&67 zlDeF_Qm_=-9w%` zG2aZ;f9q19$n(pFyqahxxFCAYeLYnr5zxnz3zC5j-ueI`B)gM31f=*B-tQKw1r1k= zvan&t%E*808VHn3=ETYxihMjRGFxJ>|201t)}nWC+;~;=0b^paWTq`2IxI!1kp=k` z{PNc~^isDmA_(Pfn`d)RZftXkD-(L5OX(ux1DiV9(}bnR;j2x{_r_xn#{#qq@&BkE!F1} ziyk4s`gzQb<9<_Ckhw;3%IHQj{|rAgnp8UASLD5qQ!=TVQae&RgboyzV3dFPvVE*p zk$QDQE{MOc8_yHc9kkg3GHoEMdD`3!>ecsSUutla=q)@1x?mCv$!;0;e}0l33_iI7 z2!&hMSlsJ+85AYmmx>BR3MCUvj*4)R628==6mRO%Z`6k?LiN5&%=5r4zHBnBaizFe z^n1dV;*=U*^r(R4qK6Mq#c1O4O47zDgs8pQeW#!4xfz^pz!Tbg`iX&}hO1oo=f?MM z_H)A~Ri9WCUkm@Zu~@JSo|Q*K)BXUspgW=jtN}V+s6})k$GVOUtF*W~)yg z&r9|U`1!a8G_N)k{65QBEET@IRBvtlUX&sWqI&A!^F|443 z57Qs`5*N6fO{%wEWn*S-5ayoKqfEfqvW*|t&7}2c(1Vn(@UF2<{j~=Nrrhs?(m{cH zS6<_5(q#O?Ik=%d^$@Iljs$=5w)4F5-OY-Nx-)xU_TLJ6x_KWDt+S7q@&dSZ2uBpiw93z%8^SG>j{kYM_S)`Vax4}w-W&hCj;NQ0Ff z-u%`CTkmPU4OopnKU zZG(h;?316k`AUxF$(NqbTM#3N>Ry2_;hTrh3Ef+IB6tfdH|lrEdU+92Q%4n9r=kTrY3he1|=G*;|ProP?PA zP!aqiE02`?qL5J3&pW~Ohk(RKx2E7;@CG=UBo?`9;Uxumfwg%eiI_m>^$a>^xITHg zm0~K)hkG1Z;(UY9_IRWAT915gFF-a=T0{E8ada?70zShgUGssf#;q>DUUvn~DnzSH znJIdckP@%q_Sby6*T>JeHU8OUu=%_E$tjc#%&m@w={`!yv=nWo&c>IvKgVXbXrqe`#^=Z~ik>=zFX$2GlbV{3TWz>YBs z8i(84zE7km8AdXAIBW&pWrkC_#xzawL-eo_6V|4B5@xN*yC?2aU5d3|W;TqQE)oha zly*9U=H42-i97|}R=CMmK|>IC$RC_cbadb5Jr+7!o&f1Ic68*ds?#7!t8UcgeRfog zJ3@UB(HdM#$-F}%UBfs_DE#&;Rk?QwXB5pAM_8blTBU+H)3?936?JOmT-=G5uk6`o zi>8zR_Vq^9pkWy<4>u&TD=L+_aAQG`b53yJJi|N7gY8{C{l+g%*((E(CS8QyCwh9j z+I_+q+Ii5f1(1k*{}xZ^lCxc(1-c-4TS3db=Us;M`rJ`@TbSyCWU#8|$@L#1m9_(U z#y8gpeHzDHIQR2eVcWU3-}MXph5UuO3r6AU^C>cvTG@7I1xlq)cON_*H{2LBCBfCB zk9T!|s$POC>Q(NGneDR1Ev@c*6BXpbifpGwQ8jYpZ`@WshWk8s7v3tUsMuxJ40FOL zfUMAKd3qWC%l}xcSDQH~CnPILi`HdtbEBLuq6L?a`!x5QS3ta54(@utm%ikS=LymV*}NAkDLn{Qb> z^6`BQ_&z*nUTGZfZj;gHk2-pT=Uh1Tsc;QP$$h*AHa}VIHpOJL$YiB=%eTN?K6jueT`Sld#B!|e8!RURT7orgVqg% zA`>VJ*IQ{*R+0P?*HLS^v?o~0fwB&+YS?>*7`|}g*$Q~1<8@|~LR@5IH@tBVV9ZHa z2C`=g3~0k~Xtpnwasjb#kg%X%WC0I!>GD&RC>s~{@ENU$<_LOdd6RJ?dGm(K9AD%t zRO)PMCTDrCPpe}=Ab^SH)GPbcg><5Yf#;C^+X#p9;cbIaZZ;BPfI6ibUrIlAv|1I} zFhM5X7f}HhMn>jVxt<66xDL>V*gQ=c^l^KVcV+QBjyAR>WZ`3t;2aFpGv9zsKu?Nb z<#fou>3p!VT>8ueM_6#hm+O^$sb4MP>mUPj)SGpr<0-F|^Svezi?3QiSrCHjcxO-D zU5aIgw?iyMtS)}lHvs48r}RIjgR|LE_7_sU2OZ zSXkn2nARBL#>Pr*wDUbl3JZ&I)GshiWI@H;2LY?e{`Ysv7NB{uv062xQ1z&B$pTyS z!y#A$$D&x-z{b(ozFy9fCs>Rx%X2xF+?2dmZP27~iV!Sr$0qXb2B*CutH3TQ&zHhx z{ax5orvnl&lNS8^vBg{PiheH_+A;%sKlLizn4U!=-2QxG>gg0)LwcS6h=6}~>;6!R zMZ`qChd`b7ujMAwAHqyI8tY1DoPo*FTL5Dld?d}djd^pI?9DWD_ymoj8$lrjI#@4M zU(xNNcMR$#l_BZ{tUY`R-41jw{7`oa{Mr>be|WmDAmOA~<(r|87)pT1`r5jc9n0(Yb#f{2xH27#H_zPDL#S-ne2k$?o`Ld+j zNc?kI{7r!1A{XxiLz9i+)tb-~eZAF^=~eq3=D^Hx8|sS0xy!G$*py``Z89g7pP z(LyfDKF0jyDlt`iEf96fJt=NID>B{b(+0lD_6HUwsU{Zt;($jEq865>Rwa)JkW;NR z%>fE}lZSc|g<_DW*jVFPiM!J!?tuto>$z-U)|r_CM}%QVxK~Zx*3 z{cS^D@3AHz2i^|Lt$}Mt>1Nl!GK3IJtfyhl8a>Todc05>^F6~burVlzdZgvaRsnmG zP23&60r}l(h_NXg8|byQe3zuIm5>wMojS1;9db_iBKNvk3H*{~UzAyEuQv5~cs+4_ z(7L1s@)BZ#MUQ9x!lo>$=jt?~(+`+UVT;U1c#~N#j`=fTYxk6DgH;{XLlquX-iIb7 zPtA;qkvk}lHF)C7zGn$n$6TpXY_uNQDmFSo5{(wue9OtEoepHO$iCAwfW8NtR^Nf^ z~EVQxKx?r7AO-1_d2o z?6X8E?*^M>2Qc{}kLS8wgeFV;{O*^O*M$p?&u2)-=U8@>>5po$he8S;TJvMCoGZ-1 z-6~-~wORk~T$gZJ$H~I#UC9!?)`jHx&-3=pOLg!1d9RkM8_S-?%sveIFB#0g5EnLo z2WDIlp)5x5s%XjRo$n!23AVGLtrt%Og95~7pD&OqYrXr}8E;OPgLGLSw|k>%Irj`> z%mBh|4sHkz*1_^lm(He?Z_fHxbbO5V^i-^}hlbs%-6vFFZkF9Jd&ksSZN%eb?9_oJ zbu1b3EJ7pPpBI|W9xNdGHG0C7j=Z?%*mERWArDU3XPweA0`8UZ&Yc)b1JUtpGw5ft zZENFU{F<=Fd9G&3Do3!tHA2vul)_VGC{Ix?H|rZW-+QbCm`BYRP>4>Lfy8v@cq#5i zBkyt*Aa>wYuCL~L6Lq`h*&_Biso9#9oLPjYEk6_)jK>ro5i)gVX4KDEpqOiy)yny_ z2|TU4%iTkyB4z#v-~9DSb7Km-MmU<~_hC#^;xB)Qc{gtHtN*dA^`5L}=2kb8uiS+A zM8#+5*^+-p!rf(8MJ|eA$k@;C99Ho+_bOziaGPz&l5(t{`CQLDFypk>bB0&=eo4hj z-F)5LIYyE~SuizKR%VVZ*^yHzPUNmN>-=LkP*PwpH1qh33k@mc>MS0t)TzUIFRv8E zi(lIMPuv*Q(+zNNWXyOivk~fJL?~cQO1o1}yUp%d+eHp7!*lAsC%^*FGz)~QElek% zXWiGIO003Vr-;T>8-J?W98EXsK;K1CACJi1Z>b+eUWu7TY0pvL<#@+T0d?d+A<8CN zo+>$0e!;D8j#9@B2j8&17E`Sv-i{iSr|hBnw9g@?HfY79W1Rkuge4|i#OQfh)t>pp z!9_+>rR82%{4}XwrS((v6f1y7nB!e`C4eE%nCO3tubTXw^gD)wx$o$h=q#M-37EQd z)n^AUwCrC%a=iq{L^_-=TE^MbDku*J3aMgR{s6G1g}DW~-KIUW7e=P;QW@q6RYmR@ zGmmr9UXc>piK5t^HjQL74RV*lC-jYL2K0?r18~34!a4GvnPKI0t?n6Ft9uPY8H_7jbtM8nM7)M&+9kG}T)CT@|LTc9PyT;6vi1%&h-b8&l z003wn%?Y@3Q(rf$IvY2H9?bwxS4~U|6qFx}v}eGxmm7-Y35j6!@IwduGu#fk zFe7xi6kLur>|SKhdhumJEAm~mI=CoB#@OO*k}keS+xT^|QFCK;`m?S?WPQ8*QXRNt z?3c=R)M9Jtbep@L?%mHJUb|0Hd-oazvya=S+($v^>~GrM-Pf*iC3ijB1+&Z*)GJ6B#!H_TUc3GE*#^APxh#y z<44+Hk;l&>H`oKcf}2L*0wD9W0S+^EJp)~l1m}mgkYL=%y!@e0!0p)se;c7#Y(uM! z5aKffSK(RwcEalV*YPU$1(SF)dr>jzc+ElUfd6J0|B-XT{sA@kPr=^NQz9fhM8V4d zHUIr8y*~c|Y2B2)?^p7a@y7mf_8J8TZvfzHUI|wPLCJ_x+&N%J<^5IolG@G3$Qg`LErXFrD%_dhk6;dRVc!`7e9rptI3oaZY2Fm!@l3$LHXxXvQz(Kf7`w zNnLimg;?9^Lp=OvbR#u>FBh(okIB9(-yCoNi6p|@xc&g5JQ8bCg6>dj@qa5y*|5+o z3FnP(Z4rM-;RHyf5_v%SSdY2$#VDl5MeK-5>WX+VS9fi2>-%` zJ8KyG1CalzsG4$gY1G&??^!K=sZ{o$6HlW2G5JtyNE42HQ&RxJ6(%Z)m+}_`m zFz#{rb_O8(_3eh=-jD{lWXoj;7N^LYix2q8UnH4M9R=k$r(Tp*D-&pbVz8qgNy|BN z$mF7ay^u|^lY^>Gw8UV3{fURtJMg^ z2y)`LQrFob4oBt^^i4^$vBgTi@9uOS2fgy2y!(GMzW+Nb>c2%X|4rMQAcXVx^3FfY zK7ae8e}SGh{5=Q$AKvq~1mS;p&%cxI`Imp@Up_Yc-C_O@pY!j@?EmjESRf+6rWAW| z@A7~(d$257AG~8{OB&g41(2d~6pl`zB5JX00J>G6gugm<4dE`9Zw8)DUuiq-HCc)6k?AZ_Al=S ze9(^C6i*0c=y#gMR~4hj?P2AK*s{ z7N3Q~6h*YOCkOukZXHd5tWzJI(*kE0{SIDLltyiCn0lP!E{V{no1kZC_2f2jCXzWX z7W-2zhmwJV)0ezG zVUT~LyxZkA_I8fIH(SCR*|dOVwnl*v8OUo(`-7oY-}j)zN3?|YChmt9ZaW}?KqgGr z@e8fNA2iST!(T&`<%)-oChCE|1ujLBpb1Z)=3Gaz;#5j&dC zBhrIQLI==PMd+n$g)v9TBByTQ$glDzPWKyePVD%-Jo_bC*qIE_8`ing6}5GYTurfb zD@X0%e7)e1WMUHN(k&)+9$YJW?(pU^R=ZX9eVFNAx|~&S*Ien_vsMBG zg^u-JxDFw2vk_2QP9>6AEt>@Cajg}l%RI2MK9W}mZu(DYeG|LNWgRJfn0QlTXD@qY zICs(?z?X=aieFf=DJcN0e0KdL!$H>Ren!Jsa-OkRJFXfx*3F{2W#z&Db;?nk=s5kE zT~#Ko3Oe3qZGiRKgMZD9UFLB`pK+VpRq}%Pd!}FFB<{xF(jwsBj%{WPf6+MLX{$v* z{1xJ7J?C3B9yKTKNrYYq*ORR3w6)AvlKW#`<5OHQ0j5U{P9W6N(G!zDix&W)<6Bzr zH>mXClc~vR1bs4`12zj>xU6_bhD=N{qL2I_YePWNj_lw&LEBa~7ldq*@ase(AXHt8M;yLwM7_0zFt=sVSN9SMxGNA)b3QrvsO!)qL&Jr*`X9jia>o}7 zd%nJdbcBMAbYYjEZ$HT&00nS|;ylejsD!H@jybeGbQ%3U?`KO?TdZUE9U+)hxLdi5vCSG$wE}* zN-R8UPotjX+A-(@H85;Tc=XEUY0hy<>vv5X+p~Bgja-7o@N`j~J6R{T`DY17nbbxF z-fk#7ruTK>6h;M2^}x>_6QMJV*eeOEyo{3eLW z9V+Of^0pL@q^QG^>CpXgA#b4?_rwU~fjlw7rMl1=4do2&d}-a5GW%?y_WsqUaF@BT zrS_RWfY1DGJ|2l?bkP2LW#^l~ka%Hd|DC-zzX=1=%Np5%yS&8v=(DGpVz1Avx{~qi zKp(l8+?0J~)LHljxKETD1pVxVkoFXF<&gXM_|k!}OrWR2#ULYJoG_-b*8(3liwz7L z!FpNR2pyYd2$I1siW9F{vOtYRm-=7J2}JW2a5NXc(&nFsI(;B3oI*6HUJi@%2$AzORpFh$VY3CjbP4HhME&&vfso)8pAkS_}Pz-lwjBZ|b!UBz{9qDEpg=z{=Q{1@-T(h0m}%blx{*N%qp z5(X8<#O$QYx9Y1S>fB~zudf_^R}egm{v+^2M2eXu^i!mMD(h0@?sXv3Zg?Wd)t-ZBELieQG!b}M4jL*WitLVk~ zzQ+=a^$-HV5OytmH}zG(xO{d+(n_gb&+-cb74oUAk^eKrxcVhCuYVkT@>j*joQ3%V zWR@FlTzoQ)p6?Y6>PiEVmwR!R9hwbmr3#2-xlP??m)=}YZlX_K|7gaN zAmqblnQyz`D$GK>awA6+7utYKA$V;W;1>U-V~R!tV(fg(5WDj@<5;C9T*2#c+dJ;A zu9;rt@bwP~s;;cXBM(q_OhU&;zsdeApsJXqyVpxKm}%a9CfzbZTd*Ee|^JYXY+*Zq!|s^e}5aNA36`SvK=Esf<}gV?YnLeH(Ya+)L>ImXSdKPP4yM zsKvO{XBu~0%;#bL0L(kGH18z`c>e(qg$g}vpDdxlQOSAfI@2+NwTZ{u-~9Ns{aHll z_GXouO}}+f&r4~F0|iNadv}&QqKt#_BZUY1nz{tixneo4u|SI16o+0s&Hky()l}3U z{Q3_dZK358WIf~OAHWYJ7&#nw`EmV1R8nv0HuN_82ImFKUp&V1A&7V1um4|+dlw?X zZX4PqG1yzsynqr)1%nxMyhuk4*fLDhs*?392bCDBp2lo{lozH{e8kO^z)EExvUg2B zn!!fb!)%lH@%tPOMJu$)mIFah@dX-`(FR^K{|XWco!_>RGvl*%qr%oRxy`t~C1;n9 zC&H&D*B5UP5~-9tv9G7hi^C>ayJzH#RCDX__ZKYUI}cuOBm;aBiSPL~3yIwPUEpQ> zZHSyIT8fr}Z)Ng)@70-C+c^ua1`9%Z$>Oc>#;f2K!|_RZ(?94rQL0J9`1)C=bd=#uRu0 zZJZLLSlY+9Z3nfI{uimw?~lN%KF5tO-d7~&_tpRg_?{nstdhc2#_P^L!}XzWB-Cuz z*;t_}wkImK3$qS-21_SG%GP!<_frsi)J?bFCRwVpHMy+x`0}UO@i076Z2ehTbPj{B&|%}QKAz4S^v!Bd2V=Xrmb zG4q9DQD~R`_awXl-e?$WgXg1e-d&(~&h~tHEEt+x#5rz$KQ(|@H#1N+pm!yut=oD8 zx0RqMQt`l;cs_xwwQrh0e)|2Ko7bN5mXHcnE{En#icuZ_m&hCaw0eVPotHP&9Wkym zCzP)w8n?*I8Q+~lT@UEs-I;%8{%6Met;VkH!9F6ZXsAu1E@bhc`-A_Cmj5jMFR2Xu AK>z>% literal 0 HcmV?d00001 From 2befa5461fef193cf52d53899d6d4e742a15b9ce Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 15 Jun 2020 11:59:19 -0700 Subject: [PATCH 251/299] Small adjustments to Books page typesetting --- content/static/books.html | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/content/static/books.html b/content/static/books.html index 80b69c929..0092977ae 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -37,7 +37,6 @@

    Books. Processing books cove » Order Print/EBook from O'Reilly
    » Order from Amazon.com
    -
    This casual book is a concise introduction to Processing and interactive computer graphics. Written by the founders of Processing, it takes you through the learning process one step at a time to help you grasp core programming concepts. You'll learn how to sketch with code -- creating a program with a few lines of code, observing the result, and then adding to it. It was written to help readers:
    • Quickly learn programming basics, from variables to objects
    • @@ -88,7 +87,6 @@

      Books. Processing books cove Published August 2015, Morgan Kaufmann. 564 pages. Paperback.
      » Order from Amazon.com
      -
      The second edition of Learning Processing has been updated for compatibility with Processing 3 and includes several new chapters of content including video, sound, data visualization, and networking. For more, visit the Learning Processing website.

      Dan Shiffman says, "This book tells a story. It's a story of liberation, of taking the first steps towards understanding the foundations of computing, writing your own code, and creating your own media without the bonds of existing software tools. This story is not reserved for computer scientists and engineers. This story is for you." @@ -170,7 +168,7 @@

      Books. Processing books cove Ben Fry.
      Published December 2007, O'Reilly. 384 pages. Paperback.
      » Order from Amazon.com -

      +
      The O'Reilly website says, "How you can take advantage of data that you might otherwise never use? With the help of a powerful new programming environment [Processing], this book helps you represent data accurately on the Web and elsewhere, complete with user interaction, animation, and more. You'll learn basic visualization principles, how to choose the right kind of display for your purposes, and how to provide interactive features to design entire interfaces around large, complex data sets."

      Martin Wattenberg from the IBM Watson Research Center says, "This wonderfully detailed guide, by one of the masters of modern data graphics, tells you everything you need to know to code your own visualizations from scratch. Perhaps most valuable are the many examples where Fry demonstrates how to refine a bare-bones concept into a beautiful, effective finished piece. Read this book, and you'll never again be dependent on someone else's view of your data."
      @@ -190,7 +188,7 @@

      Books. Processing books cove August 2012, Princeton Architectural Press. 472 pages.
      Originally published in German November 2009, Schmidt Hermann Verlag. 500 pages.
      » Order from Amazon.com -

      +
      This book is extraordinary; the design is clear and the production quality is fantastic. This is the design book about Processing that we've hoped for. Unlike most other Processing books, it doesn't discuss programming basics so it's free to start with exciting examples. The publisher promotes, "Generative design is a revolutionary new method of creating artwork, models, and animations from sets of rules, or algorithms. By using accessible programming languages such as Processing, artists and designers are producing extravagant, crystalline structures that can form the basis of anything from patterned textiles and typography to lighting, scientific diagrams, sculptures, films, and even fantastical buildings. Opening with a gallery of thirty-five illustrated case studies, Generative Design takes users through specific, practical instructions on how to create their own visual experiments by combining simple-to-use programming codes with basic design principles. A detailed handbook of advanced strategies provides visual artists with all the tools to achieve proficiency. Both a how-to manual and a showcase for recent work in this exciting new field, Generative Design is the definitive study and reference book that designers have been waiting for."

      More information about buying this book in German, as well as the complete source code for the examples, are at the book's website.
      @@ -210,7 +208,7 @@

      Books. Processing books cove Derek Runberg.
      2015, No Starch Press. 232 pages. Paperback.
      » Order from Amazon.com -

      +
      The publisher writes, "The SparkFun Guide to Processing teaches you to craft your own digital artwork and even combine it with hardware—no prior programming experience required. Over the course of the book, you’ll learn the basics by drawing simple shapes, move on to photo editing and video manipulation, and ultimately affect the physical world by using Processing with an Arduino."

      The publisher lists: @@ -266,7 +264,7 @@

      Books. Processing books cove Published April 2013, friends of ED. 472 pages. Paperback.
      » Order Print from Apress
      » Order from Amazon.com -

      +
      The authors write, "If you’ve been curious about coding, but the thought of it also makes you nervous, this book is for you; if you consider yourself a creative person, maybe worried programming is too non-creative, this book is also for you; if you want to learn about the latest Processing 2.0 language release and also start making beautiful code art, this book is also definitely for you. Based on research funded by the National Science Foundation, this book brings together some of the most engaging and successful approaches from the digital arts and computer science classrooms:
      • Learn the latest features of Processing 2.0
      • Gain a solid understanding of coding concepts, such as design, analysis, and object-oriented programming
      • @@ -289,7 +287,7 @@

        Books. Processing books cove Andrew S. Glassner.
        Published August 2010, A K Peters. Paperback.
        » Order from Amazon.com -

        +
        The book description reads, "Learn how to create gorgeous and expressive imagery with the Processing programming language and environment... Walk with veteran author Andrew Glassner on a journey of shared discovery as he takes actual Processing projects from inspiration to reality. You'll closely follow every step he takes and see exactly how each project evolves, including big and small mistakes he's made along the way (and how to fix them!), and the times when he changed direction. Once you see the results, you'll understand why programming is such a powerful skill for self-expression."

        This book has a different perspective from the others because of Glassner's deep experience in computer graphics. His bio reads, "Dr. Andrew Glassner is a writer-director, and a consultant in story structure, interactive fiction, and computer graphics. He started working in 3D computer graphics in 1978, and has carried out research at the NYIT Computer Graphics Lab, Case Western Reserve University, the IBM TJ Watson Research Lab, the Delft University of Technology, Bell Communications Research, Xerox PARC, and Microsoft Research... He is also a well-known writer, and has published numerous technical papers and books on topics ranging from 3D modeling, rendering, and animation to digital sound synthesis. His book '3D Computer Graphics: A Handbook for Artists and Designers' has taught a generation of artists through two editions and three languages. Glassner created and edited the 'Graphics Gems' series and created and wrote several chapters in the book 'An Introduction to Ray Tracing'. He wrote the two-volume text 'Principles of Digital Image Synthesis'." @@ -344,7 +342,7 @@

        Books. Processing books cove Joshua Noble.
        Published January 2012, O'Reilly. 728 pages. Paperback.
        » Order from Amazon.com -

        +
        The O'Reilly website says, "Make cool stuff. If you're a designer or artist without a lot of programming experience, this book will teach you to work with 2D and 3D graphics, sound, physical interaction, and electronic circuitry to create all sorts of interesting and compelling experiences -- online and off. Programming Interactivity explains programming and electrical engineering basics, and introduces three freely available tools created specifically for artists and designers: Processing, Arduino, and OpenFrameworks." @@ -365,7 +363,7 @@

        Books. Processing books cove Matt Pearson.
        Published March 2011, Manning Publications. 300 pages. Paperback.
        » Order from Amazon.com -

        +
        Matt provides a list of bullet points:
        • The complete guide to creating generative graphics for print, video and the web.
        • @@ -394,7 +392,7 @@

          Books. Processing books cove Kostas Terzidis.
          Published May 2009, Wiley. 384 Pages. Hardcover.
          » Order from Amazon.com -

          +
          The Wiley website says, "this book offers a series of generic procedures that can function as building blocks and encourages you to then use those building blocks to experiment, explore, and channel your thoughts, ideas, and principles into potential solutions. The book covers such topics as structured shapes, solid geometry, networking and databases, physical computing, image processing, graphic user interfaces, and more." @@ -463,7 +461,7 @@

          Books. Processing books cove Daniel Sauter.
          Published February 2013, The Pragmatic Programmers. ~300 pages. Paper and eBook.
          » Order from The Pragmatic Bookshelf
          -

          +
          The publisher writes, "Create mobile apps for Android phones and tablets faster and more easily than you ever imagined. Whether you’re a student, teacher, hobbyist, or experienced developer, Rapid Android Development puts the fast-growing market for Android phone and tablet applications within your reach. Without needing to master the complexities of Java, Eclipse, or the Android SDK, you’ll find yourself writing dazzling graphics displays and location-aware programs in no time. With more than 30 ready-to-run demos, applications, and games, you’ll find yourself diving deeper than you thought possible into the treasure trove of software and hardware packed into today’s Android devices." @@ -480,7 +478,7 @@

          Books. Processing books cove Jan Vantomme.
          Published September 2012, PACKT. 350 pages. Paperback and eBook.
          » Order from PACKT
          -

          +
          The publisher lists:
          • Explore the Processing language with a broad range of practical recipes for computational art and graphics
          • From de63238262575e926e9d09fb563681753a531be8 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 7 Jul 2020 12:50:20 -0700 Subject: [PATCH 252/299] Minor HTML corrections --- content/static/overview.html | 6 +----- content/static/support.html | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/content/static/overview.html b/content/static/overview.html index aa6831a91..d5d3d30ff 100644 --- a/content/static/overview.html +++ b/content/static/overview.html @@ -7,16 +7,12 @@

            Overview. A short introducti

            For the past sixteen years, Processing has promoted software literacy, particularly within the visual arts, and visual literacy within technology. Initially created to serve as a software sketchbook and to teach programming fundamentals within a visual context, Processing has also evolved into a development tool for professionals. The Processing software is free and open source, and runs on the Mac, Windows, and GNU/Linux platforms. +

            Processing continues to be an alternative to proprietary software tools with restrictive and expensive licenses, making it accessible to schools and individual students. Its open source status encourages the community participation and collaboration that is vital to Processing’s growth. Contributors share programs, contribute code, and build libraries, tools, and modes to extend the possibilities of the software. The Processing community has written more than a hundred libraries to facilitate computer vision, data visualization, music composition, networking, 3D file exporting, and programming electronics.

            - -

            Education

            diff --git a/content/static/support.html b/content/static/support.html index 91cb0754f..7de71d1d5 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -26,7 +26,7 @@

            Education Institution

          • Fellowships
          • Community Advocacy and Events
          -

          +

          If membership isn't your thing, but you want to help, we love donations! From 7c27e106cfc52b1dc63d6b2e44c6d0c48c2e8b7a Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 7 Jul 2020 12:52:18 -0700 Subject: [PATCH 253/299] Update books.html --- content/static/books.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/static/books.html b/content/static/books.html index 0092977ae..3b4a22d0e 100755 --- a/content/static/books.html +++ b/content/static/books.html @@ -563,7 +563,7 @@

          Books. Processing books cove Published December 2019. 270 pages. PDF, Web.
          Text in Portuguese.
          » Download
          - » Read online + » Read online

          Este livro é um guia de programação com enfoque prático considerando o contexto da arte gerativa e do pensamento computacional. Ele conta com explicações e exemplos visuais cuidadosamente projetados para serem de valor tanto para programadores quanto artistas. As aplicações e estudos de caso foram direcionados para a linguagem Processing cuja própria filosofia segue o princípio da exploração do artístico através do código. From 9dd9f6193039a5a4bc04edb26b402c70992e7d41 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 1 Sep 2020 19:03:27 -0400 Subject: [PATCH 254/299] Add Squelized library. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index c2426e881..50c300eab 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 262 +# Next ID: 263 # Increment after assigning ID to new contribution [Library : 3D] @@ -79,6 +79,7 @@ 230 \ https://github.com/cansik/artnet4j/releases/download/latest/artnet4j.txt 241 \ http://agathelenclen.fr/downloads/Squarify.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt +262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.zip [Library : Fabrication] # 078 \ http://s373.net/code/marchingcubes/download/marchingcubes.txt From 3a62e8484c813c209eb28c5782fa3d1398b0d24f Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Tue, 8 Sep 2020 09:02:25 -0400 Subject: [PATCH 255/299] Change extension for SQuelized contribution to TXT! Oops --- contrib_generate/sources.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 50c300eab..193b96c88 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -79,7 +79,7 @@ 230 \ https://github.com/cansik/artnet4j/releases/download/latest/artnet4j.txt 241 \ http://agathelenclen.fr/downloads/Squarify.txt 248 \ https://github.com/runwayml/processing-library/releases/download/latest/RunwayML.txt -262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.zip +262 \ https://github.com/SamuelAl/SQuelized-for-Processing/releases/latest/download/SQuelized.txt [Library : Fabrication] # 078 \ http://s373.net/code/marchingcubes/download/marchingcubes.txt From 5fb39318d2e57ad868a8faaf0c97bca42c10967f Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 24 Sep 2020 19:09:18 -0400 Subject: [PATCH 256/299] remove Thumbs.db files (Windows caches) --- exhibition/works/discom/Thumbs.db | Bin 17408 -> 0 bytes exhibition/works/superhero/img/Thumbs.db | Bin 42496 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 exhibition/works/discom/Thumbs.db delete mode 100755 exhibition/works/superhero/img/Thumbs.db diff --git a/exhibition/works/discom/Thumbs.db b/exhibition/works/discom/Thumbs.db deleted file mode 100644 index 93ae137dfc1f9bf4dad8a8bfd51ce394cf8ab32e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 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 Vf868$)cfD%eXIW8^#8sZ_#eETcWD3s diff --git a/exhibition/works/superhero/img/Thumbs.db b/exhibition/works/superhero/img/Thumbs.db deleted file mode 100755 index 9f2257887f6e0ad56dc7c12e00761f43fa0c79b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42496 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 Date: Thu, 24 Sep 2020 19:09:36 -0400 Subject: [PATCH 257/299] add "var" for Java 11 (https://github.com/processing/processing4/issues/114) --- generate/keywords_base.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/generate/keywords_base.txt b/generate/keywords_base.txt index a88aa2737..7757bb46f 100755 --- a/generate/keywords_base.txt +++ b/generate/keywords_base.txt @@ -252,6 +252,7 @@ double KEYWORD5 double float KEYWORD5 float int KEYWORD5 int long KEYWORD5 long +var KEYWORD5 # Flow structures From 447ab9cb4140bace81748357a453d0456e6f798c Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 9 Oct 2020 10:19:03 -0700 Subject: [PATCH 258/299] Update download.html Download for P4a2 --- content/static/download.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/content/static/download.html b/content/static/download.html index a684aaf5b..03f73d291 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -264,6 +264,16 @@

          Stable Releases

          Pre-Releases

            + +
          • + 4.0 alpha 2 + (15 September 2020) + Win 64 + Linux 64 + Mac OS X +
          • + + Please become a member today to help us continue to provide access to quality, free, open-source software. + ...

            -

            - If membership isn't your thing, but you want to help, we love donations! -

            - -

            - -

            -

            - -

            - -

            -

            - -

            - -

            -

            - -

            - -

            -

            -

            From 9e9777957ae5c5ef78468942b064f354582f1fa6 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 9 Oct 2020 11:01:15 -0700 Subject: [PATCH 262/299] Update support.html Improvements to the new Support page text --- content/static/support.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index b1ace80b0..670034980 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,12 +1,12 @@ -

            Processing is free, open-source software created by volunteers and through the support of the Processing Foundation. Your donation supports our worldwide community. We need your help!

            +

            Processing is free, open-source software created by volunteers and through the support of the non-profit Processing Foundation. Your donation supports our worldwide community.

            - ... + We believe software and the tools to create software should be accessible to everyone. The Processing Software has always been free and open-source and supported by its community. We're currently working on Processing 4 and we need your help! Donations of any amount help us to reach our goal of sharing and creating excellent software. We can't do this without your support.

            Your donation supports: @@ -27,8 +19,6 @@

            Education Institution

          -
          -

          The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus".

          diff --git a/css/style.css b/css/style.css index c392ef25a..65fd77ba4 100755 --- a/css/style.css +++ b/css/style.css @@ -1321,7 +1321,7 @@ div.examples-nav img { position: relative; top: 11px; } .donate-card h4 { line-height: 1.3; - margin: 0 0 0.5em 0; + margin: 0 0 0 0; color: #2c7bb5; } From 26d78a65ba3401bc138131efe399c064d60e928b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:39:26 -0700 Subject: [PATCH 264/299] Update support.html Embed the Donorbox on the page --- content/static/support.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index 9e2ef35e3..14b44d9be 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,6 +1,12 @@ -

          Processing is free, open-source software created by volunteers and through the support of the non-profit Processing Foundation. Your donation supports our worldwide community.

          + -

          +

          + We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. +

          + + + + -

          +

          The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". -

          +

          From a34aaa238bf21ee17a7d95c279039f69c4b4bff6 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:44:05 -0700 Subject: [PATCH 265/299] Update support.html --- content/static/support.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index 14b44d9be..b41d23d11 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,8 +1,8 @@ -

          +

          We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. -

          +

          @@ -24,7 +24,8 @@

          Donate

        • Community Advocacy and Events

        --> +

        -

        +

        The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". -

        +

        From ffb9f4f2cc9129333f9927e9815e3fcd3e272054 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Tue, 13 Oct 2020 20:51:09 -0700 Subject: [PATCH 266/299] Update support.html --- content/static/support.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index b41d23d11..f54c48531 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -4,7 +4,9 @@

        We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        - +
        + +
        -

        - The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus". + The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus."

        From 1bc42a220dffeb14b029b992e0d684c579159868 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Wed, 14 Oct 2020 11:08:51 -0700 Subject: [PATCH 267/299] Update support.html --- content/static/support.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index f54c48531..57fbbf8c3 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,7 +1,7 @@

        - We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events. + We need your help! You can support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        @@ -28,5 +28,5 @@

        Donate

        -->

        - The Processing Foundation was founded in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus." + The Processing Foundation was established in 2012 after more than a decade of work with the Processing software. The Foundation’s mission is to promote software literacy within the visual arts, and visual literacy within technology-related fields — and to make these fields accessible to diverse communities. Our goal is to empower people of all interests and backgrounds to learn how to program and make creative work with code, especially those who might not otherwise have access to these tools and resources. You can read more about the history of Processing in the short essay "A Modern Prometheus."

        From 22b02c6eaad232274de7a0fdd7b1a2dc4c6254f1 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 30 Nov 2020 09:18:09 -0500 Subject: [PATCH 268/299] Add Processing2JS tool to contributions. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 193b96c88..dcab8fff5 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 263 +# Next ID: 264 # Increment after assigning ID to new contribution [Library : 3D] @@ -332,6 +332,7 @@ 233 \ https://github.com/jaewhyun/GettingStarted/releases/download/latest/GettingStarted.txt 234 \ https://github.com/jaewhyun/ReferenceTool/releases/download/latest/ReferenceTool.txt 242 \ https://jwilder4690.github.io/tools/ArtStation/ArtStation.txt +263 \ http://jonathan.dahlberg.media/processing2js/Processing2JSTool.txt [Mode : ] 070 \ http://bezier.de/processing/modes/CoffeeScriptMode.txt From 4dfdd3543f123c18464f8b9128e47f6f547172c9 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 11:38:13 -0800 Subject: [PATCH 269/299] Update support.html Changes for 2020 fundraiser --- content/static/support.html | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/content/static/support.html b/content/static/support.html index 57fbbf8c3..bddd83072 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,12 +1,30 @@ -

        + + +

        + SupportP5 is a month-long online fundraising campaign to support and help sustain our software projects, our Fellowship program, Processing Community Day, and our other education initiatives. This campaign ends at midnight on December 31st Pacific Standard Time. +

        + +

        + Visit our SupportP5 page to learn more about the donation rewards.

        +

        + If you would like to give without receiving a reward, please use the Custom Amount form field. These donations are 100% tax-deductible in the US to the extent provided by law. +

        + +
        + +
        + + +
        diff --git a/templates/template.html b/templates/template.html index 334c27412..f97acc24c 100755 --- a/templates/template.html +++ b/templates/template.html @@ -44,13 +44,12 @@ - + From 392ccc4e8b5ca1085db2a7e39fb7474f8b4522a5 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 13:21:19 -0800 Subject: [PATCH 271/299] Update style.css --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 65fd77ba4..a36d9542d 100755 --- a/css/style.css +++ b/css/style.css @@ -249,7 +249,7 @@ a.large-link:before { #header { width: 900px; height: 106px; - margin-bottom: 30px; /* was 30px, but changed to 0 when ribbon placed below header */ + margin-bottom: 0px; /* was 30px, but changed to 0 when ribbon placed below header */ overflow: hidden; background: #0c2033 url(../img/processing-web.png) center center no-repeat; background-position: bottom; From 797aee844714ff3ad894065916ff2f2ce5901e03 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Mon, 7 Dec 2020 13:25:18 -0800 Subject: [PATCH 272/299] More fundraiser 2020 updates/corrections --- java_generate/templates/generic.template.html | 6 +++--- java_generate/templates/index.template.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index be8235926..77ee55efe 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -44,12 +44,12 @@

        - + From da459f462e5b20ae7030fa4ec861f2130952db1c Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Wed, 16 Dec 2020 10:49:19 -0500 Subject: [PATCH 273/299] Add wellen Library to sources. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index dcab8fff5..1fd6d3a20 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 264 +# Next ID: 265 # Increment after assigning ID to new contribution [Library : 3D] @@ -225,6 +225,7 @@ 219 \ https://teddavis.org/xyscope/download/XYscope.txt 254 \ http://www.kramann.info/ComposingForEveryone.txt 260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt +264 \ https://github.com/dennisppaul/wellen/releases/latest/download/wellen.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From ac7f2a500433402540d53ec3f3d45e1304f1e71e Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 28 Dec 2020 13:08:19 -0500 Subject: [PATCH 274/299] Add Coding Art book examples. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index 1fd6d3a20..28887005e 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 265 +# Next ID: 266 # Increment after assigning ID to new contribution [Library : 3D] @@ -305,6 +305,7 @@ 165 \ https://processing.org/handbook/handbook_2e.txt 166 \ https://processing.org/books/gswp_2e.txt 205 \ http://mad4j.github.io/book-mdpc/book-mdpc.txt +265 \ https://codingart-book.github.io/examples/CodingArtBookExamples.txt [Examples : ] 194 \ http://damellis.github.io/wovns-processing-examples/WOVNS.txt From b997006733b64104938b918bce04ea12e3a999fc Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:26:30 -0800 Subject: [PATCH 275/299] Update support for end of 2020 fundraiser --- content/static/support.html | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/content/static/support.html b/content/static/support.html index bddd83072..2a8f77f05 100644 --- a/content/static/support.html +++ b/content/static/support.html @@ -1,30 +1,28 @@ - -

        - SupportP5 is a month-long online fundraising campaign to support and help sustain our software projects, our Fellowship program, Processing Community Day, and our other education initiatives. This campaign ends at midnight on December 31st Pacific Standard Time. + We need your help! Please support Processing by making a donation to the Processing Foundation. Your donation contributes to software development, education resources like code examples and tutorials, Fellowships, and community events.

        -

        + + + -

        + -
        + - -
        + From be144f54b8b12d36dd1b8e4950d61cad2e5a547e Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:32:06 -0800 Subject: [PATCH 277/299] CSS adjust for ribbon removal --- css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index a36d9542d..65fd77ba4 100755 --- a/css/style.css +++ b/css/style.css @@ -249,7 +249,7 @@ a.large-link:before { #header { width: 900px; height: 106px; - margin-bottom: 0px; /* was 30px, but changed to 0 when ribbon placed below header */ + margin-bottom: 30px; /* was 30px, but changed to 0 when ribbon placed below header */ overflow: hidden; background: #0c2033 url(../img/processing-web.png) center center no-repeat; background-position: bottom; From 2ee5001399bb9674d2bd38e6db553b8d32d2ec02 Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:35:03 -0800 Subject: [PATCH 278/299] Reference donate ribbon remove --- java_generate/templates/generic.template.html | 4 ++-- java_generate/templates/index.template.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java_generate/templates/generic.template.html b/java_generate/templates/generic.template.html index 77ee55efe..d8858a537 100644 --- a/java_generate/templates/generic.template.html +++ b/java_generate/templates/generic.template.html @@ -44,12 +44,12 @@

        -
        + -
        + From b8f6f412087f288549f9264214c9d59fb4382f8b Mon Sep 17 00:00:00 2001 From: Casey Reas Date: Fri, 1 Jan 2021 00:37:33 -0800 Subject: [PATCH 279/299] Update nav.web.template.html --- java_generate/templates/nav.web.template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_generate/templates/nav.web.template.html b/java_generate/templates/nav.web.template.html index 3a6d60507..43f41939c 100644 --- a/java_generate/templates/nav.web.template.html +++ b/java_generate/templates/nav.web.template.html @@ -13,7 +13,7 @@ Tutorials
        Examples
        - Books
        + Books

        Overview
        From b7c4a5a5723b6a5e99b9255fbc1a8e00c5cb9b82 Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sun, 17 Jan 2021 22:05:21 -0500 Subject: [PATCH 280/299] add 4.0a3 to the download page --- content/static/download.html | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/content/static/download.html b/content/static/download.html index ceaeea186..7b62c601e 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -263,14 +263,22 @@

        Stable Releases

        Pre-Releases

        The changes document covers incremental updates between 4.x releases, and is especially important to read for pre-releases.

        From 95deef51a6a12a9c1e928c2b608a84cac85e0fc9 Mon Sep 17 00:00:00 2001 From: Elie Zananiri Date: Mon, 21 Jun 2021 17:04:40 -0400 Subject: [PATCH 292/299] Add Pd4P3 contribution. --- contrib_generate/sources.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib_generate/sources.conf b/contrib_generate/sources.conf index aa5dd33b0..24dc54600 100644 --- a/contrib_generate/sources.conf +++ b/contrib_generate/sources.conf @@ -1,4 +1,4 @@ -# Next ID: 271 +# Next ID: 272 # Increment after assigning ID to new contribution [Library : 3D] @@ -231,6 +231,7 @@ 254 \ http://www.kramann.info/ComposingForEveryone.txt 260 \ https://github.com/sphaero/procmod/releases/latest/download/procmod.txt 264 \ https://github.com/dennisppaul/wellen/releases/latest/download/wellen.txt +271 \ https://www.robertesler.com/software/Pd4P3.txt [Library : Utilities] 001 \ https://github.com/remixlab/proscene/releases/download/latest/proscene.txt From f454a245eb0a3f59eae519257eb6ff7caaf0b30f Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Thu, 24 Jun 2021 17:52:32 -0400 Subject: [PATCH 293/299] updating the download page for 4.0a5 --- content/static/download.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/static/download.html b/content/static/download.html index d9b76b6ba..bd6d04d31 100644 --- a/content/static/download.html +++ b/content/static/download.html @@ -265,6 +265,14 @@

        Pre-Releases

        @@ -42,6 +42,13 @@

        Download Processing. Process

        Stable Releases

        +
      • + 4.0b1 + (9 August 2021) + Windows 64 + Linux 64 + macOS +
      • 3.5.4 (17 January 2020) @@ -273,6 +280,7 @@

        Pre-Releases

        Mac OS X
      • + + Processing Documentation ========== From 76be09a0f538ddad43cf758ba987b47a75d03ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20de=20Courville?= Date: Mon, 9 Jan 2023 14:12:50 +0100 Subject: [PATCH 299/299] Update README.md strikethrough readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b0e0bb8da..60a674da3 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ Processing Documentation ========== -This is the official source code for the Processing reference, examples, tutorials, and [processing.org](http://processing.org) web site. +~~This is the official source code for the Processing reference, examples, tutorials, and [processing.org](http://processing.org) web site.~~ -If you have found an error in the Processing reference, examples, tutorials, or website you can file it here under the ["issues" tab](https://github.com/processing/processing-docs/issues). +~~If you have found an error in the Processing reference, examples, tutorials, or website you can file it here under the ["issues" tab](https://github.com/processing/processing-docs/issues).~~ -The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.) +~~The [processing](https://github.com/processing/processing) repository contains the source code for Processing itself. (Please use that link to file issues regarding the Processing software.)~~