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.

Reply via email to