diff options
author | Sven Gothel <[email protected]> | 2010-05-04 06:35:37 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-05-04 06:35:37 +0200 |
commit | 9e792dcef900de7039cd277459c0629abfab9f21 (patch) | |
tree | 81adfd1e07e2118675d62836e1289225f408bb00 /src/junit/com | |
parent | a677e9db03ea44ea353fb9de61e2a86a6e063d0f (diff) |
NEWT Fixes:
- Common native in NewtCommon.c/.h
- Add simple NEWTEventFiFo, providing a pattern
to spool events by an EventListener and to process them
where it impacts (GLEventListener ..)
- Window [X11|Windows]: setSize/setPosition:
- always store the values,
- only act if valid and !fullscreen
- Window [X11]:
- Add requestFocus
- Add setTitle
- Fix parent/child window creation
- Fix parent/child window fullscreen (reparenting)
- JUnit Test: ParentTest:
- Shows parent and client window animation
- Client window shall be able to go into fullscreen,
ie disconnect/reconnect from its parent.
Test: Focus-client + type-'f'
- Both windows receive/dispatch events properly
Diffstat (limited to 'src/junit/com')
3 files changed, 106 insertions, 18 deletions
diff --git a/src/junit/com/jogamp/test/junit/jogl/demos/gl2/gears/Gears.java b/src/junit/com/jogamp/test/junit/jogl/demos/gl2/gears/Gears.java index a5bf3fda7..1fa49be8c 100644 --- a/src/junit/com/jogamp/test/junit/jogl/demos/gl2/gears/Gears.java +++ b/src/junit/com/jogamp/test/junit/jogl/demos/gl2/gears/Gears.java @@ -64,8 +64,8 @@ public class Gears implements GLEventListener { gl.glEnable(GL2.GL_NORMALIZE); - MouseListener gearsMouse = new TraceMouseAdapter(new GearsMouseAdapter()); - // MouseListener gearsMouse = new GearsMouseAdapter(); + // MouseListener gearsMouse = new TraceMouseAdapter(new GearsMouseAdapter()); + MouseListener gearsMouse = new GearsMouseAdapter(); if (drawable instanceof Component) { Component comp = (Component) drawable; diff --git a/src/junit/com/jogamp/test/junit/newt/KeyAction.java b/src/junit/com/jogamp/test/junit/newt/KeyAction.java new file mode 100644 index 000000000..29b3d2ee2 --- /dev/null +++ b/src/junit/com/jogamp/test/junit/newt/KeyAction.java @@ -0,0 +1,50 @@ + +/* + * Copyright (c) 2010 Sven Gothel. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution 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 Sven Gothel or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SVEN GOTHEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + */ + +package com.jogamp.test.junit.newt; + +import com.jogamp.opengl.util.Animator; +import com.jogamp.newt.event.*; + +class KeyAction extends KeyAdapter { + NEWTEventFiFo eventFifo; + + public KeyAction(NEWTEventFiFo eventFifo) { + this.eventFifo = eventFifo; + } + + public void keyTyped(KeyEvent e) { + eventFifo.put(e); + } +} + diff --git a/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java b/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java index 6415d553b..474025835 100755 --- a/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java +++ b/src/junit/com/jogamp/test/junit/newt/TestParenting01NEWT.java @@ -60,6 +60,7 @@ import com.jogamp.test.junit.jogl.demos.gl2.gears.Gears; public class TestParenting01NEWT { static int width, height; + static long durationPerTest = 500; @BeforeClass public static void initClass() { @@ -88,7 +89,7 @@ public class TestParenting01NEWT { Assert.assertTrue(true==window.isVisible()); Assert.assertTrue(width==window.getWidth()); Assert.assertTrue(height==window.getHeight()); - // System.out.println("Created: "+window); + System.out.println("Created: "+window); // // Create native OpenGL resources .. XGL/WGL/CGL .. @@ -120,7 +121,7 @@ public class TestParenting01NEWT { } @Test - public void testWindowParentingNewtOnNewt() throws InterruptedException { + public void testWindowParenting01NewtOnNewtParentChildDraw() throws InterruptedException { GLCapabilities caps = new GLCapabilities(null); Assert.assertNotNull(caps); Display display = NewtFactory.createDisplay(null); // local display @@ -128,39 +129,75 @@ public class TestParenting01NEWT { Screen screen = NewtFactory.createScreen(display, 0); // screen 0 Assert.assertNotNull(screen); - Window window1 = createWindow( null, screen, caps, width, height, true /* onscreen */, false /* undecorated */); - Window window2 = createWindow(window1, screen, caps, width/2, height/2, true /* onscreen */, false /* undecorated */); + int x = 1; + int y = 1; + NEWTEventFiFo eventFifo = new NEWTEventFiFo(); + + Window window1 = createWindow( null, screen, caps, width, height, true /* onscreen */, false /* undecorated */); + Assert.assertNotNull(window1); + window1.setTitle("testWindowParenting01NewtOnNewtParentChildDraw - PARENT"); + window1.setPosition(x,y); + window1.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo))); GLWindow glWindow1 = GLWindow.create(window1); Assert.assertNotNull(glWindow1); + + Window window2 = createWindow(window1, screen, caps, width/2, height/2, true /* onscreen */, false /* undecorated */); + Assert.assertNotNull(window2); + window2.setTitle("testWindowParenting01NewtOnNewtParentChildDraw - CHILD"); + window2.setPosition(window1.getWidth()/2, window1.getHeight()/2); + window2.addKeyListener(new TraceKeyAdapter(new KeyAction(eventFifo))); + GLWindow glWindow2 = GLWindow.create(window2); + Assert.assertNotNull(glWindow2); + GLEventListener demo1 = new RedSquare(); setDemoFields(demo1, window1, glWindow1, false); glWindow1.addGLEventListener(demo1); - GLWindow glWindow2 = GLWindow.create(window2); - Assert.assertNotNull(glWindow2); GLEventListener demo2 = new Gears(); setDemoFields(demo2, window2, glWindow2, false); glWindow2.addGLEventListener(demo2); - glWindow1.setVisible(true); + window2.setVisible(true); + window1.setVisible(true); + glWindow2.setVisible(true); + glWindow1.setVisible(true); + + glWindow2.display(); + glWindow1.display(); - int x = window1.getX(); - int y = window1.getY(); - long duration = 2000; + long duration = durationPerTest; long step = 20; - while (duration>0) { - // glWindow1.display(); + KeyEvent keyEvent; + boolean shouldQuit = false; + + while (duration>0 && !shouldQuit) { + while( null != ( keyEvent = (KeyEvent) eventFifo.get() ) ) { + Window source = (Window) keyEvent.getSource(); + switch(keyEvent.getKeyChar()) { + case 'q': + System.out.println(keyEvent); + shouldQuit = true; + break; + case 'f': + System.out.println(keyEvent); + source.setFullscreen(!source.isFullscreen()); + break; + } + } + + glWindow1.display(); glWindow2.display(); Thread.sleep(step); // 1000 ms duration -= step; - x += 10; - y += 10; - // window1.setPosition(x,y); + x += 1; + y += 1; + window1.setPosition(x,y); + window2.setPosition(window1.getWidth()/2,window1.getHeight()/2-y); } destroyWindow(null, null, window2, glWindow2); - destroyWindow(display, screen, window1, null); + destroyWindow(display, screen, window1, glWindow1); } public static void setDemoFields(GLEventListener demo, Window window, GLWindow glWindow, boolean debug) { @@ -176,6 +213,7 @@ public class TestParenting01NEWT { } public static void main(String args[]) throws IOException { + durationPerTest = 5000; String tstname = TestParenting01NEWT.class.getName(); org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(new String[] { tstname, |