/*
Datei............: Aufg1422.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 28.11.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 14.22
Kommentare.......:

Dieses Programm zeigt die Implementierung der Methode drawColoredRect,
die ein Rechteck mit einem horizontalen Farbverlauf zeichnet. Der 
Dokumentationskommentar erklärt, wie es gemacht wird.
*/
import java.awt.*;
import java.awt.event.*;

public class Aufg1422
extends Frame
{
  public static void main(String[] args)
  {
	Aufg1422 wnd = new Aufg1422();
	wnd.setSize(300,200);
	wnd.setVisible(true);
  }

  public Aufg1422()
  {
	super("Aufg1422");
	addWindowListener(
      new WindowAdapter() {
	    public void windowClosing(WindowEvent event) {
		  System.exit(0);
		}
	  }
	);
	setBackground(Color.lightGray);
  }

  public void paint(Graphics g)
  {
	drawColoredRect(g, 10, 50, 150, 40, Color.blue, Color.red);
	drawColoredRect(g, 200, 70, 50, 80, Color.black, Color.white);
	drawColoredRect(g, 110, 120, 70, 20, Color.green, Color.cyan);
  }

  /**
   * Die Methode ermittelt für jeden der drei Farbanteile die 
   * Differenz aus Endfarbe und Anfangsfarbe und teilt diesen
   * Wert durch die Anzahl der horizontalen Schritte. Die so 
   * ermittelte Schrittweite steht in den Variablen dred, dgreen
   * und dblue und wird verwendet, um bei jeder Iteration den
   * aktuellen Farbwert schrittweise vom Anfangs- zum gewünschten
   * Endwert zu verändern. Bei jeden Schritt wird eine vertikale
   * Linie in der aktuellen Farbe ausgegeben, wodurch der Eindruck
   * eines von links nach rechts verlaufenden Farbverlaufs entsteht.
   */
  public void drawColoredRect(
    Graphics g, 
	int x, int y, int width, int height,
	Color col1, Color col2
  )
  {
	double dred   = (col2.getRed()   - col1.getRed()) / (double) width;
	double dgreen = (col2.getGreen() - col1.getGreen()) / (double) width;
	double dblue  = (col2.getBlue()  - col1.getBlue()) / (double) width;
	double red    = col1.getRed();
	double green  = col1.getGreen();
	double blue   = col1.getBlue();
	for (int i = 0; i < width; ++i) {
	  //Farbe setzen
	  g.setColor(new Color((int)red, (int)green, (int)blue));
	  //Senkrechte Linie zeichnen
	  g.drawLine(x + i, y, x + i, y + height);
	  red   += dred;
	  green += dgreen;
	  blue  += dblue;
	}
  }
}


