/* * Copyright (C) 2010-2016 JPEXS * * 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 3 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, see <http://www.gnu.org/licenses/>. */ package com.jpexs.decompiler.flash.gui; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; import javax.swing.Icon; import org.pushingpixels.flamingo.internal.utils.FlamingoUtilities; /** * * @author JPEXS */ public class MyResizableIcon implements Icon { protected BufferedImage originalImage; protected Map<String, BufferedImage> cachedImages = new HashMap<>(); public MyResizableIcon(BufferedImage originalImage) { this.originalImage = originalImage; width = originalImage.getWidth(); height = originalImage.getHeight(); } protected int width; protected int height; protected BufferedImage image; public void setDimension(Dimension dim) { setIconSize(dim.width, dim.height); } public void setIconSize(int renderWidth, int renderHeight) { width = renderWidth; height = renderHeight; String key = renderWidth + ":" + renderHeight; if (this.cachedImages.containsKey(key)) { image = this.cachedImages.get(key); return; } BufferedImage result = originalImage; float scaleX = (float) originalImage.getWidth() / (float) renderWidth; float scaleY = (float) originalImage.getHeight() / (float) renderHeight; float scale = Math.max(scaleX, scaleY); if (scale > 1.0f) { int finalWidth = (int) (originalImage.getWidth() / scale); result = FlamingoUtilities.createThumbnail(originalImage, finalWidth); } cachedImages.put(renderWidth + ":" + renderHeight, result); image = result; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { if (image != null) { int dx = (this.width - image.getWidth()) / 2; int dy = (this.height - image.getHeight()) / 2; g.drawImage(image, x + dx, y + dy, null); } } @Override public int getIconWidth() { return width; } @Override public int getIconHeight() { return height; } }