content: /* 
   * Example code for Think Java (http://thinkapjava.com)
   *
   * Copyright(c) 2011 Allen B. Downey
   * GNU General Public License v3.0 (http://www.gnu.org/copyleft/gpl.html)
   *
   * @author Allen B. Downey
   */
  
  import java.awt.Canvas;
  import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.Rectangle;
  
  import javax.swing.JFrame;
  
  
  public class MickeySoln extends Canvas {
  
      // this is here to suppress a warning; you can read about it at
      // http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
      static final long serialVersionUID = 1;
  
      public void boxOval(Graphics g, Rectangle bb) {
          g.fillOval(bb.x, bb.y, bb.width, bb.height);
      }
  
      public void mickey(Graphics g, Rectangle bb) {
          boxOval(g, bb);
          if (bb.width < 3) {
              return;
          }
          
          int dx = bb.width/2;
          int dy = bb.height/2;
          Rectangle half = new Rectangle(bb.x, bb.y, dx, dy);
          
          half.translate(-dx/2, -dx/2);
          mickey(g, half);
          
          half.translate(dx*2, 0);
          mickey(g, half);
      }
      
      public void paint(Graphics g) {
          Rectangle bb = new Rectangle(100, 150, 200, 200);
          g.setColor(Color.gray);
          mickey(g, bb);
      }
      
      public static void main(String[] args) {
          // make the frame
          JFrame frame = new JFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          
          // add the canvas
          Canvas canvas = new MickeySoln();
          canvas.setSize(400, 400);
          canvas.setBackground(Color.white);
          frame.getContentPane().add(canvas);
          
          // show the frame
          frame.pack();
          frame.setVisible(true);
      }
  }
  