> show canvas only <


/* built with Studio Sketchpad: 
 *   https://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   https://studio.sketchpad.cc/sp/pad/view/ro.qHekrawcA4r/rev.13
 * 
 * authors: 
 *   GoToLoop

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   https://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



/**
 * Rectangle Toggle (v2.35)
 * by  szaboa1 (2013/Apr)
 * mod GoToLoop
 *
 * http://forum.processing.org/topic/problem-with-my-rectangle-class
 *
 * http://forum.processing.org/topic/draggable-balls-to-any-cell
 *
 * http://forum.processing.org/topic
 * /how-to-change-the-colour-of-an-objec-in-an-2d-arrayt-permanently
 *
 * http://studio.processingtogether.com/sp/pad/export/ro.9ABG0RKl9D2Bx/latest
 */

final static byte GRID = 8, MARGIN = 25;
final static byte DIM = 60, GAP = 15, LEN = DIM + GAP;
final static Square[][] boxes = new Square[GRID][GRID];

final static String GFX = JAVA2D; // Use JAVA2D or P2D

void setup() {
  size(GRID*LEN + MARGIN*2 - GAP, GRID*LEN + MARGIN*2 - GAP, GFX);
  noLoop();
  background(0100);

  for (int row=0; row!=GRID; ++row)  for (int col=0; col!=GRID; ++col)
    boxes[row][col] = new Square(col*LEN + MARGIN, row*LEN + MARGIN, DIM, DIM);
}

void draw() {
  for (int row=0; row!=GRID; ++row)  for (int col=0; col!=GRID; ++col)
    boxes[row][col].display();
}

void mousePressed() {
  for (int row=0; row!=GRID; ++row)  for (int col=0; col!=GRID; ++col)
    if ( boxes[row][col].click() ) {
      println( col + "," + row + " : " + boxes[row][col].toggle() );
      redraw();
      return;
    }
}

final class Square {
  final short x, y, w, h;
  boolean state;

  final static color COLOR_ON = #90D0F0, COLOR_OFF = #407090;

  Square(int xx, int yy, int ww, int hh) {
    x = (short) xx;
    y = (short) yy;
    w = (short) ww;
    h = (short) hh;
  }

  boolean toggle() {
    return state = !state;
  }

  boolean click() {
    return mouseX > x & mouseX < x+w & mouseY > y & mouseY < y+h;
  }

  void display() {
    fill(state? COLOR_ON:COLOR_OFF);
    rect(x, y, w, h);
  }
}