/*
JWildfire - an image and animation processor written in Java
Copyright (C) 1995-2015 Andreas Maschke
This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
General Public License as published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This software 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this software;
if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jwildfire.create.tina.swing;
import javax.swing.JCheckBox;
import org.jwildfire.base.Prefs;
import org.jwildfire.create.tina.base.Flame;
import org.jwildfire.create.tina.render.FlameRenderer;
import org.jwildfire.create.tina.render.RenderInfo;
import org.jwildfire.create.tina.render.RenderMode;
import org.jwildfire.create.tina.render.RenderedFlame;
import org.jwildfire.image.SimpleImage;
import org.jwildfire.swing.ImagePanel;
public class FlameThumbnail {
public static final int IMG_WIDTH = 90;
public static final int IMG_HEIGHT = 68;
public static final int BORDER_SIZE = 8;
private Flame flame;
private SimpleImage preview;
private ImagePanel imgPanel;
private JCheckBox selectCheckbox;
private final ThumbnailCacheKey cacheKey;
public FlameThumbnail(Flame pFlame, SimpleImage pPreview, ThumbnailCacheKey pCacheKey) {
cacheKey = pCacheKey;
flame = pFlame;
preview = pPreview;
}
private void generatePreview(int pQuality) {
if (cacheKey != null) {
preview = ThumbnailCacheProvider.getThumbnail(cacheKey, IMG_WIDTH, IMG_HEIGHT, pQuality);
if (preview != null) {
return;
}
}
Prefs prefs = Prefs.getPrefs();
RenderInfo info = new RenderInfo(IMG_WIDTH, IMG_HEIGHT, RenderMode.PREVIEW);
Flame renderFlame = flame.makeCopy();
double wScl = (double) info.getImageWidth() / (double) renderFlame.getWidth();
double hScl = (double) info.getImageHeight() / (double) renderFlame.getHeight();
renderFlame.setPixelsPerUnit((wScl + hScl) * 0.5 * renderFlame.getPixelsPerUnit());
renderFlame.setWidth(IMG_WIDTH);
renderFlame.setHeight(IMG_HEIGHT);
renderFlame.setSampleDensity(prefs.getTinaRenderPreviewQuality());
renderFlame.setSpatialFilterRadius(0.0);
FlameRenderer renderer = new FlameRenderer(renderFlame, prefs, false, false);
renderFlame.setSampleDensity(pQuality);
RenderedFlame res = renderer.renderFlame(info);
preview = res.getImage();
if (cacheKey != null) {
ThumbnailCacheProvider.storeThumbnail(cacheKey, IMG_WIDTH, IMG_HEIGHT, pQuality, preview);
}
}
public SimpleImage getPreview(int pQuality) {
if (preview == null) {
generatePreview(pQuality);
}
return preview;
}
public Flame getFlame() {
return flame;
}
public ImagePanel getImgPanel() {
return imgPanel;
}
public void setImgPanel(ImagePanel imgPanel) {
this.imgPanel = imgPanel;
}
public void setPreview(SimpleImage pPreview) {
preview = pPreview;
}
public void setSelectCheckbox(JCheckBox checkbox) {
selectCheckbox = checkbox;
}
public JCheckBox getSelectCheckbox() {
return selectCheckbox;
}
}