/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.nN1CPG2bR2a/rev.2
*
* authors:
* Analog Pixel ( http://www.analogpixel.org )
*
*
*
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
PVector lp;
ArrayList brushStrokes;
int pointer = 0;
void setup() {
lp = new PVector(-1, -1);
brushStrokes = new ArrayList();
strokeWeight(7);
size(800, 800);
}
void draw() {
background(255);
for (int i=0; i < pointer-1; i++) {
PVector p1 = (PVector) brushStrokes.get(i);
PVector p2 = (PVector) brushStrokes.get(i+1);
line(p1.x, p1.y, p2.x, p2.y);
}
}
void keyReleased() {
// clear out any parts we don't need.
for (int i=brushStrokes.size()-1; i > pointer; i--) {
brushStrokes.remove(i);
}
}
void mouseReleased() {
lp.x = -1;
lp.y = -1;
}
void mouseDragged() {
if ( lp.x == -1) {
lp.x = mouseX;
lp.y = mouseY;
}
if ( keyPressed ) {
// if you are dragging left undo
if (mouseX > lp.x) {
pointer++;
if (pointer > brushStrokes.size())
{
pointer--;
}
}
// if you are dragging right redo
else {
pointer--;
if ( pointer < 0) {
pointer = 0;
}
}
}
else {
if (pointer >= brushStrokes.size()) {
brushStrokes.add( new PVector(mouseX, mouseY));
}
else {
brushStrokes.set(pointer, new PVector(mouseX, mouseY) );
}
pointer++;
}
lp = new PVector(mouseX, mouseY);
}