package automenta.vivisect.face;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.util.Date;
import javax.swing.JPanel;
/**
*
* @author me
*/
public abstract class BaseClass extends JPanel implements Runnable, KeyListener, MouseMotionListener, MouseListener
{
BufferedImage db;
Graphics buffer;
Thread t;
int mousex;
int mousey;
int mouselx;
int mousely;
int key;
int width;
int height;
public boolean mouseMove;
public boolean mouseDown;
public boolean mouseDrag;
public boolean mouseUp;
public boolean keyDown;
public boolean mouseIsDown;
boolean resizing;
boolean debugging;
boolean mouseLeft;
boolean mouseMiddle;
boolean mouseRight;
Date mouseTime;
MouseEvent mouseEvent;
Rectangle r;
Color bgcolor;
Color fgcolor;
int loX;
int loY;
int hiX;
int hiY;
private static final long serialVersionUID = 1L;
private BufferedImage db2;
Kernel kernel = new Kernel(3, 3,
new float[] {
1f/9f, 1f/9f, 1f/9f,
1f/9f, 1f/9f, 1f/9f,
1f/9f, 1f/9f, 1f/9f});
BufferedImageOp op = new ConvolveOp(kernel);
public BaseClass()
{
super();
db = null;
buffer = null;
mouseMove = false;
mouseDown = false;
mouseDrag = false;
mouseUp = false;
keyDown = false;
mouseIsDown = false;
resizing = true;
debugging = false;
mouseTime = null;
mouseEvent = null;
r = new Rectangle(0, 0, 0, 0);
bgcolor = Color.white;
fgcolor = Color.black;
}
public void damage(int i, int j, int k, int l)
{
loX = Math.min(loX, i);
loY = Math.min(loY, j);
hiX = Math.max(hiX, k);
hiY = Math.max(hiY, l);
}
public void drawArrow(Graphics g, int i, int j, int k, int l, int i1)
{
int j1 = k - i;
int k1 = l - j;
int l1 = (int)Math.sqrt((double)(j1 * j1 + k1 * k1) + 0.5D);
if(l1 > 0)
{
int i2 = (-k1 * i1) / l1 / 2;
int j2 = (j1 * i1) / l1 / 2;
int k2 = k - 3 * j2;
int l2 = l + 3 * i2;
int ai[] = {
i - i2, i + i2, k2 + i2, k2 + 3 * i2, k, k2 - 3 * i2, k2 - i2
};
int ai1[] = {
j - j2, j + j2, l2 + j2, l2 + 3 * j2, l, l2 - 3 * j2, l2 - j2
};
g.fillPolygon(ai, ai1, 7);
}
}
public void drawBar(Graphics g, int i, int j, int k, int l, int i1)
{
int j1 = k - i;
int k1 = l - j;
int l1 = (int)Math.sqrt((double)(j1 * j1 + k1 * k1) + 0.5D);
if(l1 > 0)
{
int i2 = (-k1 * i1) / l1 / 2;
int j2 = (j1 * i1) / l1 / 2;
if(i2 == 0 && j2 == 0)
if(j1 * j1 > k1 * k1)
j2 = 1;
else
i2 = 1;
int ai[] = {
i - i2, i + i2, k + i2, k - i2
};
int ai1[] = {
j - j2, j + j2, l + j2, l - j2
};
g.fillPolygon(ai, ai1, 4);
}
}
public void drawCircle(Graphics g, int i, int j, int k)
{
g.drawOval(i - k, j - k, 2 * k, 2 * k);
}
public void fillCircle(Graphics g, int i, int j, int k)
{
g.fillOval(i - k, j - k, 2 * k, 2 * k);
}
public boolean isDamage()
{
return hiX > loX && hiY > loY;
}
@Override
public void keyPressed(KeyEvent e) {
keyDown = true;
key = e.getKeyChar();
}
@Override
public void keyReleased(KeyEvent e) {
keyDown = false;
key = e.getKeyChar();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
mouseDrag = mouseIsDown = true;
mouselx = mousex;
mousely = mousey;
mousex = e.getX();
mousey = e.getY();
mouseTime = new Date();
mouseEvent = e;
}
@Override
public void mouseMoved(MouseEvent e) {
mouseMove = true;
mouseIsDown = false;
mouselx = mousex;
mousely = mousey;
mousex = e.getX();
mousey = e.getY();
mouseTime = new Date();
mouseEvent = e;
}
@Override
public void mousePressed(MouseEvent e) {
mouseDown = mouseIsDown = true;
mouseMiddle = e.getModifiers() == 8;
mouseRight = e.getModifiers() == 4;
mouseLeft = !mouseMiddle && !mouseRight;
mouselx = mousex;
mousely = mousey;
mousex = e.getX();
mousey = e.getY();
mouseTime = new Date();
mouseEvent = e;
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
mouseUp = true;
mouseIsDown = false;
mouselx = mousex;
mousely = mousey;
mousex = e.getX();
mousey = e.getY();
mouseTime = new Date();
mouseEvent = e;
}
public void noDamage()
{
loX = 1000;
loY = 1000;
hiX = -1;
hiY = -1;
}
@Override
public void paint(Graphics g)
{
if(db != null) {
/*if (db!=null) {
db2 = op.filter(db, db2);
}*/
g.drawImage(db, 0, 0, this);
}
}
public abstract void render(Graphics g);
public void run()
{
final long cycleDelay = 30L;
try
{
double d = 0.0D;
do
{
width = getWidth();
height = getHeight();
if ((width == 0) || (height == 0)) {
Thread.sleep(cycleDelay);
continue;
}
if(r.width != width || r.height != height)
{
db = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
buffer = db.getGraphics();
/*((Graphics2D)buffer).setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias!
RenderingHints.VALUE_ANTIALIAS_ON);*/
r = bounds();
resizing = true;
damage(0, 0, width, height);
}
if(isDamage())
{
buffer.setColor(bgcolor);
buffer.fillRect(loX, loY, hiX - loX, hiY - loY);
buffer.setColor(fgcolor);
}
render(buffer);
//mouseDown = mouseDrag = mouseUp = mouseMove = resizing = false;
repaint();
Thread.sleep(cycleDelay);
d += 0.10000000000000001D;
} while(true);
}
catch(InterruptedException _ex)
{
return;
}
}
public void sleep(int i)
{
try
{
Thread.sleep(i);
}
catch(InterruptedException _ex) { }
}
public void start()
{
if(t == null)
{
t = new Thread(this);
t.start();
}
}
public void stop()
{
if(t != null) {
t.stop();
t = null;
}
}
}