import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import shader.TriangleTools;
import shader.Vector2D;
@SuppressWarnings("serial")
public class TestTriangel extends JPanel implements MouseListener {
public final static int A = 0;
public final static int B = 1;
public final static int C = 2;
private Vector2D[] point = new Vector2D[3];
private int clickCnt = 0;
private final GraphicsConfiguration gfxConf = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration(); // used to create image for drawing
private BufferedImage imageBuffer = null; // used to draw graphics
public TestTriangel(int width, int height) {
super.setPreferredSize(new Dimension(width, height));
addMouseListener(this);
}
private void drawTriangle(Graphics g) {
if (point[A] != null && point[B] != null && point[C] != null) {
TriangleTools.triangleColorFill(imageBuffer, point[A], point[B], point[C], .1f, Color.RED);
Point[] p = { point[A].toPoint(), point[B].toPoint(), point[C].toPoint() };
g.setColor(Color.WHITE);
g.drawLine(p[A].x, p[A].y, p[B].x, p[B].y);
g.drawLine(p[B].x, p[B].y, p[C].x, p[C].y);
g.drawLine(p[C].x, p[C].y, p[A].x, p[A].y);
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
updateGraphics();
g.drawImage(imageBuffer, 0, 0, this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
if (clickCnt > 2) {
clickCnt = 0;
resetTriangle();
repaint();
}
Point p = e.getPoint();
point[clickCnt] = new Vector2D(p.x, p.y);
clickCnt++;
if (clickCnt == 3)
repaint();
}
private void resetTriangle() {
for (int i = 0; i < point.length; i++)
point[i] = null;
}
private void updateGraphics() {
if (imageBuffer == null || imageBuffer.getWidth() != getWidth() || imageBuffer.getHeight() != getHeight()) {
imageBuffer = gfxConf.createCompatibleImage(getWidth(), getHeight());
}
Graphics g = imageBuffer.createGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
drawTriangle(g);
g.dispose();
}
}