Kinetic Type

This example is for Processing version 1.1+. If you have a previous version, use the examples included with your software. If you see any errors or have suggestions, »please let us know.

Typing (Excerpt from the piece Textension) by Josh Nimoy.

Click in the window to give it focus. Type to add letters and press backspace or delete to remove them.



int leftmargin = 10;
int rightmargin = 20;
String buff = "";
boolean didntTypeYet = true;

void setup()
{
  size(640, 360, P3D);
  textFont(loadFont("Univers45.vlw"), 25);
}

void draw()
{
  background(176);

  if((millis() % 500) < 250){  // Only fill cursor half the time
    noFill();
  }
  else {
    fill(255);
    stroke(0);
  }
  float rPos;
  // Store the cursor rectangle's position
  rPos = textWidth(buff) + leftmargin;
  rect(rPos+1, 19, 10, 21);

  // Some instructions at first
  if(didntTypeYet) {
    fill(0);
    //text("Use the keyboard.", 22, 40);
  }

  fill(0);
  pushMatrix();
  translate(rPos,10+25);
  char k;
  for(int i = 0;i < buff.length(); i++) {
    k = buff.charAt(i);
    translate(-textWidth(k),0);
    rotateY(-textWidth(k)/70.0); 
    rotateX(textWidth(k)/70.0);
    scale(1.1);
    text(k,0,0);
  }
  popMatrix();
}

void keyPressed()
{
  char k;
  k = (char)key;
  switch(k){
  case 8:
    if(buff.length()>0){
      buff = buff.substring(1);
    }
    break;
  case 13:  // Avoid special keys
  case 10:
  case 65535:
  case 127:
  case 27:
    break;
  default:
    if(textWidth(buff+k)+leftmargin < width-rightmargin){
      didntTypeYet = false;
      buff=k+buff;
    }
    break;
  }
}