package org.teachingextensions.logo.utils.InterfaceUtils;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.util.ArrayList;
import javax.swing.JPanel;
import org.teachingextensions.logo.utils.LineAndShapeUtils.ImageBackground;
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
@SuppressWarnings("serial")
public class CanvasPanel extends JPanel
{
private final ArrayList<Paintable> painters = new ArrayList<Paintable>();
private static Graphics2D configureGraphics2D(Graphics g)
{
Graphics2D g2d = (Graphics2D) g.create();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
return g2d;
}
@Override
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = configureGraphics2D(g);
for (Paintable p : this.getPainters())
{
p.paint(g2d, this);
}
}
public CanvasPanel remove(Paintable painter)
{
if (this.painters.contains(painter))
{
this.painters.remove(painter);
}
return this;
}
public CanvasPanel add(Paintable painter)
{
if (!this.painters.contains(painter))
{
this.painters.add(painter);
}
this.repaint();
return this;
}
public CanvasPanel clear()
{
this.painters.clear();
return this;
}
public ArrayList<Paintable> getPainters()
{
return new ArrayList<>(this.painters);
}
public void setBackground(ImageBackground imageBackground)
{
if (this.painters.contains(imageBackground))
{
this.painters.remove(imageBackground);
}
return;
}
}