org.freehep.graphicsio.emf.EMFPanel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of freehep-graphicsio-emf Show documentation
Show all versions of freehep-graphicsio-emf Show documentation
FreeHEP Enhanced Metafile Format Driver
The newest version!
// Copyright 2007 FreeHEP
package org.freehep.graphicsio.emf;
import javax.swing.JComponent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
/**
* simple panel which displays an EMF image using the {@link EMFRenderer}
*
* @author Steffen Greiffenberg
* @version $id$
*/
public class EMFPanel extends JComponent {
/**
* factor used for zoom in an out
*/
private static double SCALE_FACTOR = 2;
/**
* renders an EMF image to a Graphics2D instance
*/
private EMFRenderer renderer;
/**
* used for zooming
*/
private double scale = 1;
/**
* defines a white background
*/
public EMFPanel() {
setBackground(Color.white);
}
/**
* sets the renderer an resets size
* @param renderer EMFRenderer to display
*/
public void setRenderer(EMFRenderer renderer) {
this.renderer = renderer;
scale = 1;
setSize(getPreferredSize());
}
/**
* @return {@link EMFRenderer#getSize()} for the renderer
*/
public Dimension getPreferredSize() {
if (renderer == null) {
return new Dimension(0, 0);
}
Dimension bounds = renderer.getSize();
return new Dimension(
(int)Math.ceil(bounds.width * scale),
(int)Math.ceil(bounds.height * scale));
}
/**
* paints using the renderer
* @param g Context of the component
*/
public void paintComponent(Graphics g) {
Graphics2D g2 = ((Graphics2D)g);
super.paintComponent(g2);
if (renderer == null) {
return;
}
// to restore AffineTransform
AffineTransform at = g2.getTransform();
// apply the scale factor
g2.scale(scale, scale);
// render the emf
renderer.paint(g2);
// rest the AffineTransform
g2.setTransform(at);
}
/**
* scale = scale * 2
*/
public void zoomIn() {
scale = scale * SCALE_FACTOR;
setSize(getPreferredSize());
repaint();
}
/**
* scale = scale / 2;
*/
public void zoomOut() {
scale = scale / SCALE_FACTOR;
setSize(getPreferredSize());
repaint();
}
}