/*FreeMindget - A Program for creating and viewing Mindmaps
*Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com>
*See COPYING for Details
*
*This program is free software; you can redistribute it and/or
*modify it under the terms of the GNU General Public License
*as published by the Free Software Foundation; either version 2
*of the License, or (at your option) any later version.
*
*This program is distributed in the hope that it will be useful,
*but WITHOUT ANY WARRANTY; without even the implied warranty of
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*GNU General Public License for more details.
*
*You should have received a copy of the GNU General Public License
*along with this program; if not, write to the Free Software
*Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*$Id: MultipleImage.java,v 1.1.18.2 2006/03/14 21:56:28 christianfoltin Exp $*/
package freemind.view.mindmapview;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.ImageIcon;
public class MultipleImage extends ImageIcon {
private Vector mImages = new Vector();
private double zoomFactor = 1;
private boolean isDirty;
public MultipleImage(double zoom) {
zoomFactor = zoom;
isDirty = true;
};
public int getImageCount() {
return mImages.size();
};
public void addImage(ImageIcon image) {
mImages.add(image);
setImage(image.getImage());
isDirty = true;
};
public Image getImage() {
if (!isDirty)
return super.getImage();
int w = getIconWidth();
int h = getIconHeight();
if (w == 0 || h == 0) {
return null;
}
BufferedImage outImage = new BufferedImage(w, h,
BufferedImage.TYPE_INT_ARGB);
Graphics2D g = outImage.createGraphics();
double myX = 0;
for (Iterator i = mImages.iterator(); i.hasNext();) {
ImageIcon currentIcon = (ImageIcon) i.next();
// py = /* center: */ ( myHeight -
// (int)(currentIcon.getIconHeight()* zoomFactor)) /2;
// int pheight = (int) (currentIcon.getIconHeight() * zoomFactor);
double pwidth = (currentIcon.getIconWidth() * zoomFactor);
AffineTransform inttrans = AffineTransform.getScaleInstance(
zoomFactor, zoomFactor);
g.drawImage(currentIcon.getImage(), inttrans, null);
g.translate(pwidth, 0);
myX += pwidth;
}
g.dispose();
setImage(outImage);
isDirty = false;
return super.getImage();
}
public void paintIcon(Component c, Graphics g, int x, int y) {
if (getImage() != null) {
super.paintIcon(c, g, x, y);
}
}
// public void paintIcon(Component c,
// Graphics g,
// int x,
// int y)
// {
// int myX = x;
// int myHeight = getIconHeight();
// for(int i = 0 ; i < mImages.size(); i++) {
// ImageIcon currentIcon = ((ImageIcon) mImages.get(i));
// int px,py,pwidth, pheight;
// px = myX;
// py = y /* center: */ + ( myHeight - (int)(currentIcon.getIconHeight()*
// zoomFactor)) /2;
// pwidth = (int) (currentIcon.getIconWidth() * zoomFactor);
// pheight = (int) (currentIcon.getIconHeight() * zoomFactor);
// /* code from ImageIcon.*/
// if(currentIcon.getImageObserver() == null) {
// g.drawImage(currentIcon.getImage(), px, py, pwidth, pheight, c);
// } else {
// g.drawImage(currentIcon.getImage(), px, py, pwidth, pheight,
// currentIcon.getImageObserver());
// }
// /* end code*/
// myX += pwidth;
// }
// };
public int getIconWidth() {
int myX = 0;
for (int i = 0; i < mImages.size(); i++) {
myX += ((ImageIcon) mImages.get(i)).getIconWidth();
}
// System.out.println("width: "+myX);
return (int) (myX * zoomFactor);
}
public int getIconHeight() {
int myY = 0;
for (int i = 0; i < mImages.size(); i++) {
int otherHeight = ((ImageIcon) mImages.get(i)).getIconHeight();
if (otherHeight > myY)
myY = otherHeight;
}
// System.out.println("height: "+myY);
return (int) (myY * zoomFactor);
}
};