diff options
Diffstat (limited to 'tools/jackpotc')
-rw-r--r-- | tools/jackpotc/.gitignore | 1 | ||||
-rwxr-xr-x | tools/jackpotc/bttf | 20 | ||||
-rwxr-xr-x | tools/jackpotc/jackpotc | 2 | ||||
-rw-r--r-- | tools/jackpotc/jogl1Tojogl2.hint | 38 | ||||
-rwxr-xr-x | tools/jackpotc/setup | 27 | ||||
-rw-r--r-- | tools/jackpotc/test/oldgears/.gitignore | 4 | ||||
-rw-r--r-- | tools/jackpotc/test/oldgears/build.xml | 28 | ||||
-rw-r--r-- | tools/jackpotc/test/oldgears/manifest.mf | 3 | ||||
-rw-r--r-- | tools/jackpotc/test/oldgears/nbproject/project.xml | 74 | ||||
-rw-r--r-- | tools/jackpotc/test/oldgears/src/jogl111/gears/Gears.java | 309 |
10 files changed, 506 insertions, 0 deletions
diff --git a/tools/jackpotc/.gitignore b/tools/jackpotc/.gitignore new file mode 100644 index 000000000..a65b41774 --- /dev/null +++ b/tools/jackpotc/.gitignore @@ -0,0 +1 @@ +lib diff --git a/tools/jackpotc/bttf b/tools/jackpotc/bttf new file mode 100755 index 000000000..ba384702f --- /dev/null +++ b/tools/jackpotc/bttf @@ -0,0 +1,20 @@ +#!/bin/bash +PROJECT="./test/oldgears" +SRC="$PROJECT/src" +GENSRC="$PROJECT/gensrc" +LIBS="$PROJECT/lib/old/jogl.jar:$PROJECT/lib/new/jogl.all.jar:$PROJECT/lib/new/jogl.awt.jar" +OUTPUT="$PROJECT/build" +FILESET=`find $SRC -type f -name "*.java"` + +echo "Back to the Future" +echo "transforming files: $FILESET" +mkdir $OUTPUT +./lib/jackpotc -sourcepath $SRC -cp $LIBS -d $OUTPUT -Ajackpot30_extra_hints=./jogl1Tojogl2.hint $FILESET + +echo "patching..." +mkdir "$GENSRC" +mkdir "$GENSRC/jogl2/" +mkdir "$GENSRC/jogl2/gears/" +patch -o $GENSRC/jogl2/gears/Gears.java $FILESET ${OUTPUT}/META-INF/upgrade/upgrade.diff + +echo "done" diff --git a/tools/jackpotc/jackpotc b/tools/jackpotc/jackpotc new file mode 100755 index 000000000..6b0216d76 --- /dev/null +++ b/tools/jackpotc/jackpotc @@ -0,0 +1,2 @@ +#!/bin/bash +java -Xbootclasspath/p:`dirname $0`/jackpotc.jar com.sun.tools.javac.Main -Xjcov "$@" diff --git a/tools/jackpotc/jogl1Tojogl2.hint b/tools/jackpotc/jogl1Tojogl2.hint new file mode 100644 index 000000000..9fa7d39dc --- /dev/null +++ b/tools/jackpotc/jogl1Tojogl2.hint @@ -0,0 +1,38 @@ +// rules for automatic jogl 1.1.1 -> jogl 2 code transformation + +// - - - simple move/rename refactorings - - - +'JOGL2 API change: javax.media.opengl.GLCanvas -> javax.media.opengl.awt.GLCanvas': +javax.media.opengl.GLCanvas=>javax.media.opengl.awt.GLCanvas;; + +'JOGL2 API change: javax.media.opengl.GLJPanel -> javax.media.opengl.awt.GLJPanel': +javax.media.opengl.GLJPanel=>javax.media.opengl.awt.GLJPanel;; + +// causes an error: +// dummy.java:1: illegal character: \8203 +// SEVERE: null +// java.lang.ClassCastException: com.sun.tools.javac.tree.JCTree$JCNewClass cannot be cast to com.sun.source.tree.ClassTree +//'JOGL2 API change: com.sun.opengl.util.Animator -> com.jogamp.opengl.util.Animator': +//com.sun.opengl.util.Animator=>com.jogamp.opengl.util.Animator;; + +'JOGL2 API change: javax.media.opengl.GL -> javax.media.opengl.GL2': +javax.media.opengl.GL=>javax.media.opengl.GL2;; + +'JOGL2 API change: javax.media.opengl.DebugGL -> javax.media.opengl.DebugGL2': +javax.media.opengl.DebugGL=>javax.media.opengl.DebugGL2;; + +'JOGL2 API change: javax.media.opengl.TraceGL -> javax.media.opengl.TraceGL2': +javax.media.opengl.TraceGL=>javax.media.opengl.TraceGL2;; + + +// - - - API changes - - - +'JOGL2 API change: new javax.media.opengl.GLCapabilities(javax.media.opengl.GLProfile)': +new javax.media.opengl.GLCapabilities()=> +new javax.media.opengl.GLCapabilities(javax.media.opengl.GLProfile.get(javax.media.opengl.GLProfile.GL2));; + +'JOGL2 API change: GL gl = drawable.getGL() -> GL2 gl = drawable.getGL().getGL2()': +$d.getGL() :: $d instanceof javax.media.opengl.GLAutoDrawable=> +$d.getGL().getGL2();; + +//public void init($D $drawable)=> +//public void dispose(GLAutoDrawable drawable){} +//public void init($D $drawable);; diff --git a/tools/jackpotc/setup b/tools/jackpotc/setup new file mode 100755 index 000000000..58731b72d --- /dev/null +++ b/tools/jackpotc/setup @@ -0,0 +1,27 @@ +#!/bin/bash +rm -Rf lib +mkdir lib +cd ./lib + +echo "downloading Jackpot..." +wget http://bitbucket.org/jlahoda/jackpot30/downloads/jackpotc.zip +unzip -oj jackpotc.zip + +cd ../test +rm -Rf oldgears/lib +mkdir oldgears/lib +mkdir oldgears/lib/new +mkdir oldgears/lib/old + +cd oldgears/lib/new +echo "downloading JOGL 2..." +wget http://jogamp.org/deployment/jogl-next/jogl.all.jar +wget http://jogamp.org/deployment/jogl-next/jogl.awt.jar +wget http://jogamp.org/deployment/jogl-next/gluegen-rt.jar + +cd ../old +echo "downloading old JOGL 1.1.1 build..." +wget http://jogamp.org/deployment/archive/jogl-old-1.1.1/jogl.jar +wget http://jogamp.org/deployment/archive/gluegen-old-1.0b6/gluegen-rt.jar + +echo "done" diff --git a/tools/jackpotc/test/oldgears/.gitignore b/tools/jackpotc/test/oldgears/.gitignore new file mode 100644 index 000000000..563e9d62c --- /dev/null +++ b/tools/jackpotc/test/oldgears/.gitignore @@ -0,0 +1,4 @@ +build +gensrc +dist +nbproject/private diff --git a/tools/jackpotc/test/oldgears/build.xml b/tools/jackpotc/test/oldgears/build.xml new file mode 100644 index 000000000..80a045cb4 --- /dev/null +++ b/tools/jackpotc/test/oldgears/build.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + invoke the shell scripts 'setup' prior to building this project. + @author Michael Bien +--> +<project name="oldgears" default="build" basedir="."> + + <description>Builds, tests, and runs the project oldgears.</description> + + <target name="build" depends="clean"> + <exec dir="${basedir}/../../" executable="/bin/sh" spawn="false" failonerror="true"> + <arg value="bttf"/> + </exec> + <javac srcdir="src/jogl111" destdir="build/jogl111" classpath="lib/old/jogl.jar:lib/old/gluegen-rt.jar" includeantruntime="false"/> + <javac srcdir="gensrc/jogl2" destdir="build/jogl2" classpath="lib/new/jogl.all.jar:lib/new/jogl.awt.jar:lib/new/gluegen-rt.jar" includeantruntime="false"/> + </target> + + <target name="clean"> + <delete dir="build" quiet="true"/> + <delete dir="gensrc" quiet="true"/> + <mkdir dir="build"/> + <mkdir dir="gensrc"/> + <mkdir dir="build/jogl111"/> + <mkdir dir="build/jogl2"/> + </target> + +</project> diff --git a/tools/jackpotc/test/oldgears/manifest.mf b/tools/jackpotc/test/oldgears/manifest.mf new file mode 100644 index 000000000..328e8e5bc --- /dev/null +++ b/tools/jackpotc/test/oldgears/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/tools/jackpotc/test/oldgears/nbproject/project.xml b/tools/jackpotc/test/oldgears/nbproject/project.xml new file mode 100644 index 000000000..45d9265df --- /dev/null +++ b/tools/jackpotc/test/oldgears/nbproject/project.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://www.netbeans.org/ns/project/1"> + <type>org.netbeans.modules.ant.freeform</type> + <configuration> + <general-data xmlns="http://www.netbeans.org/ns/freeform-project/1"> + <!-- Do not use Project Properties customizer when editing this file manually. --> + <name>oldgears</name> + <properties/> + <folders> + <source-folder> + <label>src/jogl111</label> + <type>java</type> + <location>src/jogl111</location> + </source-folder> + <source-folder> + <label>gensrc/jogl2</label> + <type>java</type> + <location>gensrc/jogl2</location> + </source-folder> + </folders> + <ide-actions> + <action name="build"> + <target>build</target> + </action> + <action name="clean"> + <target>clean</target> + </action> + <action name="rebuild"> + <target>clean</target> + <target>build</target> + </action> + </ide-actions> + <export> + <type>folder</type> + <location>build</location> + <build-target>build</build-target> + </export> + <view> + <items> + <source-folder style="packages"> + <label>src/jogl111</label> + <location>src/jogl111</location> + </source-folder> + <source-folder style="packages"> + <label>gensrc/jogl2</label> + <location>gensrc/jogl2</location> + </source-folder> + <source-file> + <location>build.xml</location> + </source-file> + </items> + <context-menu> + <ide-action name="build"/> + <ide-action name="rebuild"/> + <ide-action name="clean"/> + </context-menu> + </view> + <subprojects/> + </general-data> + <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/1"> + <compilation-unit> + <package-root>gensrc/jogl2</package-root> + <classpath mode="compile">lib/new/gluegen-rt.jar:lib/new/jogl.all.jar:lib/new/jogl.awt.jar</classpath> + <built-to>build</built-to> + <source-level>1.4</source-level> + </compilation-unit> + <compilation-unit> + <package-root>src/jogl111</package-root> + <classpath mode="compile">lib/old/gluegen-rt.jar:lib/old/jogl.jar</classpath> + <source-level>1.4</source-level> + </compilation-unit> + </java-data> + </configuration> +</project> diff --git a/tools/jackpotc/test/oldgears/src/jogl111/gears/Gears.java b/tools/jackpotc/test/oldgears/src/jogl111/gears/Gears.java new file mode 100644 index 000000000..37ca60c0c --- /dev/null +++ b/tools/jackpotc/test/oldgears/src/jogl111/gears/Gears.java @@ -0,0 +1,309 @@ +package gears; + +import java.awt.*; +import java.awt.event.*; + +import javax.media.opengl.*; +import com.sun.opengl.util.*; + +/** + * slightly modified Gears demo used as jackpot testing purposes. + * - - - + * Gears.java <BR> + * author: Brian Paul (converted to Java by Ron Cemer and Sven Goethel) <P> + * + * This version is equal to Brian Paul's version 1.2 1999/10/21 + */ + +public class Gears implements GLEventListener, MouseListener, MouseMotionListener { + public static void main(String[] args) { + + Frame frame = new Frame("Gear Demo"); + GLCanvas canvas = new GLCanvas(new GLCapabilities()); + + canvas.addGLEventListener(new Gears()); + frame.add(canvas); + frame.setSize(300, 300); + final Animator animator = new Animator(canvas); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + // Run this on another thread than the AWT event queue to + // make sure the call to Animator.stop() completes before + // exiting + new Thread(new Runnable() { + public void run() { + animator.stop(); + System.exit(0); + } + }).start(); + } + }); + frame.show(); + animator.start(); + } + + private float view_rotx = 20.0f, view_roty = 30.0f, view_rotz = 0.0f; + private int gear1, gear2, gear3; + private float angle = 0.0f; + + private int prevMouseX, prevMouseY; + private boolean mouseRButtonDown = false; + + public void init(GLAutoDrawable drawable) { + // Use debug pipeline + drawable.setGL(new DebugGL(drawable.getGL())); + + GL gl = drawable.getGL(); + + System.err.println("INIT GL IS: " + gl.getClass().getName()); + + gl.setSwapInterval(1); + + float pos[] = { 5.0f, 5.0f, 10.0f, 0.0f }; + float red[] = { 0.8f, 0.1f, 0.0f, 1.0f }; + float green[] = { 0.0f, 0.8f, 0.2f, 1.0f }; + float blue[] = { 0.2f, 0.2f, 1.0f, 1.0f }; + + gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, pos, 0); + gl.glEnable(GL.GL_CULL_FACE); + gl.glEnable(GL.GL_LIGHTING); + gl.glEnable(GL.GL_LIGHT0); + gl.glEnable(GL.GL_DEPTH_TEST); + + /* make the gears */ + gear1 = gl.glGenLists(1); + gl.glNewList(gear1, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, red, 0); + gear(gl, 1.0f, 4.0f, 1.0f, 20, 0.7f); + gl.glEndList(); + + gear2 = gl.glGenLists(1); + gl.glNewList(gear2, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, green, 0); + gear(gl, 0.5f, 2.0f, 2.0f, 10, 0.7f); + gl.glEndList(); + + gear3 = gl.glGenLists(1); + gl.glNewList(gear3, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, blue, 0); + gear(gl, 1.3f, 2.0f, 0.5f, 10, 0.7f); + gl.glEndList(); + + gl.glEnable(GL.GL_NORMALIZE); + + drawable.addMouseListener(this); + drawable.addMouseMotionListener(this); + } + + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + GL gl = drawable.getGL(); + + float h = (float)height / (float)width; + + gl.glMatrixMode(GL.GL_PROJECTION); + + System.err.println("GL_VENDOR: " + gl.glGetString(GL.GL_VENDOR)); + System.err.println("GL_RENDERER: " + gl.glGetString(GL.GL_RENDERER)); + System.err.println("GL_VERSION: " + gl.glGetString(GL.GL_VERSION)); + gl.glLoadIdentity(); + gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 60.0f); + gl.glMatrixMode(GL.GL_MODELVIEW); + gl.glLoadIdentity(); + gl.glTranslatef(0.0f, 0.0f, -40.0f); + } + + public void display(GLAutoDrawable drawable) { + angle += 2.0f; + + GL gl = drawable.getGL(); + if ((drawable instanceof GLJPanel) && + !((GLJPanel) drawable).isOpaque() && + ((GLJPanel) drawable).shouldPreserveColorBufferIfTranslucent()) { + gl.glClear(GL.GL_DEPTH_BUFFER_BIT); + } else { + gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + } + + gl.glPushMatrix(); + gl.glRotatef(view_rotx, 1.0f, 0.0f, 0.0f); + gl.glRotatef(view_roty, 0.0f, 1.0f, 0.0f); + gl.glRotatef(view_rotz, 0.0f, 0.0f, 1.0f); + + gl.glPushMatrix(); + gl.glTranslatef(-3.0f, -2.0f, 0.0f); + gl.glRotatef(angle, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear1); + gl.glPopMatrix(); + + gl.glPushMatrix(); + gl.glTranslatef(3.1f, -2.0f, 0.0f); + gl.glRotatef(-2.0f * angle - 9.0f, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear2); + gl.glPopMatrix(); + + gl.glPushMatrix(); + gl.glTranslatef(-3.1f, 4.2f, 0.0f); + gl.glRotatef(-2.0f * angle - 25.0f, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear3); + gl.glPopMatrix(); + + gl.glPopMatrix(); + } + + public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {} + + private void gear(GL gl, + float inner_radius, + float outer_radius, + float width, + int teeth, + float tooth_depth) + { + int i; + float r0, r1, r2; + float angle, da; + float u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth / 2.0f; + r2 = outer_radius + tooth_depth / 2.0f; + + da = 2.0f * (float) Math.PI / teeth / 4.0f; + + gl.glShadeModel(GL.GL_FLAT); + + gl.glNormal3f(0.0f, 0.0f, 1.0f); + + /* draw front face */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + if(i < teeth) + { + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); + } + } + gl.glEnd(); + + /* draw front sides of teeth */ + gl.glBegin(GL.GL_QUADS); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2.0f * da), r2 * (float)Math.sin(angle + 2.0f * da), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); + } + gl.glEnd(); + + /* draw back face */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + } + gl.glEnd(); + + /* draw back sides of teeth */ + gl.glBegin(GL.GL_QUADS); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + } + gl.glEnd(); + + /* draw outward faces of teeth */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + u = r2 * (float)Math.cos(angle + da) - r1 * (float)Math.cos(angle); + v = r2 * (float)Math.sin(angle + da) - r1 * (float)Math.sin(angle); + len = (float)Math.sqrt(u * u + v * v); + u /= len; + v /= len; + gl.glNormal3f(v, -u, 0.0f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); + gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); + u = r1 * (float)Math.cos(angle + 3 * da) - r2 * (float)Math.cos(angle + 2 * da); + v = r1 * (float)Math.sin(angle + 3 * da) - r2 * (float)Math.sin(angle + 2 * da); + gl.glNormal3f(v, -u, 0.0f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); + } + gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), -width * 0.5f); + gl.glEnd(); + + gl.glShadeModel(GL.GL_SMOOTH); + + /* draw inside radius cylinder */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glNormal3f(-(float)Math.cos(angle), -(float)Math.sin(angle), 0.0f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + } + gl.glEnd(); + } + + // Methods required for the implementation of MouseListener + public void mouseEntered(MouseEvent e) {} + public void mouseExited(MouseEvent e) {} + + public void mousePressed(MouseEvent e) { + prevMouseX = e.getX(); + prevMouseY = e.getY(); + if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { + mouseRButtonDown = true; + } + } + + public void mouseReleased(MouseEvent e) { + if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { + mouseRButtonDown = false; + } + } + + public void mouseClicked(MouseEvent e) {} + + // Methods required for the implementation of MouseMotionListener + public void mouseDragged(MouseEvent e) { + int x = e.getX(); + int y = e.getY(); + Dimension size = e.getComponent().getSize(); + + float thetaY = 360.0f * ( (float)(x-prevMouseX)/(float)size.width); + float thetaX = 360.0f * ( (float)(prevMouseY-y)/(float)size.height); + + prevMouseX = x; + prevMouseY = y; + + view_rotx += thetaX; + view_roty += thetaY; + } + + public void mouseMoved(MouseEvent e) {} +} + |