package org.typowriter.intellij.plugins.backgroundchibichara;
import javax.swing.border.Border;
import java.awt.*;
import java.util.List;
public class BackgroundImageBorder implements Border {
private final java.util.List<Image> imageList;
private final double alpha;
private final int spacing;
private final int margin;
private final Align align;
BackgroundImageBorder(List<Image> imageList, Align align, int spacing, int margin, double alpha) {
this.imageList = imageList;
this.alpha = alpha;
this.spacing = spacing;
this.align = align;
this.margin = margin;
}
@Override
public void paintBorder(Component component, Graphics graphics, int x, int y, int width, int height) {
Graphics2D graphics2d = (Graphics2D) graphics;
graphics2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) alpha));
if (imageList.size() == 0) {
return;
}
int yi = y;
int imageIdx = 0;
while (yi < height) {
Image image = imageList.get(imageIdx);
int xi = this.align.calcX(width, image.getWidth(null), margin);
graphics2d.drawImage(image, xi, yi, component);
yi += image.getHeight(null);
imageIdx++;
imageIdx %= imageList.size();
yi += spacing;
}
}
@Override
public Insets getBorderInsets(Component component) {
return new Insets(0, 0, 0, 0);
}
@Override
public boolean isBorderOpaque() {
return true;
}
public enum Align implements java.io.Serializable {
LEFT(0) {
@Override
int calcX(int width, int imageWidth, int margin) {
return margin;
}
},
CENTER(1) {
@Override
int calcX(int width, int imageWidth, int margin) {
return (width - imageWidth) / 2;
}
},
RIGHT(2) {
@Override
int calcX(int width, int imageWidth, int margin) {
return width - margin - imageWidth;
}
};
public final int id;
Align(int id) {
this.id = id;
}
public static Align getById(int id) {
switch (id) {
case 0:
return LEFT;
case 1:
return CENTER;
case 2:
return RIGHT;
default:
return LEFT;
}
}
abstract int calcX(int width, int imageWidth, int margin);
}
}