> show canvas only <


/* 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);
}