package rabbitescape.ui.swing; import static rabbitescape.ui.swing.SwingConfigSetup.*; import java.awt.Dimension; import java.awt.event.ComponentEvent; import java.awt.event.WindowEvent; import javax.swing.JFrame; import rabbitescape.engine.config.Config; import rabbitescape.engine.config.ConfigTools; import rabbitescape.render.androidlike.Sound; public class MainJFrame extends JFrame { private static final long serialVersionUID = 1L; private class Listener extends EmptyListener { private final MainJFrame frame; public Listener( MainJFrame frame ) { this.frame = frame; } @Override public void windowClosing( WindowEvent e ) { exit(); } @Override public void componentMoved( ComponentEvent e ) { ConfigTools.setInt( uiConfig, CFG_GAME_WINDOW_LEFT, frame.getX() ); ConfigTools.setInt( uiConfig, CFG_GAME_WINDOW_TOP, frame.getY() ); uiConfig.save(); } @Override public void componentResized( ComponentEvent e ) { if ( !frame.isActive() ) { // awt.EDT fires off a couple of events before the frame is active // the second changes the frame's size slightly. protect against this. return; } ConfigTools.setInt( uiConfig, CFG_GAME_WINDOW_WIDTH, frame.getWidth() ); ConfigTools.setInt( uiConfig, CFG_GAME_WINDOW_HEIGHT, frame.getHeight() ); uiConfig.save(); updateScreenIfPaused(); } @Override public void componentShown( ComponentEvent arg0 ) { updateScreenIfPaused(); } @Override public void windowActivated( WindowEvent arg0 ) { updateScreenIfPaused(); } private void updateScreenIfPaused() { if ( null != swingGraphics ) { if ( swingGraphics.world.paused ) { new Thread() { @Override public void run() { swingGraphics.redraw(); } }.start(); } } } } private final Config uiConfig; private final Sound sound; private SwingGraphics swingGraphics = null; public MainJFrame( Config uiConfig, Sound sound ) { this.uiConfig = uiConfig; this.sound = sound; Listener listener = new Listener( this ); addWindowListener( listener ); addComponentListener( listener ); setBoundsFromConfig(); setIcon(); } public void setGraphics( SwingGraphics swingGraphics ) { this.swingGraphics = swingGraphics; } private void setIcon() { SwingBitmapLoader l = new SwingBitmapLoader(); int s = l.sizeFor( 128 ); SwingBitmap bmp = l.load( "ic_launcher", s ); this.setIconImage(bmp.image); } public void setBoundsFromConfig() { int x = ConfigTools.getInt( uiConfig, CFG_GAME_WINDOW_LEFT ); int y = ConfigTools.getInt( uiConfig, CFG_GAME_WINDOW_TOP ); int width = ConfigTools.getInt( uiConfig, CFG_GAME_WINDOW_WIDTH ); int height = ConfigTools.getInt( uiConfig, CFG_GAME_WINDOW_HEIGHT ); if ( x != Integer.MIN_VALUE && y != Integer.MIN_VALUE ) { setLocation( x, y ); } if ( width != Integer.MIN_VALUE && y != Integer.MIN_VALUE ) { setPreferredSize( new Dimension( width, height ) ); } } public void exit() { sound.dispose(); dispose(); System.exit( 0 ); } }