6: Windowing Toolkit (WTK)
This tutorial shows the use of WTK inside eEngine.

WebStart eEngine Tutorial 7 - WTK
Currently does not work as WebStart
package de.esw.eengine.test.t7_wtk;
 import java.awt.Color;
 import java.awt.DisplayMode;
 import java.awt.Insets;
 import java.awt.Toolkit;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.io.File;
 import java.util.logging.Level;
 import de.esw.eengine.EEngineException;
 import de.esw.eengine.core.Core;
 import de.esw.eengine.core.IRenderDevice;
 import de.esw.eengine.core.Timer;
 import de.esw.eengine.core.Core.RenderPipeline;
 import de.esw.eengine.device.input.AbstractKeyboardListener;
 import de.esw.eengine.device.input.SystemInputDevice;
 import de.esw.eengine.device.render.WindowRenderDevice;
 import de.esw.eengine.renderable.Layer;
 import de.esw.eengine.renderable.Text;
 import de.esw.eengine.renderable.wtk.Button;
 import de.esw.eengine.renderable.wtk.Desktop;
 import de.esw.eengine.renderable.wtk.Input;
 import de.esw.eengine.renderable.wtk.Label;
 import de.esw.eengine.renderable.wtk.Window;
 import de.esw.eengine.resource.Font;
 import de.esw.eengine.resource.Image;
 import de.esw.eengine.resource.ResourceManager;
 import de.esw.eengine.resource.codec.FontCodec;
 import de.esw.eengine.resource.codec.GifCodec;
 import de.esw.eengine.resource.codec.JpegCodec;
 import de.esw.eengine.resource.codec.PngCodec;
 /**
  * Tutorial 7 shows the use of the WTK
  *
  * @author markusw
  * @version $Id: Main.java 183 2005-07-09 13:37:26Z markusw $
  * @since 1.0
  */
 public final class Main {
     /** Comment for renderDevice */
     IRenderDevice renderDevice = null;
     /** Comment for introScreen */
     private Layer background = null;
     /** Comment for fpsText */
     private Text fpsText;
     /**
      * @return True on successfull init, false otherwise
      */
     private boolean init() {
         Core.getInstance().initialize(RenderPipeline.OPENGL);
         Core.getInstance().getResourceManager().registerCodec(new JpegCodec());
         Core.getInstance().getResourceManager().registerCodec(new GifCodec());
         Core.getInstance().getResourceManager().registerCodec(new PngCodec());
         Core.getInstance().getResourceManager().registerCodec(new FontCodec());
         try {
             this.renderDevice = Core.getInstance().createRenderDevice(
                     WindowRenderDevice.class);
             // this.renderDevice = Core.getInstance().createRenderDevice(
             // FullscreenRenderDevice.class);
             this.renderDevice.open(new DisplayMode(800, 600, 16,
                     DisplayMode.REFRESH_RATE_UNKNOWN));
             // Add system input device
             new SystemInputDevice(this.renderDevice);
             // Setup background layer
             ResourceManager rm = Core.getInstance().getResourceManager();
             this.background = new Layer("Background", rm
                     .loadResource("data/eengine.jpg"));
             // Not hardware accelerated in Java 5
             // this.background.setAlpha(0.95f);
             // Add FPS Text renderable
             this.fpsText = new Text("FPSText", "FPS: 0", 10, 580);
             this.background.addRenderable(this.fpsText);
         } catch (EEngineException e) {
             Core.getLogger().log(Level.WARNING, e.getMessage(), e);
             return false;
         }
         return true;
     }
     /**
      * @return Desktop
      * @throws EEngineException
      */
     private Desktop createDesktop() throws EEngineException {
         // Create desktop
         Desktop desktop = new Desktop();
         ResourceManager rm = Core.getInstance().getResourceManager();
         Font font = (Font) rm.getResource(rm
                 .loadResource("data/tahoma12x16.fnt"));
         int windowBackground = rm.loadResource("data/simple-window.gif");
         int buttonBackground = rm.loadResource("data/simple-button.gif");
         int pressedButtonBackground = rm
                 .loadResource("data/simple-inverted-button.gif");
         // Create window
         Window window = new Window(300, 25, 300, 200);
         window.setImage(windowBackground);
         window.setBorder(new Insets(10, 1, 1, 1));
         // Create beep button
         Button button = new Button(50, 50, 200, 30);
         button.setText("Beep");
         button.setImage(buttonBackground);
         button.setPressedImage(pressedButtonBackground);
         button.setBorder(new Insets(1, 1, 1, 1));
         button.setFont(font);
         button.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
                 Toolkit.getDefaultToolkit().beep();
             }
         });
         window.addChild(button);
         // Create Input
         Input input = new Input(50, 90, 200, 30);
         input.setImage(buttonBackground);
         input.setBorder(new Insets(1, 1, 1, 1));
         input.setFont(font);
         window.addChild(input);
         // Create screenshot button
         button = new Button(50, 130, 200, 30);
         button.setText("Save Screenshot");
         button.setImage(Core.getInstance().getResourceManager().loadResource(
                 "data/simple-button.gif"));
         button.setBorder(new Insets(1, 1, 1, 1));
         button.setFont(font);
         button.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
                 Main.this.saveScreenshot();
             }
         });
         window.addChild(button);
         desktop.add(window);
         window = new Window(100, 300, 250, 100);
         window.setImage(windowBackground);
         window.setBorder(new Insets(10, 1, 1, 1));
         // Create Label
         Label label = new Label("Click here to quit", 10, 15, 200, 30);
         label.setFont(font);
         window.addChild(label);
         // Quit button
         button = new Button(50, 60, 150, 30);
         button.setText("Quit");
         button.setImage(Core.getInstance().getResourceManager().loadResource(
                 "data/simple-button.gif"));
         button.setBorder(new Insets(1, 1, 1, 1));
         button.setFont(font);
         button.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent e) {
                 Core.getInstance().getRenderDevice().close();
             }
         });
         window.addChild(button);
         desktop.add(window);
         desktop.addKeyboardListener(new AbstractKeyboardListener() {
             @Override
             public void keyTyped(KeyEvent e) {
                 Core.getLogger().info("Typed key: " + e.getKeyChar());
             }
         });
         return desktop;
     }
     /**
      * Tutorials main *
      *
      * @throws EEngineException
      *             Thrown on some engine error
      */
     private void run() throws EEngineException {
         final Timer fpsTimer = new Timer();
         float numFrames = 0;
         Desktop desktop = this.createDesktop();
         while (this.renderDevice.isOpen()) {
             // Process WTK
             desktop.update(0.0f);
             if (this.renderDevice.begin(true)) {
                 this.renderDevice.clear(Color.BLACK);
                 this.background.render();
                 desktop.render();
             }
             this.renderDevice.end();
             this.renderDevice.flip();
             // Calculate FPS
             numFrames++;
             if (fpsTimer.getDeltaTime(false) > 1000) {
                 this.fpsText.setText("FPS: "
                         + Math
                                 .round(numFrames / fpsTimer.getDeltaTime()
                                         * 1000));
                 numFrames = 0;
             }
         }
     }
     /**
      *
      */
     void saveScreenshot() {
         try {
             ResourceManager rm = Core.getInstance().getResourceManager();
             Image screenShot = (Image) rm.getResource(rm
                     .createResource("wtk.jpg"));
             screenShot.setImage(this.renderDevice.caputeScreen());
             screenShot.save();
             Core.getLogger().info(
                     "Written screenshot to " + System.getProperty("user.dir")
                             + File.separator + "wtk.jpg");
         } catch (Exception e) {
             Core.getLogger().log(Level.WARNING, e.getMessage(), e);
         }
     }
     /**
      *
      */
     private void shutdown() {
         this.renderDevice.close();
         Core.getInstance().shutdown();
     }
     /**
      * @param args
      */
     public static void main(String[] args) {
         try {
             Main app = new Main();
             try {
                 if (app.init()) {
                     app.run();
                 }
             } finally {
                 app.shutdown();
             }
         } catch (EEngineException e) {
             Core.getLogger().log(Level.WARNING, e.getMessage(), e);
         }
         System.exit(0);
     }
 }