Dokumentation

This commit is contained in:
ngb
2022-06-19 22:25:25 +02:00
parent 6bc618a2df
commit dc6b7ee351

View File

@@ -13,17 +13,25 @@ import java.util.LinkedList;
/** /**
* Eine Leinwand ist die Hauptkomponente einer Zeichenmaschine. Sie besteht aus * Eine Leinwand ist die Hauptkomponente einer Zeichenmaschine. Sie besteht aus
* mehreren Ebenen, auf denen auf verschiedene Arten gezeichnet werden kann. Die * mehreren Ebenen, auf denen auf verschiedene Arten gezeichnet werden kann. Die
* Ebenen lassen sich beliebig übereinander aNORTHen, ausblenden oder wieder * Ebenen lassen sich beliebig übereinander legen, ausblenden oder wieder
* löschen. * löschen.
* <p> * <p>
* Jede Ebene besitzt eine Zeichenfläche, auf der ihre Zeichnung liegt. Diese * Jede Ebene besitzt eine Zeichenfläche, auf der ihre Zeichnung liegt. Diese
* zeichenflächen werden pro Frame einmal von "DOWN" nach "UP" auf diese * Zeichenflächen werden pro Frame einmal von "unten" nach "oben" auf diese
* Leinwand gezeichnet. * Leinwand gezeichnet.
*/ */
public class Zeichenleinwand extends Canvas { public class Zeichenleinwand extends Canvas {
/**
* Liste der hinzugefügten Ebenen.
*/
private LinkedList<Layer> layers; private LinkedList<Layer> layers;
/**
* Erstellt eine neue Zeichenleinwand mit einer festen Größe.
* @param width Breite der Zeichenleinwand.
* @param height Höhe der Zeichenleinwand.
*/
public Zeichenleinwand( int width, int height ) { public Zeichenleinwand( int width, int height ) {
super.setSize(width, height); super.setSize(width, height);
this.setPreferredSize(this.getSize()); this.setPreferredSize(this.getSize());
@@ -41,7 +49,9 @@ public class Zeichenleinwand extends Canvas {
/** /**
* Ändert die Größe der Zeichenleinwand auf die angegebene Größe in Pixeln. * Ändert die Größe der Zeichenleinwand auf die angegebene Größe in Pixeln.
* Eine Größenänderung hat auch eine Größenänderung aller Ebenen zur Folge. * <p>
* Bei einer Größenänderung wird auch die Größe aller bisher hinzugefügter
* {@link Layer Ebenen} angepasst, sodass sie die gesamte Leinwand füllen.
* *
* @param width Neue Width der Leinwand in Pixeln. * @param width Neue Width der Leinwand in Pixeln.
* @param height Neue Höhe der Leinwand in Pixeln. * @param height Neue Höhe der Leinwand in Pixeln.
@@ -158,10 +168,16 @@ public class Zeichenleinwand extends Canvas {
return result; return result;
} }
/**
* Erstellt eine passende {@link BufferStrategy} für diese Ebene.
*/
public void allocateBuffer() { public void allocateBuffer() {
this.createBufferStrategy(2); this.createBufferStrategy(2);
} }
/**
* Löscht alle Ebenen der Zeichenebene und gibt deren Ressourcen frei.
*/
public void dispose() { public void dispose() {
synchronized( layers ) { synchronized( layers ) {
for( Layer layer : layers ) { for( Layer layer : layers ) {
@@ -175,6 +191,10 @@ public class Zeichenleinwand extends Canvas {
render(); render();
} }
/**
* Zeichnet den Inhalt aller {@link Layer Ebenen} in den Grafik-Kontext.
* @param graphics
*/
public void draw( Graphics graphics ) { public void draw( Graphics graphics ) {
Graphics2D g2d = (Graphics2D) graphics.create(); Graphics2D g2d = (Graphics2D) graphics.create();
synchronized( layers ) { synchronized( layers ) {
@@ -185,6 +205,9 @@ public class Zeichenleinwand extends Canvas {
g2d.dispose(); g2d.dispose();
} }
/**
* Zeigt den aktuellen Inhalt der Zeichenleinwand an.
*/
public void render() { public void render() {
if( getBufferStrategy() == null ) { if( getBufferStrategy() == null ) {
allocateBuffer(); allocateBuffer();