FAQ
 
 
Cover  \ Exhibition  \ Learning  \ Reference  \ Download  \ Discourse   
    Examples \ Tutorials \ Courses & Workshops
 
   
 
 
Examples for Processing (BETA) version 91+. If you have a previous version, use the examples included with your software. If you see any errors or have comments, please let us know.



Handles
by REAS <http://reas.com>

Click and drag the white boxes to change their position.

Created 10 February 2003

   
// Handles 
// by REAS <http://reas.com> 

Handle[] handles; 
int num; 
 
void setup() 
{ 
  size(200, 200); 
  num = height/15; 
  handles = new Handle[num]; 
  int hsize = 10; 
  for(int i=0; i<num; i++) { 
    handles[i] = new Handle(width/2, 10+i*15, 50-hsize/2, 10, handles); 
  } 
} 
 
void draw() 
{ 
  background(153); 
  
  for(int i=0; i<num; i++) { 
    handles[i].update(); 
    handles[i].display(); 
  } 
  
  fill(0); 
  rect(0, 0, width/2, height); 
} 
 
void mouseReleased() 
{ 
  for(int i=0; i<num; i++) { 
    handles[i].release(); 
  } 
} 
 
class Handle 
{ 
  int x, y; 
  int boxx, boxy; 
  int length; 
  int size; 
  boolean over; 
  boolean press; 
  boolean locked = false; 
  boolean otherslocked = false; 
  Handle[] others; 
  
  Handle(int ix, int iy, int il, int is, Handle[] o) 
  { 
    x = ix; 
    y = iy; 
    length = il; 
    size = is; 
    boxx = x+length - size/2; 
    boxy = y - size/2; 
    others = o; 
  } 
  
  void update() 
  { 
    boxx = x+length; 
    boxy = y - size/2; 
    
    for(int i=0; i<others.length; i++) { 
      if(others[i].locked == true) { 
        otherslocked = true; 
        break; 
      } else { 
        otherslocked = false; 
      }  
    } 
    
    if(otherslocked == false) { 
      over(); 
      press(); 
    } 
    
    if(press) { 
      length = lock(mouseX-width/2-size/2, 0, width/2-size-1); 
    } 
  } 
  
  void over() 
  { 
    if(overRect(boxx, boxy, size, size)) { 
      over = true; 
    } else { 
      over = false; 
    } 
  } 
  
  void press() 
  { 
    if(over && mousePressed || locked) { 
      press = true; 
      locked = true; 
    } else { 
      press = false; 
    } 
  } 
  
  void release() 
  { 
    locked = false; 
  } 
  
  void display() 
  { 
    line(x, y, x+length, y); 
    fill(255); 
    stroke(0); 
    rect(boxx, boxy, size, size); 
    if(over || press) { 
      line(boxx, boxy, boxx+size, boxy+size); 
      line(boxx, boxy+size, boxx+size, boxy); 
    } 
 
  } 
} 
 
boolean overRect(int x, int y, int width, int height) 
{ 
  if (mouseX >= x && mouseX <= x+width && 
      mouseY >= y && mouseY <= y+height) { 
    return true; 
  } else { 
    return false; 
  } 
} 
 
int lock(int val, int minv, int maxv) 
{ 
  return  min(max(val, minv), maxv); 
} 
 







   
  Processing is an open project initiated by Ben Fry and Casey Reas  
  © Info