// ===========================================================
// Аплет, демонстрирующий использование различных
// функций рисования
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// ===========================================================

import java.applet.*;
import java.awt.*;

public class Painter extends Applet
{
  // ---------------------------------------------------------
  // Painter
  // Конструктор не используется
  // ---------------------------------------------------------
	public Painter()
	{
	}

  // ---------------------------------------------------------
  // getAppletInfo
  // Метод, возвращающей строку информации об аплете
  // ---------------------------------------------------------
	public String getAppletInfo()
	{
		return "Name: Painter\r\n" +
      "Author: Alexandr Frolov\r\n" +
      "E-mail: frolov@glas.apc.org" +
      "WWW:    http://www.glasnet.ru/~frolov" +
      "Created with Microsoft Visual J++ Version 1.0";
	}

  // ---------------------------------------------------------
  // init
  // Вызывается во время инициализации аплета
  // ---------------------------------------------------------
	public void init()
	{
	  // Для того чтобы размеры окна аплета можно было
    // задавать в документе HTML, закрываем следующую
    // строку символом комментария

    // resize(320, 240);
	}

  // ---------------------------------------------------------
  // destroy
  // Метод destroy не используется
  // ---------------------------------------------------------
  public void destroy()
	{
	}

  // ---------------------------------------------------------
  // paint
  // Метод paint, выполняющий рисование в окне аплета
  // ---------------------------------------------------------
  public void paint(Graphics g)
	{
    // Определяем текущие размеры окна аплета
    Dimension dimAppWndDimension = size();

    // Эта строка будет удалена из окна аплета
    // методом clearRect
   	g.drawString("Невидимая строка", 10, 20);
 
    // Стираем содержимое окна аплета. Цвет окна
    // становится таким же, как и цвет фона
    // окна навигатора
    g.clearRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);
    
    // Выбираем в контекст отображения желтый цвет
    g.setColor(Color.yellow);
    
    // Закрашиваем внутреннюю область окна аплета
    g.fillRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Выбираем в контекст отображения черный цвет
    g.setColor(Color.black);

    // Рисуем рамку вокруг окна аплета
    g.drawRect(0, 0, 
      dimAppWndDimension.width  - 1, 
      dimAppWndDimension.height - 1);

    // Пишем строку в верхнем левом углу окна аплета
		g.drawString("Привет из аплета!", 10, 20);

    // Рисуем в цикле пять горизонтальных линий
    for(int i = 0; i < 5; i++)
    {
      g.drawLine(10, 30 + (i * 10), 200, 30 + (i * 10));
    }

    // Копируем область окна, занятую 
    // нарисованными линиями
    g.copyArea(10, 30, 200, 50, 220, 0);

    // Выбираем в контекст отображения белый цвет
    g.setColor(Color.white);

    // Закрашиваем белвым цветом нижнюю часть окна
    g.fillRect(1, 80, 
      dimAppWndDimension.width  - 2, 
      dimAppWndDimension.height - 81);
    
    // Выбираем в контекст отображения черный цвет
    g.setColor(Color.black);

    // Рисуем два трехмерных прямоугольника
    g.draw3DRect(10,  100, 100, 20, true);
    g.draw3DRect(120, 100, 100, 20, false);
  
    // Выбираем в контекст отображения красный цвет
    g.setColor(Color.red);
    
    // Рисуем рамку, в которую будет вписан сегмент
    g.drawRect(10, 140, 200, 100);
    g.drawLine(10, 190, 210, 190);
    g.drawLine(110, 140, 110, 240);

    // Выбираем в контекст отображения черный цвет
    g.setColor(Color.black);

    // Рисуем сегмент
    g.drawArc(10, 140, 200, 100, -25, 320);

    // Создаем многоугольник
    Polygon p = new Polygon();
  
    // Добавляем в многоугольник несколько вершин
    p.addPoint(270, 239);
    p.addPoint(350, 230);
    p.addPoint(360, 180);
    p.addPoint(390, 160);
    p.addPoint(340, 130);
    p.addPoint(270, 239);

    // Рисуем многоугольник
    g.drawPolygon(p);

    // Рисуем прямоугольник с закругленными углами
    g.drawRoundRect(10, 250, 200, 100, 60, 40);

    // Выбираем в контекст отображения красный цвет
    g.setColor(Color.red);

    // Задаем область ограничения вывода
    g.clipRect(260, 250, 200, 100);
 
    // Рисуем круг, пересекающий область ограничения
    g.fillOval(300, 200, 170, 170);
  }

  // ---------------------------------------------------------
  // start
  // Метод start не используется
  // ---------------------------------------------------------
	public void start()
	{
	}
	
  // ---------------------------------------------------------
  // stop
  // Метод stop не используется
  // ---------------------------------------------------------
	public void stop()
	{
	}
}
