package org.xmind.ui.internal.svgsupport; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.jface.resource.ResourceManager; import org.xmind.gef.draw2d.ReferencedFigure; /** * * @author Enki Xiong * */ public class SVGImageFigure extends ReferencedFigure { private static final Rectangle IMAGE_CLIENT_AREA = new Rectangle(); private static final int FLAG_STRETCHED = MAX_FLAG << 1; private static final int FLAG_CONSTRAINED = MAX_FLAG << 2; static { MAX_FLAG = FLAG_CONSTRAINED; } private SVGImageData svgData = null; private Dimension imgSize = null; private int alpha = -1; private ResourceManager manager; public SVGImageFigure() { this(null); } public SVGImageFigure(SVGImageData svgData) { setSVGData(svgData); } public void setSVGData(SVGImageData svgData) { if (this.svgData == svgData) return; this.svgData = svgData; setMinimumSize(new Dimension(1, 1)); revalidate(); repaint(); } public Dimension getImageSize() { if (imgSize == null) { if (svgData != null) { imgSize = new Dimension(svgData.getSize()); } else imgSize = new Dimension(); } return imgSize; } public boolean isConstrained() { return getFlag(FLAG_CONSTRAINED); } public void setConstrained(boolean constrained) { if (constrained == isConstrained()) return; setFlag(FLAG_CONSTRAINED, constrained); repaint(); } public boolean isStretched() { return getFlag(FLAG_STRETCHED); } public void setStretched(boolean stretched) { if (stretched == isStretched()) return; setFlag(FLAG_STRETCHED, stretched); repaint(); } public SVGImageData getSVGData() { return svgData; } public int getAlpha() { return alpha; } public void setAlpha(int alpha) { if (this.alpha == alpha) return; this.alpha = alpha; repaint(); } @Override public Dimension getPreferredSize(int wHint, int hHint) { if (prefSize != null) return prefSize; if (getLayoutManager() != null) { Dimension d = getLayoutManager().getPreferredSize(this, wHint, hHint); if (d != null) return d; } return svgData.getSize(); } /** * @see org.eclipse.draw2d.Figure#paintFigure(Graphics) */ protected void paintFigure(final Graphics graphics) { super.paintFigure(graphics); SVGImageData svgData = getSVGData(); if (svgData != null) svgData.paintFigure(graphics, getClientArea(IMAGE_CLIENT_AREA), manager); } public ResourceManager getManager() { return manager; } public void setManager(ResourceManager manager) { this.manager = manager; } }