|
@@ -161,6 +161,31 @@ public class CssParser {
|
|
|
.valueForToken(CssGrammarParser.SWING_BORDER_bevel_soft, CssBorderStyle.SWING_BEVEL_SOFT)
|
|
.valueForToken(CssGrammarParser.SWING_BORDER_bevel_soft, CssBorderStyle.SWING_BEVEL_SOFT)
|
|
|
.prepare();
|
|
.prepare();
|
|
|
|
|
|
|
|
|
|
+ public static final G4Selector<Integer> NUMBER_UNIT = new G4SelectorBuilder<Integer>()
|
|
|
|
|
+ .withName("CSS:number-unit")
|
|
|
|
|
+ .withParser(PARSER)
|
|
|
|
|
+ .mapRule(CssGrammarParser.RULE_numberUnit, node -> {
|
|
|
|
|
+ Number number = NUMBER.single(node.child("number"));
|
|
|
|
|
+ CssUnit unit = SIZE_UNIT.single(node.child("unit"));
|
|
|
|
|
+ switch (unit) {
|
|
|
|
|
+ case PX:
|
|
|
|
|
+ return number.intValue();
|
|
|
|
|
+ case PT:
|
|
|
|
|
+ return pt2px(number);
|
|
|
|
|
+ case EM:
|
|
|
|
|
+ return pt2px(node.get(COMPONENT).get().getFont().getSize());
|
|
|
|
|
+ case EX:
|
|
|
|
|
+ JComponent component = node.get(COMPONENT).get();
|
|
|
|
|
+ FontMetrics metrics = component.getFontMetrics(component.getFont());
|
|
|
|
|
+ double h = metrics.getStringBounds("x", component.getGraphics()).getHeight();
|
|
|
|
|
+ return (int)Math.round(h);
|
|
|
|
|
+ default:
|
|
|
|
|
+ throw new UnsupportedOperationException("Unsupported unit: " + unit);
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .prepare();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
public static final G4Selector<Integer> BORDER_SIZE_COMPONENT = new G4SelectorBuilder<Integer>()
|
|
public static final G4Selector<Integer> BORDER_SIZE_COMPONENT = new G4SelectorBuilder<Integer>()
|
|
|
//<editor-fold desc="G4Selector">
|
|
//<editor-fold desc="G4Selector">
|
|
|
.withName("CSS:border-size")
|
|
.withName("CSS:border-size")
|
|
@@ -229,18 +254,70 @@ public class CssParser {
|
|
|
.map(v -> BORDER_SIZE.single(v));
|
|
.map(v -> BORDER_SIZE.single(v));
|
|
|
|
|
|
|
|
switch (style) {
|
|
switch (style) {
|
|
|
- case SOLID:
|
|
|
|
|
|
|
+ case SOLID: {
|
|
|
Color icolor = color.orElseGet(() -> node.get(COMPONENT).get().getBackground());
|
|
Color icolor = color.orElseGet(() -> node.get(COMPONENT).get().getBackground());
|
|
|
CssBorderSize isize = size.orElse(CssBorderSize.SINGLE);
|
|
CssBorderSize isize = size.orElse(CssBorderSize.SINGLE);
|
|
|
- if(isize.isSimple()) {
|
|
|
|
|
|
|
+ if (isize.isSimple()) {
|
|
|
return BorderFactory.createLineBorder(icolor, isize.getSize());
|
|
return BorderFactory.createLineBorder(icolor, isize.getSize());
|
|
|
} else {
|
|
} else {
|
|
|
return BorderFactory.createMatteBorder(isize.top, isize.left, isize.bottom, isize.right, icolor);
|
|
return BorderFactory.createMatteBorder(isize.top, isize.left, isize.bottom, isize.right, icolor);
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
case OUTSET:
|
|
case OUTSET:
|
|
|
- return CustomBevelBorder.newInstance(size.map(CssBorderSize::getLeft), color, CustomBevelBorder.RAISED);
|
|
|
|
|
|
|
+ return CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.RAISED);
|
|
|
case INSET:
|
|
case INSET:
|
|
|
- return CustomBevelBorder.newInstance(size.map(CssBorderSize::getLeft), color, CustomBevelBorder.LOWERED);
|
|
|
|
|
|
|
+ return CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.LOWERED);
|
|
|
|
|
+ case DASHED: {
|
|
|
|
|
+ Color icolor = color.orElseGet(() -> node.get(COMPONENT).get().getBackground());
|
|
|
|
|
+ int isize = size.orElse(CssBorderSize.SINGLE).getSize();
|
|
|
|
|
+ return BorderFactory.createDashedBorder(icolor, isize, 3.0f, 3.0f, false);
|
|
|
|
|
+ }
|
|
|
|
|
+ case DOTTED: {
|
|
|
|
|
+ Color icolor = color.orElseGet(() -> node.get(COMPONENT).get().getBackground());
|
|
|
|
|
+ int isize = size.orElse(CssBorderSize.SINGLE).getSize();
|
|
|
|
|
+ return BorderFactory.createDashedBorder(icolor, isize, 1.0f, 1.0f, true);
|
|
|
|
|
+ }
|
|
|
|
|
+ case DOUBLE: {
|
|
|
|
|
+ Color icolor = color.orElseGet(() -> node.get(COMPONENT).get().getBackground());
|
|
|
|
|
+ int isize = size.orElse(CssBorderSize.SINGLE).getSize();
|
|
|
|
|
+
|
|
|
|
|
+ return BorderFactory.createCompoundBorder(
|
|
|
|
|
+ BorderFactory.createCompoundBorder(
|
|
|
|
|
+ BorderFactory.createLineBorder(icolor, isize),
|
|
|
|
|
+ BorderFactory.createEmptyBorder(isize, isize, isize, isize)
|
|
|
|
|
+ ),
|
|
|
|
|
+ BorderFactory.createLineBorder(icolor, isize)
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ case GROOVE: {
|
|
|
|
|
+ return BorderFactory.createCompoundBorder(
|
|
|
|
|
+ CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.LOWERED),
|
|
|
|
|
+ CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.RAISED)
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ case RIDGE: {
|
|
|
|
|
+ return BorderFactory.createCompoundBorder(
|
|
|
|
|
+ CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.RAISED),
|
|
|
|
|
+ CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.LOWERED)
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+// case SWING_ETCHED: {
|
|
|
|
|
+// List<Color> colors = node.children("color").map(v -> COLOR.single(v)).list();
|
|
|
|
|
+// Object color1;
|
|
|
|
|
+// Object color2;
|
|
|
|
|
+// if(colors.size() == 1) {
|
|
|
|
|
+// Color color0 = colors.get(0);
|
|
|
|
|
+// color1 = color0.brighter();
|
|
|
|
|
+// color2 = color0.darker();
|
|
|
|
|
+// } else {
|
|
|
|
|
+// color1 = colors.get(0);
|
|
|
|
|
+// color2 = colors.get(1);
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// Integer size0 = node.children("numberUnit").single().map(v -> NUMBER_UNIT.single(v)).get();
|
|
|
|
|
+//
|
|
|
|
|
+// BorderFactory.createEtchedBorder(size0, )
|
|
|
|
|
+// }
|
|
|
default:
|
|
default:
|
|
|
throw new UnsupportedOperationException("Unsupported border style: " + style);
|
|
throw new UnsupportedOperationException("Unsupported border style: " + style);
|
|
|
}
|
|
}
|
|
@@ -358,8 +435,8 @@ public class CssParser {
|
|
|
INSET,
|
|
INSET,
|
|
|
OUTSET,
|
|
OUTSET,
|
|
|
|
|
|
|
|
- SWING_ETCHED,
|
|
|
|
|
- SWING_BEVEL,
|
|
|
|
|
- SWING_BEVEL_SOFT,
|
|
|
|
|
|
|
+ SWING_ETCHED, //
|
|
|
|
|
+ SWING_BEVEL, //
|
|
|
|
|
+ SWING_BEVEL_SOFT, //
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|