/*
Datei............: Aufg1414.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 26.11.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 14.14
Kommentare.......:

Dieses Programm zeigt die Implementierung der Methode drawHatchedRect,
die ein schraffiertes Rechteck zeichnet. Der Dokumentationskommentar
erklärt, wie es gemacht wird.
*/
import java.awt.*;
import java.awt.event.*;

public class Aufg1414
extends Frame
{
  public static void main(String[] args)
  {
	Aufg1414 wnd = new Aufg1414();
	wnd.setSize(300,200);
	wnd.setVisible(true);
  }

  public Aufg1414()
  {
	super("Aufg1414");
	addWindowListener(
      new WindowAdapter() {
	    public void windowClosing(WindowEvent event) {
		  System.exit(0);
		}
	  }
	);
	setBackground(Color.lightGray);
  }

  public void paint(Graphics g)
  {
	g.setColor(Color.blue);
	drawHatchedRect(g, 10, 50, 150, 40);
	g.setColor(Color.red);
	drawHatchedRect(g, 200, 70, 50, 80);
	g.setColor(Color.yellow);
	drawHatchedRect(g, 110, 120, 70, 20);
  }

  /**
   * Diese Methode zeichnet ein schraffiertes Rechteck. Die Schraffurlinien
   * verlaufen unter einem Winkel von 45 Grad im Abstand von DST Pixeln.
   * Die erste Schraffurlinie beginnt bei dem Punkt, der sich genau DST
   * Pixel unter der linken oberen Ecke befindet und endet bei dem Punkt,
   * der sich genau DST Pixel rechts von der linken oberen Ecke befindet.
   * Der nächste Schraffurlinie durchläuft die Punkte, die 2 * DST Pixel 
   * unter bzw. rechts der linken oberen Ecke liegen usw. Auf diese Weise
   * wird zunächst die linke und obere Kante und nach der jeweiligen Ecke
   * die untere und rechte Kante abgefahren, bis die letzte Schraffurlinie
   * in der rechten unteren Ecke landet.
   */
  public void drawHatchedRect(Graphics g, int x, int y, int width, int height)
  {
	final int DST = 5;

	g.drawRect(x, y, width, height);
	for (int i = DST; i < width + height; i += DST) {
	  int p1x = (i <= height) ? x : x + i - height;
	  int p1y = (i <= height) ? y + i : y + height;
	  int p2x = (i <= width) ? x + i : x + width;
	  int p2y = (i <= width) ? y : y + i - width;
	  g.drawLine(p1x, p1y, p2x, p2y);
	}
  }
}


