|
|
@ -66,8 +66,28 @@ public class Panel extends JPanel implements Runnable,KeyListener { |
|
|
|
public static JFrame f; |
|
|
|
public static JFrame f; |
|
|
|
|
|
|
|
|
|
|
|
int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT; |
|
|
|
int ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT; |
|
|
|
|
|
|
|
Point<Integer> vViewSize = new Point<Integer>(1,1); |
|
|
|
|
|
|
|
Point<Integer> vViewPos = new Point<Integer>(1,1); |
|
|
|
|
|
|
|
|
|
|
|
static Cursor currentCursor = new Cursor(Cursor.DEFAULT_CURSOR); |
|
|
|
static Cursor currentCursor = new Cursor(Cursor.DEFAULT_CURSOR); |
|
|
|
|
|
|
|
// Recursive function to return gcd of a and b in single line
|
|
|
|
|
|
|
|
static int gcd(int a, int b) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return b == 0 ? a : gcd(b, a % b); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void setupNonPixelCohesion(){ |
|
|
|
|
|
|
|
Dimension d = p.getSize(); |
|
|
|
|
|
|
|
int ww = JavaProjectTemplate.WINDOW_WIDTH; |
|
|
|
|
|
|
|
int wh = JavaProjectTemplate.WINDOW_HEIGHT; |
|
|
|
|
|
|
|
double wasp = (double)ww/(double)wh; |
|
|
|
|
|
|
|
p.vViewSize.x=(int)d.getWidth(); |
|
|
|
|
|
|
|
p.vViewSize.y=(int)((double)p.vViewSize.x/wasp); |
|
|
|
|
|
|
|
if (p.vViewSize.y>d.getHeight()) { |
|
|
|
|
|
|
|
p.vViewSize.y=(int)d.getHeight(); |
|
|
|
|
|
|
|
p.vViewSize.x=(int)((double)p.vViewSize.y*wasp); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static void InitializeEngine(JavaProjectTemplate instance){ |
|
|
|
public static void InitializeEngine(JavaProjectTemplate instance){ |
|
|
|
System.setProperty("sun.java2d.transaccel", "True"); |
|
|
|
System.setProperty("sun.java2d.transaccel", "True"); |
|
|
@ -87,36 +107,30 @@ public class Panel extends JPanel implements Runnable,KeyListener { |
|
|
|
f.setSize(JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT); |
|
|
|
f.setSize(JavaProjectTemplate.WINDOW_WIDTH,JavaProjectTemplate.WINDOW_HEIGHT); |
|
|
|
f.addComponentListener(new ComponentAdapter() { |
|
|
|
f.addComponentListener(new ComponentAdapter() { |
|
|
|
public void componentResized(ComponentEvent e) { |
|
|
|
public void componentResized(ComponentEvent e) { |
|
|
|
Dimension d = p.getSize(); |
|
|
|
p.ACTUAL_WINDOW_WIDTH=JavaProjectTemplate.WINDOW_WIDTH; |
|
|
|
p.pixel=new int[(int)d.getWidth()*(int)d.getHeight()]; |
|
|
|
p.ACTUAL_WINDOW_HEIGHT=JavaProjectTemplate.WINDOW_HEIGHT; |
|
|
|
p.ACTUAL_WINDOW_WIDTH=(int)d.getWidth(); |
|
|
|
int bw = p.ACTUAL_WINDOW_WIDTH; |
|
|
|
p.ACTUAL_WINDOW_HEIGHT=(int)d.getHeight(); |
|
|
|
int bh = p.ACTUAL_WINDOW_HEIGHT; |
|
|
|
p.init(false); |
|
|
|
|
|
|
|
/*{ |
|
|
|
|
|
|
|
int32_t ww = vScreenSize.x * vPixelSize.x; |
|
|
|
|
|
|
|
int32_t wh = vScreenSize.y * vPixelSize.y; |
|
|
|
|
|
|
|
float wasp = (float)ww / (float)wh; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (bPixelCohesion) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
vScreenPixelSize = (vWindowSize / vScreenSize); |
|
|
|
|
|
|
|
vViewSize = (vWindowSize / vScreenSize) * vScreenSize; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
vViewSize.x = (int32_t)vWindowSize.x; |
|
|
|
|
|
|
|
vViewSize.y = (int32_t)((float)vViewSize.x / wasp); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (vViewSize.y > vWindowSize.y) |
|
|
|
Dimension d = p.getSize(); |
|
|
|
{ |
|
|
|
int xmult = (int)d.getWidth()/bw; |
|
|
|
vViewSize.y = vWindowSize.y; |
|
|
|
if (xmult!=0) { |
|
|
|
vViewSize.x = (int32_t)((float)vViewSize.y * wasp); |
|
|
|
p.vViewSize.x=(int)(d.getWidth()/bw)*bw; |
|
|
|
|
|
|
|
p.vViewSize.y=bh*xmult; |
|
|
|
|
|
|
|
if (d.getWidth()/bw>d.getHeight()/bh){ |
|
|
|
|
|
|
|
int ymult=(int)d.getHeight()/bh; |
|
|
|
|
|
|
|
if (ymult==0) { |
|
|
|
|
|
|
|
setupNonPixelCohesion(); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
p.vViewSize.y=(int)(d.getHeight()/bh)*bh; |
|
|
|
|
|
|
|
p.vViewSize.x=bw*ymult; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
vViewPos = (vWindowSize - vViewSize) / 2; |
|
|
|
setupNonPixelCohesion(); |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
p.vViewPos.set((int)((d.getWidth()-p.vViewSize.x)/2),(int)((d.getHeight()-p.vViewSize.y)/2)); |
|
|
|
|
|
|
|
p.init(false); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
p = new Panel(f); |
|
|
|
p = new Panel(f); |
|
|
@ -254,7 +268,9 @@ public class Panel extends JPanel implements Runnable,KeyListener { |
|
|
|
mImageProducer = new MemoryImageSource(ACTUAL_WINDOW_WIDTH, ACTUAL_WINDOW_HEIGHT, cm, pixel,0, ACTUAL_WINDOW_WIDTH); |
|
|
|
mImageProducer = new MemoryImageSource(ACTUAL_WINDOW_WIDTH, ACTUAL_WINDOW_HEIGHT, cm, pixel,0, ACTUAL_WINDOW_WIDTH); |
|
|
|
mImageProducer.setAnimated(true); |
|
|
|
mImageProducer.setAnimated(true); |
|
|
|
mImageProducer.setFullBufferUpdates(true); |
|
|
|
mImageProducer.setFullBufferUpdates(true); |
|
|
|
imageBuffer = Toolkit.getDefaultToolkit().createImage(mImageProducer); |
|
|
|
if (p.ACTUAL_WINDOW_WIDTH!=0&&p.ACTUAL_WINDOW_HEIGHT!=0) { |
|
|
|
|
|
|
|
imageBuffer = Toolkit.getDefaultToolkit().createImage(mImageProducer).getScaledInstance(ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,Image.SCALE_FAST); |
|
|
|
|
|
|
|
} |
|
|
|
if(runThread && thread.isInterrupted() || !thread.isAlive()){ |
|
|
|
if(runThread && thread.isInterrupted() || !thread.isAlive()){ |
|
|
|
thread.start(); |
|
|
|
thread.start(); |
|
|
|
} |
|
|
|
} |
|
|
@ -264,7 +280,8 @@ public class Panel extends JPanel implements Runnable,KeyListener { |
|
|
|
public void paintComponent(Graphics g) { |
|
|
|
public void paintComponent(Graphics g) { |
|
|
|
// perform draws on pixels
|
|
|
|
// perform draws on pixels
|
|
|
|
long startTime = System.currentTimeMillis(); |
|
|
|
long startTime = System.currentTimeMillis(); |
|
|
|
g.drawImage(this.imageBuffer,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,this); |
|
|
|
g.fillRect(0,0,getWidth(),getHeight()); |
|
|
|
|
|
|
|
g.drawImage(imageBuffer,vViewPos.x,vViewPos.y,vViewSize.x+vViewPos.x,vViewSize.y+vViewPos.y,0,0,ACTUAL_WINDOW_WIDTH,ACTUAL_WINDOW_HEIGHT,this); |
|
|
|
scaleTime=System.currentTimeMillis()-startTime; |
|
|
|
scaleTime=System.currentTimeMillis()-startTime; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|