|
|
@@ -1,9 +1,9 @@
|
|
|
package net.ranides.assira.ui.primitives;
|
|
|
|
|
|
+import net.ranides.assira.generic.Ref;
|
|
|
import net.ranides.assira.generic.ValueUtils;
|
|
|
|
|
|
import javax.swing.*;
|
|
|
-import javax.swing.border.AbstractBorder;
|
|
|
import javax.swing.border.Border;
|
|
|
import java.awt.*;
|
|
|
import java.util.Optional;
|
|
|
@@ -39,18 +39,18 @@ public class BorderParser {
|
|
|
BorderFactory.createLineBorder(color, size1)
|
|
|
);
|
|
|
case "outset":
|
|
|
- return createBevelBorder(size, color, BevelBorderV2.RAISED);
|
|
|
+ return createBevelBorder(size, color, CustomBevelBorder.RAISED);
|
|
|
case "inset":
|
|
|
- return createBevelBorder(size, color, BevelBorderV2.LOWERED);
|
|
|
+ return createBevelBorder(size, color, CustomBevelBorder.LOWERED);
|
|
|
case "groove":
|
|
|
return BorderFactory.createCompoundBorder(
|
|
|
- createBevelBorder(size, color, BevelBorderV2.LOWERED),
|
|
|
- createBevelBorder(size, color, BevelBorderV2.RAISED)
|
|
|
+ createBevelBorder(size, color, CustomBevelBorder.LOWERED),
|
|
|
+ createBevelBorder(size, color, CustomBevelBorder.RAISED)
|
|
|
);
|
|
|
case "ridge":
|
|
|
return BorderFactory.createCompoundBorder(
|
|
|
- createBevelBorder(size, color, BevelBorderV2.RAISED),
|
|
|
- createBevelBorder(size, color, BevelBorderV2.LOWERED)
|
|
|
+ createBevelBorder(size, color, CustomBevelBorder.RAISED),
|
|
|
+ createBevelBorder(size, color, CustomBevelBorder.LOWERED)
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
@@ -58,111 +58,8 @@ public class BorderParser {
|
|
|
throw new IllegalArgumentException("Unsupported border style: " + expression);
|
|
|
}
|
|
|
|
|
|
- private static Border createBevelBorder(Integer size, Color color, int lowered) {
|
|
|
- if(size == null && color ==null) {
|
|
|
- return BorderFactory.createBevelBorder(lowered);
|
|
|
- }
|
|
|
- if(color ==null) {
|
|
|
- return new BevelBorderV2(lowered, size);
|
|
|
- } else {
|
|
|
- return new BevelBorderV2(lowered, ValueUtils.or(size, 1), color.brighter(), color.darker());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @SuppressWarnings("serial")
|
|
|
- public static class BevelBorderV2 extends AbstractBorder
|
|
|
- {
|
|
|
- public static final int RAISED = 0;
|
|
|
- public static final int LOWERED = 1;
|
|
|
-
|
|
|
- protected int etchType;
|
|
|
-
|
|
|
- protected int size;
|
|
|
- protected Color highlight;
|
|
|
- protected Color shadow;
|
|
|
-
|
|
|
- public BevelBorderV2(int etchType) {
|
|
|
- this(etchType, 1, null, null);
|
|
|
- }
|
|
|
-
|
|
|
- public BevelBorderV2(int etchType, int size) {
|
|
|
- this(etchType, size, null, null);
|
|
|
- }
|
|
|
-
|
|
|
- public BevelBorderV2(int etchType, int size, Color highlight, Color shadow) {
|
|
|
- this.etchType = etchType;
|
|
|
- this.size = size;
|
|
|
- this.highlight = highlight;
|
|
|
- this.shadow = shadow;
|
|
|
- }
|
|
|
-
|
|
|
- public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
|
|
|
- super.paintBorder(c, g, x, y, width, height);
|
|
|
-
|
|
|
- int h = height;
|
|
|
- int w = width;
|
|
|
- int bw = size;
|
|
|
-
|
|
|
- Graphics2D g2 = (Graphics2D) g.create();
|
|
|
- g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
|
|
- g2.translate(x, y);
|
|
|
-
|
|
|
- Polygon topPolygon = createPolygon(pt(0, 0), pt(w, 0), pt(w - bw, bw), pt(bw, bw), pt(0, 0));
|
|
|
- g2.setColor(getLTColor(c));
|
|
|
- g2.fill(topPolygon);
|
|
|
-
|
|
|
- Polygon rightPolygon = createPolygon(pt(w , 0), pt(w, h), pt(w - bw , h - bw), pt(w - bw, bw), pt(w, 0));
|
|
|
- g2.setColor(getRBColor(c));
|
|
|
- g2.fill(rightPolygon);
|
|
|
-
|
|
|
- Polygon bottomPolygon = createPolygon(pt(0, h), pt(w, h), pt(w - bw, h - bw), pt(bw, h - bw), pt(0, h));
|
|
|
- g2.setColor(getRBColor(c));
|
|
|
- g2.fill(bottomPolygon);
|
|
|
-
|
|
|
- Polygon leftPolygon = createPolygon(pt(0, 0), pt(0, h), pt(bw, h - bw), pt(bw, bw), pt(0, 0));
|
|
|
- g2.setColor(getLTColor(c));
|
|
|
- g2.fill(leftPolygon);
|
|
|
-
|
|
|
- g2.dispose();
|
|
|
- }
|
|
|
-
|
|
|
- private Point pt(int bw, int h) {
|
|
|
- return new Point(bw, h);
|
|
|
- }
|
|
|
-
|
|
|
- private Polygon createPolygon(Point... points) {
|
|
|
- Polygon polygon = new Polygon();
|
|
|
- for (Point point : points) {
|
|
|
- polygon.addPoint(point.x, point.y);
|
|
|
- }
|
|
|
- return polygon;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public Insets getBorderInsets(Component c, Insets insets) {
|
|
|
- insets.set(size, size, size, size);
|
|
|
- return insets;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean isBorderOpaque() { return true; }
|
|
|
-
|
|
|
- private Color getLTColor(Component c) {
|
|
|
- return etchType==RAISED ? getHighlightColor(c) : getShadowColor(c);
|
|
|
- }
|
|
|
-
|
|
|
- private Color getRBColor(Component c) {
|
|
|
- return etchType==RAISED ? getShadowColor(c) : getHighlightColor(c);
|
|
|
- }
|
|
|
-
|
|
|
- private Color getHighlightColor(Component c) {
|
|
|
- return highlight != null? highlight : c.getBackground().brighter();
|
|
|
- }
|
|
|
-
|
|
|
- private Color getShadowColor(Component c) {
|
|
|
- return shadow != null? shadow : c.getBackground().darker();
|
|
|
- }
|
|
|
-
|
|
|
+ private static Border createBevelBorder(Integer size, Color color, int type) {
|
|
|
+ return CustomBevelBorder.newInstance(Ref.ofNullable(size), Ref.ofNullable(color), type);
|
|
|
}
|
|
|
|
|
|
}
|