Author: kono
Date: 2012-05-02 18:58:04 -0700 (Wed, 02 May 2012)
New Revision: 29089
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/BirdsEyeView.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
Log:
fixes #926 Refactored image update mechanism to avoid unnecessary image
creation.
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/BirdsEyeView.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/BirdsEyeView.java
2012-05-03 00:16:21 UTC (rev 29088)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/BirdsEyeView.java
2012-05-03 01:58:04 UTC (rev 29089)
@@ -61,15 +61,13 @@
import org.cytoscape.view.model.View;
import org.cytoscape.view.model.VisualLexicon;
import org.cytoscape.view.model.VisualProperty;
-import org.cytoscape.view.model.events.UpdateNetworkPresentationEvent;
-import org.cytoscape.view.model.events.UpdateNetworkPresentationListener;
import org.cytoscape.view.presentation.RenderingEngine;
/**
* Swing component to display overview of the network.
*
*/
-public class BirdsEyeView extends Component implements
RenderingEngine<CyNetwork>, UpdateNetworkPresentationListener {
+public final class BirdsEyeView extends Component implements
RenderingEngine<CyNetwork> {
private final static long serialVersionUID = 1202416511863994L;
@@ -80,7 +78,7 @@
private static final Stroke VIEW_WINDOW_BORDER_STROKE = new
BasicStroke(2);
// Ratio of the graph image to panel size
- private static final double SCALE_FACTOR = 0.92;
+ private static final double SCALE_FACTOR = 0.96;
private final double[] m_extents = new double[4];
@@ -90,9 +88,11 @@
private final ContentChangeListener m_cLis;
private final ViewportChangeListener m_vLis;
- private Image networkImage = null;
+ private Image networkImage;
- private boolean m_contentChanged = false;
+ private boolean imageUpdated;
+ private boolean boundChanged;
+
private double m_myXCenter;
private double m_myYCenter;
private double m_myScaleFactor;
@@ -103,15 +103,15 @@
private double m_viewXCenter;
private double m_viewYCenter;
private double m_viewScaleFactor;
+
+ private int imageWidth;
+ private int imageHeight;
/**
* Creates a new BirdsEyeView object.
*
* @param viewModel
* The view to monitor
- * @param container
- * The desktop area holding the view. This should be
- * NetworkViewManager.getDesktopPane().
*/
public BirdsEyeView(final DGraphView viewModel) {
super();
@@ -129,12 +129,11 @@
setPreferredSize(MIN_SIZE);
setMinimumSize(MIN_SIZE);
- setView(viewModel);
+ initializeView(viewModel);
}
- private void setView(final GraphView view) {
-
+ private void initializeView(final GraphView view) {
viewModel.addContentChangeListener(m_cLis);
viewModel.addViewportChangeListener(m_vLis);
@@ -142,9 +141,16 @@
final Point2D pt = viewModel.getCenter();
m_viewXCenter = pt.getX();
m_viewYCenter = pt.getY();
+
m_viewScaleFactor = viewModel.getZoom();
- m_contentChanged = true;
-
+
+ // Create default empty graphics object
+ networkImage = new BufferedImage(MIN_SIZE.width,
MIN_SIZE.height, BufferedImage.TYPE_INT_ARGB);
+ imageWidth = MIN_SIZE.width;
+ imageHeight = MIN_SIZE.height;
+
+ boundChanged = true;
+ imageUpdated = true;
repaint();
}
@@ -152,11 +158,10 @@
final Rectangle2D viewable = getViewableRect();
m_viewWidth = (int) viewable.getWidth();
m_viewHeight = (int) viewable.getHeight();
-
+
final Rectangle2D viewableInView =
getViewableRectInView(viewable);
m_viewXCenter = viewableInView.getX() +
viewableInView.getWidth() / 2.0;
- m_viewYCenter = viewableInView.getY() +
viewableInView.getHeight()
- / 2.0;
+ m_viewYCenter = viewableInView.getY() +
viewableInView.getHeight() / 2.0;
}
private Rectangle2D getViewableRect() {
@@ -176,8 +181,7 @@
destination[1] = viewable.getY() + viewable.getHeight();
viewModel.xformComponentToNodeCoords(destination);
- return new Rectangle2D.Double(origin[0], origin[1],
- destination[0] - origin[0], destination[1] -
origin[1]);
+ return new Rectangle2D.Double(origin[0], origin[1],
destination[0] - origin[0], destination[1] - origin[1]);
}
/**
@@ -189,14 +193,16 @@
* @param width
* @param height
*/
- @Override public void setBounds(int x, int y, int width, int height) {
+ @Override
+ public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, height);
- if ((width > 0) && (height > 0))
- networkImage = new BufferedImage(width, height,
- BufferedImage.TYPE_INT_ARGB);
-
- m_contentChanged = true;
+ if(imageWidth != width || imageHeight != height) {
+ imageWidth = width;
+ imageHeight = height;
+ imageUpdated = true;
+ }
+ boundChanged = true;
}
@@ -209,7 +215,7 @@
updateBounds();
- if (m_contentChanged) {
+ if (imageUpdated || boundChanged) {
if (viewModel.getExtents(m_extents)) {
m_myXCenter = (m_extents[0] + m_extents[2]) /
2.0d;
m_myYCenter = (m_extents[1] + m_extents[3]) /
2.0d;
@@ -222,10 +228,13 @@
m_myScaleFactor = 1.0d;
}
- viewModel.drawSnapshot(networkImage,
viewModel.getGraphLOD(),
- viewModel.getBackgroundPaint(),
m_myXCenter, m_myYCenter,
- m_myScaleFactor);
- m_contentChanged = false;
+ // Create "background" network image.
+ if (imageUpdated) {
+ // Need to create new image. This is VERY
expensive operation.
+ networkImage = new BufferedImage(imageWidth,
imageHeight, BufferedImage.TYPE_INT_ARGB);
+ viewModel.drawSnapshot(networkImage,
viewModel.getGraphLOD(), viewModel.getBackgroundPaint(),
+ m_myXCenter, m_myYCenter,
m_myScaleFactor);
+ }
}
// Render network graphics.
@@ -250,6 +259,9 @@
g2.fill(viewArea);
g2.setColor(VIEW_WINDOW_BORDER_COLOR);
g2.draw(viewArea);
+
+ boundChanged = false;
+ imageUpdated = false;
}
@@ -257,23 +269,27 @@
update(g);
}
- private final class InnerContentChangeListener implements
- ContentChangeListener {
+ private final class InnerContentChangeListener implements
ContentChangeListener {
+ /**
+ * Will be called when something is changed in the main view.
+ */
public void contentChanged() {
- m_contentChanged = true;
+ imageUpdated = true;
repaint();
}
}
- private final class InnerViewportChangeListener implements
- ViewportChangeListener {
- public void viewportChanged(int w, int h, double newXCenter,
- double newYCenter, double newScaleFactor) {
+ private final class InnerViewportChangeListener implements
ViewportChangeListener {
+
+ /**
+ * Update the view if panned.
+ */
+ public void viewportChanged(int w, int h, double newXCenter,
double newYCenter, double newScaleFactor) {
m_viewWidth = w;
m_viewHeight = h;
m_viewXCenter = newXCenter;
m_viewYCenter = newYCenter;
- m_viewScaleFactor = newScaleFactor;
+ m_viewScaleFactor = newScaleFactor;
repaint();
}
}
@@ -353,14 +369,8 @@
return viewModel.createIcon(vp, value, width, height);
}
-
@Override
public void printCanvas(Graphics printCanvas) {
throw new UnsupportedOperationException("Printing is not
supported for Bird's eye view.");
}
-
- @Override
- public void handleEvent(UpdateNetworkPresentationEvent e) {
- //System.out.println("#### Got redraw event for BEV");
- }
}
\ No newline at end of file
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
2012-05-03 00:16:21 UTC (rev 29088)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DGraphView.java
2012-05-03 01:58:04 UTC (rev 29089)
@@ -122,7 +122,6 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.View;
import org.cytoscape.view.model.VisualLexicon;
-import org.cytoscape.view.model.VisualLexiconNode;
import org.cytoscape.view.model.VisualProperty;
import org.cytoscape.view.model.events.AddedEdgeViewsEvent;
import org.cytoscape.view.model.events.AddedNodeViewsEvent;
--
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.