/************************************************
 * File ~caviness/Class/CISC367/exer-solutions/TrafficLightThread/soln2/TrafficLight.java
 *
 ************************************************/

import java.awt.*;

/************************************************/
public class TrafficLight extends Canvas
{

  // Instance variables

  Color currColor = Color.green;
   int TLWidth;		// width of traffic light
   int TLHeight;	// height of traffic light
   int xOrigin; 	// Coordinates of upper left-hand corner
   int yOrigin;		// of traffic light

  /************************************************/
  public TrafficLight( Color c )
  {
     currColor = c;			// Initial color of traffic light
  }
  /************************************************/
  public void setColor( Color c )
  {
     currColor = c;
     repaint();
  }
  /************************************************/
  public void paint(Graphics g)
  {
   System.out.println("Painting traffic light again"); // To see when
						       // paint() is called
   if ( TLWidth == 0 )
   {
      Dimension d = size();		// Get size of canvas
      TLWidth = d.width/4;		// Set width of traffic light
      TLHeight = 3*d.height/4;		// Set height of traffic light
      xOrigin = (d.width - TLWidth)/2;  // Center traffic light on canvas
      yOrigin = d.height/8;
   }

   Color colorSave = g.getColor();	// Save color of curr graphics context

   //Draw outline of traffic light
   g.setColor( getBackground() );
   g.draw3DRect(xOrigin,yOrigin,TLWidth,TLHeight,true);


   Color Red, Yellow, Green;		// Colors to change lights to
   // Change the light
   if ( currColor == Color.red )
   {
      Red = turnOn( Color.red );
      Yellow = turnOff( Color.yellow );
      Green = turnOff( Color.green ); 
   }
   else if ( currColor == Color.yellow )
   {
      Red = turnOff( Color.red );
      Yellow = turnOn( Color.yellow );
      Green = turnOff( Color.green );
   }
   else //if ( currColor == Color.green )
   {
      Red = turnOff( Color.red );
      Yellow = turnOff( Color.yellow );
      Green = turnOn( Color.green );
   }

   // Red light
   g.setColor( Red );
   g.fillOval(xOrigin+TLWidth/4,yOrigin+TLHeight/8,TLHeight/6,
                TLHeight/6);
   g.setColor(Color.black);
   g.drawOval(xOrigin+TLWidth/4,yOrigin+TLHeight/8,TLHeight/6,
                TLHeight/6);
   // Yellow light
   g.setColor( Yellow );
   g.fillOval(xOrigin+TLWidth/4,yOrigin+5*TLHeight/12,TLHeight/6,
                TLHeight/6);
   g.setColor(Color.black);
   g.drawOval(xOrigin+TLWidth/4,yOrigin+5*TLHeight/12,TLHeight/6,
                TLHeight/6);
   // Green light
   g.setColor( Green );
   g.fillOval(xOrigin+TLWidth/4,yOrigin+17*TLHeight/24,TLHeight/6,
                TLHeight/6);
   g.setColor(Color.black);
   g.drawOval(xOrigin+TLWidth/4,yOrigin+17*TLHeight/24,TLHeight/6,
                TLHeight/6);

   g.setColor(colorSave);		// Restore original color
  }

 /************************************************/
  Color turnOn( Color c )
  { return c.brighter(); }

  Color turnOff( Color c )
  { return c.darker(); }

 /************************************************/
 public Dimension minimumSize()
 {System.out.println("minimumSize() called");
  return new Dimension(100,100);
 } 
 /************************************************/
 public Dimension preferredSize()
 {System.out.println("preferredSize() called");
  return new Dimension(300,300);
 }
}
