diff options
Diffstat (limited to 'src/newt/classes/com/jogamp/newt/awt/applet/JOGLNewtAppletBase.java')
-rwxr-xr-x | src/newt/classes/com/jogamp/newt/awt/applet/JOGLNewtAppletBase.java | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/src/newt/classes/com/jogamp/newt/awt/applet/JOGLNewtAppletBase.java b/src/newt/classes/com/jogamp/newt/awt/applet/JOGLNewtAppletBase.java new file mode 100755 index 000000000..97142b32b --- /dev/null +++ b/src/newt/classes/com/jogamp/newt/awt/applet/JOGLNewtAppletBase.java @@ -0,0 +1,242 @@ +package com.jogamp.newt.awt.applet; + +import java.lang.reflect.*; + +import javax.media.nativewindow.NativeWindow; +import javax.media.opengl.*; +import com.jogamp.opengl.util.*; + +import com.jogamp.newt.event.*; +import com.jogamp.newt.opengl.GLWindow; + +/** Shows how to deploy an applet using JOGL. This demo must be + referenced from a web page via an <applet> tag. */ + +public class JOGLNewtAppletBase extends WindowAdapter implements KeyListener, MouseListener, GLEventListener { + String glEventListenerClazzName; + int glSwapInterval; + boolean glDebug; + boolean glTrace; + + GLEventListener glEventListener = null; + GLWindow glWindow = null; + Animator glAnimator=null; + boolean isValid = false; + NativeWindow awtParent; + + public JOGLNewtAppletBase(String glEventListenerClazzName, + int glSwapInterval, + boolean glDebug, + boolean glTrace) { + + this.glEventListenerClazzName=glEventListenerClazzName; + this.glSwapInterval=glSwapInterval; + this.glDebug = glDebug; + this.glTrace = glTrace; + } + + public GLEventListener getGLEventListener() { return glEventListener; } + public GLWindow getGLWindow() { return glWindow; } + public Animator getGLAnimator() { return glAnimator; } + public boolean isValid() { return isValid; } + + public static boolean str2Bool(String str, boolean def) { + if(null==str) return def; + try { + return Boolean.valueOf(str).booleanValue(); + } catch (Exception ex) { ex.printStackTrace(); } + return def; + } + + public static int str2Int(String str, int def) { + if(null==str) return def; + try { + return Integer.parseInt(str); + } catch (Exception ex) { ex.printStackTrace(); } + return def; + } + + public static GLEventListener createInstance(String clazzName) { + Object instance = null; + + try { + Class<?> clazz = Class.forName(clazzName); + instance = clazz.newInstance(); + } catch (Throwable t) { + t.printStackTrace(); + throw new RuntimeException("Error while instantiating demo: "+clazzName); + } + if( null == instance ) { + throw new RuntimeException("Null GLEventListener: "+clazzName); + } + if( !(instance instanceof GLEventListener) ) { + throw new RuntimeException("Not a GLEventListener: "+clazzName); + } + return (GLEventListener) instance; + } + + public static boolean setField(Object instance, String fieldName, Object value) { + try { + Field f = instance.getClass().getField(fieldName); + if(f.getType().isInstance(value)) { + f.set(instance, value); + return true; + } else { + System.out.println(instance.getClass()+" '"+fieldName+"' field not assignable with "+value.getClass()+", it's a: "+f.getType()); + } + } catch (NoSuchFieldException nsfe) { + System.out.println(instance.getClass()+" has no '"+fieldName+"' field"); + } catch (Throwable t) { + t.printStackTrace(); + } + return false; + } + + public void init(GLWindow glWindow) { + init(Thread.currentThread().getThreadGroup(), glWindow); + } + + public void init(ThreadGroup tg, GLWindow glWindow) { + this.glWindow = glWindow; + + glEventListener = createInstance(glEventListenerClazzName); + + try { + if(!setField(glEventListener, "window", glWindow)) { + setField(glEventListener, "glWindow", glWindow); + } + + glWindow.addGLEventListener(this); + glWindow.addGLEventListener(glEventListener); + + if(glEventListener instanceof WindowListener) { + glWindow.addWindowListener((WindowListener)glEventListener); + } + glWindow.addWindowListener(this); + + if(glEventListener instanceof MouseListener) { + glWindow.addMouseListener((MouseListener)glEventListener); + } + glWindow.addMouseListener(this); + + if(glEventListener instanceof KeyListener) { + glWindow.addKeyListener((KeyListener)glEventListener); + } + glWindow.addKeyListener(this); + + glWindow.setUpdateFPSFrames(FPSCounter.DEFAULT_FRAMES_PER_INTERVAL, System.err); + + // glAnimator = new FPSAnimator(canvas, 60); + glAnimator = new Animator(tg, glWindow); + } catch (Throwable t) { + throw new RuntimeException(t); + } + isValid = true; + } + + public void start() { + if(isValid) { + glWindow.setVisible(true); + glAnimator.start(); + awtParent = glWindow.getParent(); + } + } + + public void stop() { + if(null!=glAnimator) { + glAnimator.stop(); + glWindow.setVisible(false); + } + } + + public void destroy() { + isValid = false; + if(null!=glAnimator) { + glAnimator.stop(); + glAnimator.remove(glWindow); + glAnimator=null; + } + if(null!=glWindow) { + glWindow.destroy(); + glWindow=null; + } + } + + // *********************************************************************************** + // *********************************************************************************** + // *********************************************************************************** + + public void init(GLAutoDrawable drawable) { + GL _gl = drawable.getGL(); + + if(glDebug) { + try { + _gl = _gl.getContext().setGL( GLPipelineFactory.create("javax.media.opengl.Debug", null, _gl, null) ); + } catch (Exception e) {e.printStackTrace();} + } + + if(glTrace) { + try { + // Trace .. + _gl = _gl.getContext().setGL( GLPipelineFactory.create("javax.media.opengl.Trace", null, _gl, new Object[] { System.err } ) ); + } catch (Exception e) {e.printStackTrace();} + } + + if(glSwapInterval>=0) { + _gl.setSwapInterval(glSwapInterval); + } + } + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + } + public void display(GLAutoDrawable drawable) { + } + public void dispose(GLAutoDrawable drawable) { + } + + // *********************************************************************************** + // *********************************************************************************** + // *********************************************************************************** + + public void keyPressed(KeyEvent e) { + } + public void keyReleased(KeyEvent e) { + } + public void keyTyped(KeyEvent e) { + if(e.getKeyChar()=='d') { + glWindow.setUndecorated(!glWindow.isUndecorated()); + } if(e.getKeyChar()=='f') { + glWindow.setFullscreen(!glWindow.isFullscreen()); + } else if(e.getKeyChar()=='a') { + glWindow.setAlwaysOnTop(!glWindow.isAlwaysOnTop()); + } else if(e.getKeyChar()=='r' && null!=awtParent) { + if(null == glWindow.getParent()) { + glWindow.reparentWindow(awtParent); + } else { + glWindow.reparentWindow(null); + } + } + } + + // *********************************************************************************** + // *********************************************************************************** + // *********************************************************************************** + + public void mouseClicked(MouseEvent e) { + } + public void mouseEntered(MouseEvent e) { + } + public void mouseExited(MouseEvent e) { + } + public void mousePressed(MouseEvent e) { + } + public void mouseReleased(MouseEvent e) { + } + public void mouseMoved(MouseEvent e) { + } + public void mouseDragged(MouseEvent e) { + } + public void mouseWheelMoved(MouseEvent e) { + } + +} + |