package vooga.rts.gui;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
/**
*
* @author Jonathan Schmidt
*
*/
public class Window {
private Canvas myCanvas;
private JFrame myFrame;
public static Dimension SCREEN_SIZE = new Dimension();
private boolean myFullscreen = false;
private GraphicsDevice myGraphics;
private DisplayMode myPrevDispMode;
public static final int D_X = 1366;
public static final int D_Y = 768;
public Window () {
myFrame = new JFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setUndecorated(true);
myFrame.setIgnoreRepaint(true);
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run () {
// TODO Auto-generated method stub
myFrame.setVisible(true);
myFrame.createBufferStrategy(2);
myCanvas = new Canvas(myFrame.getBufferStrategy());
myFrame.add(myCanvas);
}
});
}
catch (InvocationTargetException e) {
}
catch (InterruptedException e) {
}
}
public void setFullscreen (boolean fullscreen) {
myGraphics = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if (!myGraphics.isFullScreenSupported()) {
return;
}
DisplayMode displayMode = myGraphics.getDisplayMode();
myPrevDispMode = myGraphics.getDisplayMode();
if (myFullscreen == fullscreen) {
return;
}
myFullscreen = fullscreen;
if (myFullscreen) {
myFrame.setVisible(false);
myFrame.dispose();
myFrame.setUndecorated(true);
try {
myGraphics.setFullScreenWindow(myFrame);
}
finally {
myGraphics.setDisplayMode(displayMode);
myFrame.setResizable(false);
myFrame.setAlwaysOnTop(false);
myFrame.setVisible(true);
//myFrame.setIgnoreRepaint(true);
}
}
else {
myFrame.setVisible(false);
myFrame.dispose();
myFrame.setUndecorated(false);
try {
if (myGraphics.isFullScreenSupported()) {
myGraphics.setFullScreenWindow(null);
}
else {
System.out.println("Fail");
}
}
finally {
myFrame.setLocationRelativeTo(null);
myGraphics.setDisplayMode(myPrevDispMode);
myFrame.setMinimumSize(new Dimension(SCREEN_SIZE));
myFrame.setResizable(true);
myFrame.setVisible(true);
//myFrame.setIgnoreRepaint(false);
}
}
SCREEN_SIZE =
new Dimension(myGraphics.getDisplayMode().getWidth(), myGraphics.getDisplayMode()
.getHeight());
myFrame.repaint();
}
public Canvas getCanvas () {
return myCanvas;
}
public JFrame getJFrame () {
return myFrame;
}
public boolean hasFocus () {
return myFrame.hasFocus();
}
}