blob: cd9d5dfe99c1a9ed7397a471f775a51a190bce22 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.swt.opengl.examples;
import org.eclipse.opengl.*;
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
class GradientTab extends OpenGLTab {
private float xPos = 0.0f, yPos = 0.0f, zPos = -7.0f;
private float xRot = 180.0f, yRot = 180.0f, zRot = 180.0f;
private int currentSelection = 1;
private final static float[] BEZIER_COLORS = {
0.0f, 1.0f, 0.0f, 0.0f, 0.3f, 0.6f, 0.1f, 0.0f,
0.8f, 0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 0.8f, 0.8f, 0.8f, 0.0f
};
private final static float[] BEZIER_POINTS = {
-1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f,
-1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f,
-0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f,
-1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f,
3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f,
1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f,
};
private final static String[] OBJECT_NAMES = { "Bezier", "Square" };
/**
* @see OpenGLTab#createControls(Composite)
*/
void createControls(Composite composite) {
Group movementGroup = new Group(composite, SWT.NONE);
movementGroup.setText("Translation");
movementGroup.setLayout(new GridLayout(2, false));
new Label(movementGroup, SWT.NONE).setText("X:");
final Slider xMove = new Slider(movementGroup, SWT.NONE);
xMove.setIncrement(1);
xMove.setMaximum(12);
xMove.setMinimum(0);
xMove.setThumb(2);
xMove.setPageIncrement(2);
xMove.setSelection(5);
xMove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
xPos = xMove.getSelection() - 5;
}
});
new Label(movementGroup, SWT.NONE).setText("Y:");
final Slider yMove = new Slider(movementGroup, SWT.NONE);
yMove.setIncrement(1);
yMove.setMaximum(12);
yMove.setMinimum(0);
yMove.setThumb(2);
yMove.setPageIncrement(2);
yMove.setSelection(5);
yMove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
yPos = yMove.getSelection() - 5;
}
});
new Label(movementGroup, SWT.NONE).setText("Z:");
final Slider zMove = new Slider(movementGroup, SWT.NONE);
zMove.setIncrement(1);
zMove.setMaximum(12);
zMove.setMinimum(0);
zMove.setThumb(2);
zMove.setPageIncrement(2);
zMove.setSelection(5);
zMove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
zPos = zMove.getSelection() - 12;
}
});
Group rotationGroup = new Group(composite, SWT.NONE);
rotationGroup.setText("Rotation");
rotationGroup.setLayout(new GridLayout(2, false));
new Label(rotationGroup, SWT.NONE).setText("X:");
final Slider xRotation = new Slider(rotationGroup, SWT.NONE);
xRotation.setIncrement(10);
xRotation.setMaximum(362);
xRotation.setMinimum(0);
xRotation.setThumb(2);
xRotation.setPageIncrement(20);
xRotation.setSelection(180);
xRotation.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
xRot = xRotation.getSelection();
}
});
new Label(rotationGroup, SWT.NONE).setText("Y:");
final Slider yRotation = new Slider(rotationGroup, SWT.NONE);
yRotation.setIncrement(10);
yRotation.setMaximum(362);
yRotation.setMinimum(0);
yRotation.setThumb(2);
yRotation.setPageIncrement(20);
yRotation.setSelection(180);
yRotation.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
yRot = yRotation.getSelection();
}
});
new Label(rotationGroup, SWT.NONE).setText("Z:");
final Slider zRotation = new Slider(rotationGroup, SWT.NONE);
zRotation.setIncrement(10);
zRotation.setMaximum(362);
zRotation.setMinimum(0);
zRotation.setThumb(2);
zRotation.setPageIncrement(20);
zRotation.setSelection(180);
zRotation.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
zRot = zRotation.getSelection();
}
});
Composite objectGroup = new Composite(composite,SWT.NONE);
GridLayout layout = new GridLayout(2,false);
layout.marginHeight = 0;
layout.marginWidth = 0;
objectGroup.setLayout(layout);
objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
new Label(objectGroup, SWT.NONE).setText("Object:");
final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
data.grabExcessHorizontalSpace = true;
objectCombo.setLayoutData(data);
objectCombo.setItems(OBJECT_NAMES);
objectCombo.select(0);
objectCombo.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
currentSelection = objectCombo.getSelectionIndex() + 1;
}
});
}
/**
* @see OpenGLTab#dispose()
*/
void dispose() {
super.dispose();
GL.glDeleteLists(1, 2);
}
/**
* @see OpenGLTab#getTabText()
*/
String getTabText() {
return "Gradients";
}
/**
* @see OpenGLTab#init()
*/
void init() {
GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST);
GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);
GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS);
GL.glMap2f(GL.GL_MAP2_COLOR_4, 0, 1, 4, 1, 0, 1, 4, 6, BEZIER_COLORS);
GL.glMapGrid2f(20, 0.0f, 1.0f, 20, 0.0f, 1.0f);
GL.glShadeModel(GL.GL_SMOOTH);
GL.glEnable(GL.GL_LINE_SMOOTH);
GL.glEnable(GL.GL_LINE_STIPPLE);
GL.glEnable(GL.GL_BLEND);
GL.glEnable(GL.GL_MAP2_COLOR_4);
GL.glEnable(GL.GL_MAP2_VERTEX_3);
GL.glEnable(GL.GL_DEPTH_TEST);
// create display lists
GL.glNewList(1, GL.GL_COMPILE);
GL.glEvalMesh2(GL.GL_FILL, 0, 20, 0, 20);
GL.glEndList();
GL.glNewList(2, GL.GL_COMPILE);
GL.glBegin(GL.GL_TRIANGLE_FAN);
GL.glColor3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(0.0f, 0.0f, 0.0f);
GL.glColor3f(1.0f, 0.0f, 0.0f);
GL.glVertex3f(0.0f, 2.0f, 0.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(-2.0f, 2.0f, 0.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f);
GL.glVertex3f(-2.0f, 0.0f, 0.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(-2.0f, -2.0f, 0.0f);
GL.glColor3f(1.0f, 0.0f, 0.0f);
GL.glVertex3f(0.0f, -2.0f, 0.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(2.0f, -2.0f, 0.0f);
GL.glColor3f(0.0f, 0.0f, 1.0f);
GL.glVertex3f(2.0f, 0.0f, 0.0f);
GL.glColor3f(0.0f, 1.0f, 0.0f);
GL.glVertex3f(2.0f, 2.0f, 0.0f);
GL.glColor3f(1.0f, 0.0f, 0.0f);
GL.glVertex3f(0.0f, 2.0f, 0.0f);
GL.glEnd();
GL.glEndList();
}
/**
* @see OpenGLTab#renderScene()
*/
void renderScene() {
GL.glClear(GL.GL_COLOR_BUFFER_BIT);
GL.glLoadIdentity();
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
GL.glTranslatef(xPos, yPos, zPos);
GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f);
GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f);
GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f);
GL.glColor3f(1.0f, 0.0f, 0.0f);
GL.glCallList(currentSelection);
}
}