1 /* 2 * Copyright (c) 2009-2010 jMonkeyEngine 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 package jme3test.awt; 34 35 import com.jme3.app.Application; 36 import com.jme3.app.SimpleApplication; 37 import com.jme3.system.AppSettings; 38 import com.jme3.system.JmeCanvasContext; 39 import com.jme3.system.JmeSystem; 40 import java.applet.Applet; 41 import java.awt.Canvas; 42 import java.awt.Graphics; 43 import java.util.concurrent.Callable; 44 import javax.swing.SwingUtilities; 45 46 public class TestApplet extends Applet { 47 48 private static JmeCanvasContext context; 49 private static Application app; 50 private static Canvas canvas; 51 private static TestApplet applet; 52 53 public TestApplet(){ 54 } 55 56 public static void createCanvas(String appClass){ 57 AppSettings settings = new AppSettings(true); 58 settings.setWidth(640); 59 settings.setHeight(480); 60 // settings.setRenderer(AppSettings.JOGL); 61 62 JmeSystem.setLowPermissions(true); 63 64 try{ 65 Class<? extends Application> clazz = (Class<? extends Application>) Class.forName(appClass); 66 app = clazz.newInstance(); 67 }catch (ClassNotFoundException ex){ 68 ex.printStackTrace(); 69 }catch (InstantiationException ex){ 70 ex.printStackTrace(); 71 }catch (IllegalAccessException ex){ 72 ex.printStackTrace(); 73 } 74 75 app.setSettings(settings); 76 app.createCanvas(); 77 78 context = (JmeCanvasContext) app.getContext(); 79 canvas = context.getCanvas(); 80 canvas.setSize(settings.getWidth(), settings.getHeight()); 81 } 82 83 public static void startApp(){ 84 applet.add(canvas); 85 app.startCanvas(); 86 87 app.enqueue(new Callable<Void>(){ 88 public Void call(){ 89 if (app instanceof SimpleApplication){ 90 SimpleApplication simpleApp = (SimpleApplication) app; 91 simpleApp.getFlyByCamera().setDragToRotate(true); 92 simpleApp.getInputManager().setCursorVisible(true); 93 } 94 return null; 95 } 96 }); 97 } 98 99 public void freezeApp(){ 100 remove(canvas); 101 } 102 103 public void unfreezeApp(){ 104 add(canvas); 105 } 106 107 @Override 108 public final void update(Graphics g) { 109 // canvas.setSize(getWidth(), getHeight()); 110 } 111 112 @Override 113 public void init(){ 114 applet = this; 115 createCanvas("jme3test.model.shape.TestBox"); 116 startApp(); 117 app.setPauseOnLostFocus(false); 118 System.out.println("applet:init"); 119 } 120 121 @Override 122 public void start(){ 123 // context.setAutoFlushFrames(true); 124 System.out.println("applet:start"); 125 } 126 127 @Override 128 public void stop(){ 129 // context.setAutoFlushFrames(false); 130 System.out.println("applet:stop"); 131 } 132 133 @Override 134 public void destroy(){ 135 SwingUtilities.invokeLater(new Runnable(){ 136 public void run(){ 137 removeAll(); 138 System.out.println("applet:destroyStart"); 139 } 140 }); 141 app.stop(true); 142 System.out.println("applet:destroyEnd"); 143 } 144 145 } 146