package magic.ui.widget.duel.animation;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import magic.ui.helpers.ImageHelper;
class ImageScaler {
private static final int MIN_SCALE_HEIGHT = 20;
private final BufferedImage origImage;
private BufferedImage scaledImage;
private boolean isHighQuality = false;
ImageScaler(final BufferedImage aImage) {
this.origImage = aImage;
this.scaledImage = aImage;
}
void setScaledImage(final Dimension rect) {
// fit to rect whilst retaining aspect ratio.
final double widthRatio = rect.getWidth() / origImage.getWidth();
final double heightRatio = rect.getHeight() / origImage.getHeight();
final double aspectRatio = Math.min(widthRatio, heightRatio);
scaledImage = ImageHelper.scale(
origImage,
(int) (origImage.getWidth() * aspectRatio),
(int) (origImage.getHeight() * aspectRatio),
isHighQuality
? RenderingHints.VALUE_INTERPOLATION_BILINEAR
: RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR,
isHighQuality
);
}
void setLQSize(Dimension rect) {
if (rect.height > MIN_SCALE_HEIGHT && rect.height != scaledImage.getHeight()) {
isHighQuality = false;
setScaledImage(rect);
}
}
private void setHQSize(Dimension rect) {
if (rect.height > MIN_SCALE_HEIGHT && (rect.height != scaledImage.getHeight() || !isHighQuality)) {
isHighQuality = true;
setScaledImage(rect);
}
}
void setSize(Dimension boundary, boolean highQualityScale) {
if (highQualityScale) {
setHQSize(boundary);
} else {
setLQSize(boundary);
}
}
Image getImage() {
return scaledImage;
}
}