blob: 7263772739cdcf80fc488d1643d5dfee99b7beb4 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.diagram.ui.render.editparts;
import java.util.List;
import java.util.ListIterator;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Layer;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gmf.runtime.common.ui.util.DisplayUtils;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramRootEditPart;
import org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.MapModeGraphics;
import org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScaledGraphics;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.IMapMode;
import org.eclipse.gmf.runtime.draw2d.ui.render.figures.ScalableImageFigure;
import org.eclipse.gmf.runtime.draw2d.ui.render.internal.graphics.RenderedMapModeGraphics;
import org.eclipse.gmf.runtime.draw2d.ui.render.internal.graphics.RenderedScaledGraphics;
import org.eclipse.gmf.runtime.gef.ui.internal.editparts.AnimatedZoomListener;
import org.eclipse.gmf.runtime.notation.MeasurementUnit;
import org.eclipse.swt.widgets.Display;
/**
* A specialized <code>DiagramRootEditPart</code> that supports rendering of
* images.
*
* @author cmahoney
*/
public class RenderedDiagramRootEditPart
extends DiagramRootEditPart {
/**
* Default constructor
*/
public RenderedDiagramRootEditPart() {
super();
}
/**
* @param mu the <code>MeasurementUnit</code> that is the native coordinate system
* for this root edit part.
*/
public RenderedDiagramRootEditPart(MeasurementUnit mu) {
super(mu);
}
static protected class DiagramRenderedScalableFreeformLayeredPane
extends DiagramScalableFreeformLayeredPane implements AnimatedZoomListener {
@SuppressWarnings("unused")
private boolean animatedZoomOn;
static final private Dimension MAX_RENDER_SIZE;
static {
Display display = DisplayUtils.getDisplay();
MAX_RENDER_SIZE = new Dimension(display.getBounds().width, display
.getBounds().height);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScalableFreeformLayeredPane#createScaledGraphics(org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.MapModeGraphics)
*/
protected ScaledGraphics createScaledGraphics(MapModeGraphics gMM) {
// if (animatedZoomOn) {
// return new RenderedScaledGraphics(gMM);
// }
return new RenderedScaledGraphics(gMM, true, MAX_RENDER_SIZE);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.draw2d.ui.internal.graphics.ScalableFreeformLayeredPane#createMapModeGraphics(org.eclipse.draw2d.Graphics)
*/
protected MapModeGraphics createMapModeGraphics(Graphics graphics) {
MapModeGraphics gMM = new RenderedMapModeGraphics(graphics, getMapMode(), true, MAX_RENDER_SIZE);
return gMM;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.gef.ui.internal.editparts.AnimatedZoomListener#animatedZoomEnded()
*/
public void animatedZoomEnded() {
animatedZoomOn = false;
// only repaint ScalableImageFigures
Layer primaryLayer = getLayer(PRINTABLE_LAYERS);
if (primaryLayer != null)
paintScalableImageFigures(primaryLayer.getChildren());
}
private void paintScalableImageFigures(List figures) {
ListIterator iter = figures.listIterator();
Rectangle absbounds = getBounds().getCopy();
translateToAbsolute(absbounds);
while (iter.hasNext()) {
IFigure fig = (IFigure)iter.next();
if (fig instanceof ScalableImageFigure) {
Rectangle absfigbounds = fig.getBounds().getCopy();
fig.translateToAbsolute(absfigbounds);
if (absbounds.intersects(absfigbounds))
fig.repaint();
}
else {
paintScalableImageFigures(fig.getChildren());
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gmf.runtime.gef.ui.internal.editparts.AnimatedZoomListener#animatedZoomStarted()
*/
public void animatedZoomStarted() {
animatedZoomOn = true;
}
public DiagramRenderedScalableFreeformLayeredPane(IMapMode mm) {
super(mm);
}
}
/**
* Creates a scalable freeform layered pane that supports rendering of
* images.
*/
protected org.eclipse.draw2d.ScalableFreeformLayeredPane createScalableFreeformLayeredPane() {
setLayers(new DiagramRenderedScalableFreeformLayeredPane(getMapMode()));
return getLayers();
}
}