summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/jackpotc/.gitignore1
-rwxr-xr-xtools/jackpotc/bttf20
-rwxr-xr-xtools/jackpotc/jackpotc2
-rw-r--r--tools/jackpotc/jogl1Tojogl2.hint38
-rwxr-xr-xtools/jackpotc/setup27
-rw-r--r--tools/jackpotc/test/oldgears/.gitignore4
-rw-r--r--tools/jackpotc/test/oldgears/build.xml28
-rw-r--r--tools/jackpotc/test/oldgears/manifest.mf3
-rw-r--r--tools/jackpotc/test/oldgears/nbproject/project.xml74
-rw-r--r--tools/jackpotc/test/oldgears/src/jogl111/gears/Gears.java309
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) {}
+}
+