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);
}
}