2003-08-17 18:58:19 +02:00
|
|
|
|
/*
|
2004-02-04 22:43:24 +01:00
|
|
|
|
* Copyright (c) 2002-2004 Lightweight Java Game Library Project
|
2003-08-17 18:58:19 +02:00
|
|
|
|
* All rights reserved.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
|
|
* modification, are permitted provided that the following conditions are
|
|
|
|
|
|
* met:
|
|
|
|
|
|
*
|
|
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
|
|
*
|
|
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
|
|
*
|
|
|
|
|
|
* * Neither the name of 'Lightweight Java Game Library' nor the names of
|
|
|
|
|
|
* its contributors may be used to endorse or promote products derived
|
|
|
|
|
|
* from this software without specific prior written permission.
|
|
|
|
|
|
*
|
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
|
|
|
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
|
|
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
|
|
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
*/
|
|
|
|
|
|
package org.lwjgl.test.input;
|
|
|
|
|
|
|
|
|
|
|
|
import org.lwjgl.input.Mouse;
|
|
|
|
|
|
import org.lwjgl.input.Keyboard;
|
2004-01-20 12:19:13 +01:00
|
|
|
|
import org.lwjgl.opengl.GL11;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
import org.lwjgl.opengl.Window;
|
2004-02-04 21:44:58 +01:00
|
|
|
|
import org.lwjgl.opengl.glu.GLU;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
import org.lwjgl.vector.Vector2f;
|
2004-02-04 21:44:58 +01:00
|
|
|
|
import org.lwjgl.vector.Vector3f;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* $Id$
|
|
|
|
|
|
* <br>
|
|
|
|
|
|
* Mouse test
|
|
|
|
|
|
*
|
|
|
|
|
|
* @author Brian Matzon <brian@matzon.dk>
|
|
|
|
|
|
* @version $Revision$
|
|
|
|
|
|
*/
|
|
|
|
|
|
public class MouseTest {
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/** Direction mouse has moved */
|
|
|
|
|
|
private int direction;
|
|
|
|
|
|
|
|
|
|
|
|
/** Last button pressed */
|
|
|
|
|
|
private int lastButton = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/** Last direction we scrolled in */
|
|
|
|
|
|
private int lastScrollDirection = -1;
|
|
|
|
|
|
|
|
|
|
|
|
/** Width of window */
|
|
|
|
|
|
private static int WINDOW_WIDTH = 640;
|
|
|
|
|
|
|
|
|
|
|
|
/** Height of window */
|
|
|
|
|
|
private static int WINDOW_HEIGHT = 640;
|
|
|
|
|
|
|
|
|
|
|
|
/** Triangle size (in <20>) */
|
|
|
|
|
|
private Vector2f triangleSize = new Vector2f(120, 100);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/** Triangle color */
|
|
|
|
|
|
private Vector3f triangleColor[] = new Vector3f[] {
|
|
|
|
|
|
new Vector3f(1,1,1),
|
|
|
|
|
|
new Vector3f(1,0,0),
|
|
|
|
|
|
new Vector3f(0,1,0),
|
|
|
|
|
|
new Vector3f(0,0,1)
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
private Vector3f quadColor[] = new Vector3f[] {
|
|
|
|
|
|
new Vector3f(1,1,1),
|
|
|
|
|
|
new Vector3f(1,0,0),
|
|
|
|
|
|
new Vector3f(0,1,0),
|
|
|
|
|
|
new Vector3f(0,0,1)
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/** Triangles to paint */
|
|
|
|
|
|
private Vector2f[] triangles = {
|
|
|
|
|
|
new Vector2f(WINDOW_WIDTH/2, WINDOW_HEIGHT - triangleSize.y),
|
|
|
|
|
|
new Vector2f(triangleSize.y, WINDOW_HEIGHT/2),
|
|
|
|
|
|
new Vector2f(WINDOW_WIDTH/2, triangleSize.y),
|
|
|
|
|
|
new Vector2f(WINDOW_WIDTH-triangleSize.y, WINDOW_HEIGHT/2)
|
|
|
|
|
|
};
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/** Whether the test is closing */
|
|
|
|
|
|
private boolean closing = false;
|
|
|
|
|
|
|
|
|
|
|
|
/** Fullscreen or not */
|
|
|
|
|
|
public static final boolean FULLSCREEN = false;
|
|
|
|
|
|
|
|
|
|
|
|
/** Buffered mouse or not */
|
|
|
|
|
|
public static final boolean BUFFERED_MOUSE = true;
|
|
|
|
|
|
|
|
|
|
|
|
private int bufferSize;
|
|
|
|
|
|
|
2003-08-17 18:58:19 +02:00
|
|
|
|
/** Creates a new instance of MouseTest */
|
|
|
|
|
|
public MouseTest() {
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void initialize() {
|
|
|
|
|
|
// create display and opengl
|
2004-02-04 21:44:58 +01:00
|
|
|
|
setupDisplay();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
createMouse();
|
|
|
|
|
|
createKeyboard();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Setup display
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void setupDisplay() {
|
2003-08-17 18:58:19 +02:00
|
|
|
|
try {
|
2004-02-04 21:44:58 +01:00
|
|
|
|
if (FULLSCREEN) {
|
|
|
|
|
|
Window.create("MouseTest", 16, 0, 0, 0);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Window.create("MouseTest", 50, 50, WINDOW_WIDTH, WINDOW_HEIGHT, 16, 0, 0, 0);
|
|
|
|
|
|
}
|
|
|
|
|
|
Window.setVSyncEnabled(true);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
System.exit(-1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
initializeOpenGL();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Initializes OpenGL
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
2003-08-17 18:58:19 +02:00
|
|
|
|
private void initializeOpenGL() {
|
2004-01-20 12:19:13 +01:00
|
|
|
|
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
2004-02-04 21:44:58 +01:00
|
|
|
|
GLU.gluOrtho2D(0.0f, WINDOW_WIDTH, 0, WINDOW_HEIGHT);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Executes the actual test
|
|
|
|
|
|
*/
|
2003-08-17 18:58:19 +02:00
|
|
|
|
public void executeTest() {
|
|
|
|
|
|
initialize();
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
runTest();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
|
|
|
|
|
Mouse.destroy();
|
|
|
|
|
|
Keyboard.destroy();
|
|
|
|
|
|
Window.destroy();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Creates the mouse
|
|
|
|
|
|
*/
|
2003-08-17 18:58:19 +02:00
|
|
|
|
private void createMouse() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
Mouse.create();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
System.exit(-1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
// if compiled for buffered mode, enable that
|
|
|
|
|
|
if(BUFFERED_MOUSE) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
Mouse.enableBuffer();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
System.exit(-1);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Creates the keyboard
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void createKeyboard() {
|
|
|
|
|
|
try {
|
|
|
|
|
|
Keyboard.create();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
System.exit(-1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Runs the test
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void runTest() {
|
|
|
|
|
|
// while not exiting
|
|
|
|
|
|
while (!closing) {
|
|
|
|
|
|
handleWindow();
|
|
|
|
|
|
|
|
|
|
|
|
// secondary check
|
|
|
|
|
|
if(!closing) {
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
// poll and check keyboard and mouse
|
|
|
|
|
|
handleKeyboard();
|
|
|
|
|
|
handleMouse();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// pause and continue if minimized
|
|
|
|
|
|
if(Window.isMinimized()) {
|
2004-02-04 22:43:24 +01:00
|
|
|
|
if(Window.isDirty()) {
|
|
|
|
|
|
render();
|
|
|
|
|
|
Window.paint();
|
|
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
pause(100);
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// render and flip
|
|
|
|
|
|
logic();
|
|
|
|
|
|
render();
|
|
|
|
|
|
Window.paint();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
Thread.yield();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Pauses the current thread for a specified time
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param time milliseconds to pause
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void pause(long time) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
Thread.sleep(time);
|
|
|
|
|
|
} catch (InterruptedException inte) {
|
|
|
|
|
|
inte.printStackTrace();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Handles the window
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void handleWindow() {
|
|
|
|
|
|
Window.update();
|
|
|
|
|
|
closing = Window.isCloseRequested();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* handles the mouse
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void handleMouse() {
|
|
|
|
|
|
if(BUFFERED_MOUSE) {
|
|
|
|
|
|
readBufferedMouse();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
readUnbufferedMouse();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* reads a mouse in buffered mode
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void readBufferedMouse() {
|
|
|
|
|
|
// poll for current values
|
|
|
|
|
|
Mouse.poll();
|
|
|
|
|
|
|
|
|
|
|
|
// read events
|
|
|
|
|
|
Mouse.read();
|
|
|
|
|
|
|
|
|
|
|
|
// iterate all events, use the last button down
|
|
|
|
|
|
while(Mouse.next()) {
|
|
|
|
|
|
if(Mouse.getEventButtonState()) {
|
|
|
|
|
|
lastButton = Mouse.getEventButton();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
updateState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Reads the mouse in unbuffered mode
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void readUnbufferedMouse() {
|
|
|
|
|
|
// poll for current values
|
|
|
|
|
|
Mouse.poll();
|
|
|
|
|
|
|
|
|
|
|
|
// get last button down
|
|
|
|
|
|
for(int i=0;i<Mouse.getButtonCount(); i++) {
|
|
|
|
|
|
if(Mouse.isButtonDown(i)) {
|
|
|
|
|
|
lastButton = i;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
updateState();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Updates our "model"
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void updateState() {
|
|
|
|
|
|
direction = -1;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
// get out if no movement
|
|
|
|
|
|
if (Mouse.getDX() == Mouse.getDY() && Mouse.getDX() == 0 && Mouse.getDWheel() == 0) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// determine direction moved
|
|
|
|
|
|
// ============================
|
|
|
|
|
|
if(Mouse.getDX() > 0) {
|
|
|
|
|
|
direction = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Mouse.getDX() < 0) {
|
|
|
|
|
|
direction = 1;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Mouse.getDY() > 0) {
|
|
|
|
|
|
direction = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Mouse.getDY() < 0) {
|
|
|
|
|
|
direction = 2;
|
|
|
|
|
|
}
|
|
|
|
|
|
// ----------------------------
|
|
|
|
|
|
|
|
|
|
|
|
if(direction > -1) {
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
// based on which button was last pushed, update model
|
|
|
|
|
|
switch(lastButton) {
|
|
|
|
|
|
case -1:
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 1:
|
|
|
|
|
|
triangleColor[direction].y = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
|
|
|
triangleColor[direction].z = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 3:
|
|
|
|
|
|
triangleColor[direction].x = 1;
|
|
|
|
|
|
triangleColor[direction].y = 1;
|
|
|
|
|
|
triangleColor[direction].z = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 0: // fall through
|
|
|
|
|
|
default:
|
|
|
|
|
|
triangleColor[direction].x = 1;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// get direction to update in
|
|
|
|
|
|
if (Mouse.getDWheel() > 0) {
|
|
|
|
|
|
lastScrollDirection++;
|
|
|
|
|
|
} else if (Mouse.getDWheel() < 0) {
|
|
|
|
|
|
lastScrollDirection--;
|
|
|
|
|
|
} else if (Mouse.getDWheel() == 0) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// over/underflow
|
|
|
|
|
|
if(lastScrollDirection < 0) {
|
|
|
|
|
|
lastScrollDirection = 3;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(lastScrollDirection > 3) {
|
|
|
|
|
|
lastScrollDirection = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// update colors
|
|
|
|
|
|
quadColor[lastScrollDirection].x = (float) Math.random();
|
|
|
|
|
|
quadColor[lastScrollDirection].y = (float) Math.random();
|
|
|
|
|
|
quadColor[lastScrollDirection].z = (float) Math.random();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Handles the keyboard
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void handleKeyboard() {
|
|
|
|
|
|
Keyboard.poll();
|
|
|
|
|
|
|
|
|
|
|
|
// closing on ESCAPE
|
|
|
|
|
|
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
|
|
|
|
|
|
closing = true;
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
/**
|
|
|
|
|
|
* Does the "model logic"
|
|
|
|
|
|
*/
|
|
|
|
|
|
private void logic() {
|
|
|
|
|
|
// "we fade to black"
|
|
|
|
|
|
// ===========================================
|
|
|
|
|
|
for(int i=0; i<triangleColor.length; i++) {
|
|
|
|
|
|
triangleColor[i].x -= 0.01;
|
|
|
|
|
|
triangleColor[i].y -= 0.01;
|
|
|
|
|
|
triangleColor[i].z -= 0.01;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(int i=0; i<quadColor.length; i++) {
|
|
|
|
|
|
quadColor[i].x -= 0.01;
|
|
|
|
|
|
quadColor[i].y -= 0.01;
|
|
|
|
|
|
quadColor[i].z -= 0.01;
|
|
|
|
|
|
}
|
|
|
|
|
|
// -------------------------------------------
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Render our triangles
|
|
|
|
|
|
*/
|
2003-08-17 18:58:19 +02:00
|
|
|
|
private void render() {
|
2004-01-20 12:19:13 +01:00
|
|
|
|
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
|
2004-02-04 21:44:58 +01:00
|
|
|
|
// for each triangle, render it at position, rotating degrees for each
|
|
|
|
|
|
for(int i=0; i<triangles.length; i++) {
|
|
|
|
|
|
GL11.glPushMatrix(); {
|
|
|
|
|
|
GL11.glTranslatef(triangles[i].x, triangles[i].y, 0);
|
|
|
|
|
|
GL11.glRotatef(i*90, 0, 0, 1);
|
|
|
|
|
|
|
|
|
|
|
|
GL11.glColor3f(triangleColor[i].x, triangleColor[i].y, triangleColor[i].z);
|
|
|
|
|
|
|
|
|
|
|
|
GL11.glBegin(GL11.GL_TRIANGLES); {
|
|
|
|
|
|
GL11.glVertex2f(0, triangleSize.y);
|
|
|
|
|
|
GL11.glVertex2f(-triangleSize.x, -triangleSize.y);
|
|
|
|
|
|
GL11.glVertex2f(+triangleSize.x, -triangleSize.y);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
GL11.glEnd();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// paint quad in the middle (yes, wasting cpu cycles by not precalculating)
|
|
|
|
|
|
GL11.glBegin(GL11.GL_QUADS); {
|
|
|
|
|
|
GL11.glColor3f(quadColor[0].x, quadColor[0].y, quadColor[0].z);
|
|
|
|
|
|
GL11.glVertex2f(WINDOW_WIDTH/2-triangleSize.x, WINDOW_HEIGHT/2-triangleSize.x);
|
|
|
|
|
|
GL11.glColor3f(quadColor[1].x, quadColor[1].y, quadColor[1].z);
|
|
|
|
|
|
GL11.glVertex2f(WINDOW_WIDTH/2+triangleSize.x, WINDOW_HEIGHT/2-triangleSize.x);
|
|
|
|
|
|
GL11.glColor3f(quadColor[2].x, quadColor[2].y, quadColor[2].z);
|
|
|
|
|
|
GL11.glVertex2f(WINDOW_WIDTH/2+triangleSize.x, WINDOW_HEIGHT/2+triangleSize.x);
|
|
|
|
|
|
GL11.glColor3f(quadColor[3].x, quadColor[3].y, quadColor[3].z);
|
|
|
|
|
|
GL11.glVertex2f(WINDOW_WIDTH/2-triangleSize.x, WINDOW_HEIGHT/2+triangleSize.x);
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
2004-02-04 21:44:58 +01:00
|
|
|
|
GL11.glEnd();
|
2003-08-17 18:58:19 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @param args the command line arguments
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
MouseTest mt = new MouseTest();
|
|
|
|
|
|
mt.executeTest();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|