瀏覽代碼

use CssParser inside SwingLoader

Ranides Atterwim 2 年之前
父節點
當前提交
78772e59ad

+ 18 - 1
assira.junit/src/main/java/net/ranides/assira/junit/ImageAssert.java

@@ -11,6 +11,8 @@ import static org.junit.Assert.fail;
 
 public class ImageAssert {
 
+    private static final int RGB_TOLERANCE = 2;
+
     public static void assertEquals(String expected, BufferedImage value) throws IOException {
         URL resource = ImageAssert.class.getClassLoader().getResource(expected);
         if(resource == null) {
@@ -42,7 +44,7 @@ public class ImageAssert {
         for(int y=0; y<Math.min(eh, vh); y++) {
             for(int x=0; x<Math.min(ew, vw); x++) {
                 Color diff;
-                if(expectedImage.getRGB(x, y) == value.getRGB(x, y)) {
+                if(isEqual(expectedImage.getRGB(x, y), value.getRGB(x, y))) {
                     diff = Color.WHITE;
                 } else {
                     diff = Color.RED;
@@ -62,5 +64,20 @@ public class ImageAssert {
 
     }
 
+    private static boolean isEqual(int rgb1, int rgb2) {
+        Color color1 = new Color(rgb1);
+        Color color2 = new Color(rgb2);
+        if(Math.abs(color1.getRed() - color2.getRed()) > RGB_TOLERANCE) {
+            return false;
+        }
+        if(Math.abs(color1.getGreen() - color2.getGreen()) > RGB_TOLERANCE) {
+            return false;
+        }
+        if(Math.abs(color1.getBlue() - color2.getBlue()) > RGB_TOLERANCE) {
+            return false;
+        }
+        return true;
+    }
+
 
 }

+ 0 - 65
assira.ui/src/main/java/net/ranides/assira/ui/primitives/BorderParser.java

@@ -1,65 +0,0 @@
-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.Border;
-import java.awt.*;
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class BorderParser {
-
-    public static Border parseBorder(String expression) {
-        Matcher hit = Pattern
-            .compile("(none|solid|dotted|dashed|double|groove|ridge|inset|outset)(?:\\s+([0-9]+)px)?(?:\\s+(.+))?").matcher(expression);
-
-        if(hit.matches()) {
-            String style = hit.group(1);
-            Integer size = Optional.ofNullable(hit.group(2)).map(Integer::parseInt).orElse(null);
-            int size1 = ValueUtils.or(size, 1);
-            Color color = Optional.ofNullable(hit.group(3)).map(CssParser::color).orElse(null);
-            switch (style) {
-                case "none":
-                    return  BorderFactory.createEmptyBorder(size1, size1, size1, size1);
-                case "solid":
-                    return BorderFactory.createLineBorder(color, size1);
-                case "dotted":
-                    return BorderFactory.createDashedBorder(color, size1, size1, size1, false);
-                case "dashed":
-                    return BorderFactory.createDashedBorder(color, size1, 2*size1, 2*size1, false);
-                case "double":
-                    return BorderFactory.createCompoundBorder(
-                        BorderFactory.createCompoundBorder(
-                            BorderFactory.createLineBorder(color, size1),
-                            BorderFactory.createEmptyBorder(size1, size1, size1, size1)
-                        ),
-                        BorderFactory.createLineBorder(color, size1)
-                    );
-                case "outset":
-                    return createBevelBorder(size, color, CustomBevelBorder.RAISED);
-                case "inset":
-                    return createBevelBorder(size, color, CustomBevelBorder.LOWERED);
-                case "groove":
-                    return BorderFactory.createCompoundBorder(
-                        createBevelBorder(size, color, CustomBevelBorder.LOWERED),
-                        createBevelBorder(size, color, CustomBevelBorder.RAISED)
-                    );
-                case "ridge":
-                    return BorderFactory.createCompoundBorder(
-                        createBevelBorder(size, color, CustomBevelBorder.RAISED),
-                        createBevelBorder(size, color, CustomBevelBorder.LOWERED)
-                    );
-            }
-        }
-
-        throw new IllegalArgumentException("Unsupported border style: " + expression);
-    }
-
-    private static Border createBevelBorder(Integer size, Color color, int type) {
-        return CustomBevelBorder.newInstance(Ref.ofNullable(size), Ref.ofNullable(color), type);
-    }
-
-}

+ 4 - 25
assira.ui/src/main/java/net/ranides/assira/ui/primitives/CssParser.java

@@ -164,31 +164,6 @@ public class CssParser {
         .valueForToken(CssGrammarParser.SWING_BORDER_bevel_soft, CssBorderStyle.SWING_BEVEL_SOFT)
         .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>()
         //<editor-fold desc="G4Selector">
         .withName("CSS:border-size")
@@ -304,6 +279,10 @@ public class CssParser {
                         CustomBevelBorder.newInstance(size.map(CssBorderSize::getSize), color, CustomBevelBorder.LOWERED)
                     );
                 }
+                case NONE: {
+                    int isize = size.orElse(CssBorderSize.SINGLE).getSize();
+                    return BorderFactory.createEmptyBorder(isize, isize, isize, isize);
+                }
                 default:
                     throw new UnsupportedOperationException("Unsupported border style: " + style);
             }