a port of the Processing Visualization Language

ImageButton

Loading images and using them to create a button.

Original Processing.org Example: ImageButton

// All Examples Written by Casey Reas and Ben Fry

// unless otherwise stated.

/* @pjs preload="data/base.gif, data/roll.gif, data/down.gif"; */

ImageButtons button;



void setup()

{

  size(200, 200);

  background(102, 102, 102);

  

  // Define and create image button

  PImage b = loadImage("data/base.gif");

  PImage r = loadImage("data/roll.gif");

  PImage d = loadImage("data/down.gif");

  int x = width/2 - b.width/2;

  int y = height/2 - b.height/2; 

  int w = b.width;

  int h = b.height;

  button = new ImageButtons(x, y, w, h, b, r, d);

}



void draw()

{

  button.update();

  button.display();

}



class Button

{

  int x, y;

  int w, h;

  color basecolor, highlightcolor;

  color currentcolor;

  boolean over = false;

  boolean pressed = false;   

  

  void pressed() {

    if(over && mousePressed) {

      pressed = true;

    } else {

      pressed = false;

    }    

  }

  

  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;

  }

}

}



class ImageButtons extends Button 

{

  PImage base;

  PImage roll;

  PImage down;

  PImage currentimage;



  ImageButtons(int ix, int iy, int iw, int ih, PImage ibase, PImage iroll, PImage idown) 

  {

    x = ix;

    y = iy;

    w = iw;

    h = ih;

    base = ibase;

    roll = iroll;

    down = idown;

    currentimage = base;

  }

  

  void update() 

  {

    over();

    pressed();

    if(pressed) {

      currentimage = down;

    } else if (over){

      currentimage = roll;

    } else {

      currentimage = base;

    }

  }

  

  void over() 

  {

    if( overRect(x, y, w, h) ) {

      over = true;

    } else {

      over = false;

    }

  }

  

  void display() 

  {

    image(currentimage, x, y);

  }

}
Fork me on GitHub