Author: paperwing
Date: 2012-03-26 16:26:20 -0700 (Mon, 26 Mar 2012)
New Revision: 28657
Added:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/AnimatorController.java
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngine.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/GeometryToolkit.java
Log:
fixes #826 Renderer now pauses rendering unless a keyboard button or a mouse
button is held down with respect to the current network window, to conserve
CPU/GPU and power.
Added:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/AnimatorController.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/AnimatorController.java
(rev 0)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/AnimatorController.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -0,0 +1,135 @@
+package org.cytoscape.paperwing.internal;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.media.opengl.GLAnimatorControl;
+import javax.media.opengl.GLAutoDrawable;
+import javax.media.opengl.GLEventListener;
+import javax.swing.SwingUtilities;
+
+import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
+
+public class AnimatorController implements KeyListener, MouseListener,
MouseMotionListener, MouseWheelListener {
+
+ private Set<Integer> keysDown;
+ private Set<Integer> mouseKeysDown;
+
+ private GLAnimatorControl animatorControl;
+ private ViewingCoordinator coordinator;
+
+ private boolean mouseInRegion = false;
+
+ public AnimatorController(final GLAnimatorControl animatorControl) {
+ this.animatorControl = animatorControl;
+ coordinator = null;
+
+ keysDown = new HashSet<Integer>();
+ mouseKeysDown = new HashSet<Integer>();
+ }
+
+ public boolean hasKeysDown() {
+ return (keysDown.size() != 0 || mouseKeysDown.size() != 0);
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent event) {
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent event) {
+ mouseInRegion = true;
+ }
+
+ @Override
+ public void mouseExited(MouseEvent event) {
+ mouseInRegion = false;
+ }
+
+ @Override
+ public void mousePressed(MouseEvent event) {
+ mouseKeysDown.add(event.getButton());
+
+ if (!animatorControl.isAnimating()) {
+ startAnimator();
+ }
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent event) {
+ mouseKeysDown.remove(event.getButton());
+
+ if (keysDown.isEmpty()) {
+ stopAnimator();
+ }
+ }
+
+ @Override
+ public void keyPressed(KeyEvent event) {
+ keysDown.add(event.getKeyCode());
+
+ if (!animatorControl.isAnimating()) {
+ startAnimator();
+ }
+ }
+
+ @Override
+ public void keyReleased(KeyEvent event) {
+ keysDown.remove(event.getKeyCode());
+
+ if (keysDown.isEmpty()) {
+ stopAnimator();
+ }
+ }
+
+ @Override
+ public void keyTyped(KeyEvent event) {
+ }
+
+ @Override
+ public void mouseWheelMoved(MouseWheelEvent arg0) {
+ startAnimator();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent arg0) {
+ startAnimator();
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent arg0) {
+ startAnimator();
+ }
+
+ public void setCoordinator(ViewingCoordinator coordinator) {
+ this.coordinator = coordinator;
+ }
+
+ public ViewingCoordinator getCoordinator() {
+ return coordinator;
+ }
+
+ private void startAnimator() {
+ animatorControl.start();
+
+ if (coordinator.isBirdsEyeClaimed() &&
coordinator.getBirdsEyeAnimatorControl() != null) {
+ coordinator.getBirdsEyeAnimatorControl().start();
+ }
+ }
+
+ private void stopAnimator() {
+ animatorControl.stop();
+
+ if (coordinator.isBirdsEyeClaimed() &&
coordinator.getBirdsEyeAnimatorControl() != null) {
+ coordinator.getBirdsEyeAnimatorControl().stop();
+ }
+ }
+
+}
Property changes on:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/AnimatorController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/Graphics.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -7,13 +7,17 @@
package org.cytoscape.paperwing.internal;
import java.awt.Component;
+import java.awt.Container;
import java.nio.FloatBuffer;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
+import javax.media.opengl.GLAnimatorControl;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.glu.GLU;
+import javax.swing.JInternalFrame;
+
import com.jogamp.opengl.util.Animator;
import com.jogamp.opengl.util.FPSAnimator;
@@ -130,6 +134,10 @@
graphicsData.setContainer(component);
}
+ public void setAnimatorControl(GLAnimatorControl animatorControl) {
+ graphicsData.setAnimatorControl(animatorControl);
+ }
+
/**
* Set the {@link TaskFactoryListener} object used to obtain the list
of current task factories.
* @param listener
@@ -184,6 +192,18 @@
graphicsData.setFramesElapsed(graphicsData.getFramesElapsed() +
1);
graphicsData.getFrameRateTracker().advanceFrame();
+
+ // Pause rendering unless a keyboard or mouse button is held
down to conserve CPU/GPU/power resources
+ if (handler instanceof MainGraphicsHandler) {
+ if
(!graphicsData.getAnimatorController().hasKeysDown()) {
+ graphicsData.getAnimatorControl().stop();
+ }
+ } else if (handler instanceof BirdsEyeGraphicsHandler) {
+ if (coordinator.getMainAnimatorController() != null &&
!coordinator.getMainAnimatorController().hasKeysDown()) {
+ graphicsData.getAnimatorControl().stop();
+ }
+ }
+
}
@Override
@@ -221,12 +241,26 @@
graphicsData.setStartTime(System.nanoTime());
graphicsData.setGlContext(gl);
- graphicsData.setAnimatorControl(drawable.getAnimator());
handler.initializeGraphicsProcedures(graphicsData);
handler.setupLighting(graphicsData);
shapePickingProcessor.initialize(graphicsData);
+
+ if (handler instanceof MainGraphicsHandler) {
+
+ // Add an AnimatorController as a listener that keeps
the animator running only when at least 1 button is pressed
+ AnimatorController controller = new
AnimatorController(graphicsData.getAnimatorControl());
+ controller.setCoordinator(coordinator);
+
+ Component component = graphicsData.getContainer();
+ component.addKeyListener(controller);
+ component.addMouseListener(controller);
+ component.addMouseMotionListener(controller);
+ component.addMouseWheelListener(controller);
+
+ graphicsData.setAnimatorController(controller);
+ }
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindBirdsEyeRenderingEngine.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -10,6 +10,7 @@
import java.awt.print.Printable;
import java.util.Properties;
+import javax.media.opengl.GLAnimatorControl;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLJPanel;
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindMainRenderingEngine.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -8,6 +8,7 @@
import java.awt.print.Printable;
import java.util.Properties;
+import javax.media.opengl.GLAnimatorControl;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLJPanel;
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngine.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngine.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/WindRenderingEngine.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -12,6 +12,7 @@
import java.awt.print.Printable;
import java.util.Properties;
+import javax.media.opengl.GLAnimatorControl;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
import javax.media.opengl.GLProfile.ShutdownType;
@@ -148,6 +149,7 @@
animator.start();
addStopAnimatorListener(component);
+ graphics.setAnimatorControl(animator);
active = true;
}
@@ -163,7 +165,7 @@
// Adds a listener to the component containing the GLJPanel to stop the
animator
// if the GLJPanel is about to be removed
private void addStopAnimatorListener(JComponent container) {
- container.addContainerListener(new ContainerListener(){
+ container.addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent event) {
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/BirdsEyeCoordinatorProcessor.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -20,6 +20,8 @@
public void extractData(ViewingCoordinator coordinator,
GraphicsData graphicsData) {
+
coordinator.setBirdsEyeAnimatorControl(graphicsData.getAnimatorControl());
+
if (coordinator.isMainClaimed()) {
CoordinatorData coordinatorData =
graphicsData.getCoordinatorData();
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/MainCoordinatorProcessor.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -19,6 +19,8 @@
public void extractData(ViewingCoordinator coordinator,
GraphicsData graphicsData) {
+
coordinator.setMainAnimatorController(graphicsData.getAnimatorController());
+
if (coordinator.isBirdsEyeClaimed()) {
SimpleCamera camera = graphicsData.getCamera();
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/coordinator/ViewingCoordinator.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -5,7 +5,9 @@
import java.util.jar.Manifest;
import javax.media.opengl.GLAnimatorControl;
+import javax.swing.SwingUtilities;
+import org.cytoscape.paperwing.internal.AnimatorController;
import org.cytoscape.paperwing.internal.cytoscape.edges.EdgeAnalyser;
import org.cytoscape.paperwing.internal.geometric.Quadrilateral;
import org.cytoscape.paperwing.internal.geometric.Vector3;
@@ -49,7 +51,8 @@
private EdgeAnalyser mainEdgeAnalyser = null;
- private GLAnimatorControl birdsEyeAnimatorControl = null;
+ private GLAnimatorControl birdsEyeAnimatorControl;
+ private AnimatorController mainAnimatorController;
// Claiming: Means whether a Graphics object has claimed ownership of
this coordinator by obtaining a reference to it.
// Linking: Whether or not that Graphics object wishes to retain the
reference to the coordinator, useful for garbage collection
@@ -307,4 +310,12 @@
public GLAnimatorControl getBirdsEyeAnimatorControl() {
return birdsEyeAnimatorControl;
}
+
+ public void setMainAnimatorController(AnimatorController
mainAnimatorController) {
+ this.mainAnimatorController = mainAnimatorController;
+ }
+
+ public AnimatorController getMainAnimatorController() {
+ return mainAnimatorController;
+ }
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/data/GraphicsData.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -9,6 +9,7 @@
import javax.media.opengl.GLAnimatorControl;
import javax.media.opengl.glu.GLU;
+import org.cytoscape.paperwing.internal.AnimatorController;
import org.cytoscape.paperwing.internal.Graphics;
import org.cytoscape.paperwing.internal.coordinator.ViewingCoordinator;
import org.cytoscape.paperwing.internal.cytoscape.edges.EdgeAnalyser;
@@ -104,6 +105,8 @@
/** The {@link GLAnimatorControl} object used to control the animator
which automatically makes calls to redraw the scene */
private GLAnimatorControl animatorControl;
+ private AnimatorController animatorController;
+
/**
* A {@link GraphicsSelectionData} object which is responsible for
* storing all data related to selection of objects in the network, such
@@ -377,4 +380,12 @@
public GLAnimatorControl getAnimatorControl() {
return animatorControl;
}
+
+ public void setAnimatorController(AnimatorController
animatorController) {
+ this.animatorController = animatorController;
+ }
+
+ public AnimatorController getAnimatorController() {
+ return animatorController;
+ }
}
Modified:
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/GeometryToolkit.java
===================================================================
---
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/GeometryToolkit.java
2012-03-26 23:25:33 UTC (rev 28656)
+++
csplugins/trunk/toronto/yuedong/paperwing-impl/src/main/java/org/cytoscape/paperwing/internal/tools/GeometryToolkit.java
2012-03-26 23:26:20 UTC (rev 28657)
@@ -97,7 +97,7 @@
Vector3 yOffset = cameraUp.copy();
yOffset.multiplyLocal(planeDistance * Math.tan(verticalFov /
360.0 * Math.PI));
- System.out.println("yOffset: " + yOffset);
+
Vector3 xOffset = cameraDirection.copy(); // xOffset will be
the camera's right vector
xOffset.crossLocal(cameraUp);
xOffset.multiplyLocal(yOffset.magnitude() * aspectRatio); //
aspect = width / length
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.