diff --git a/src/main/java/org/silentsoft/badge4j/badge/Badge.java b/src/main/java/org/silentsoft/badge4j/badge/Badge.java index 8445255..304498e 100644 --- a/src/main/java/org/silentsoft/badge4j/badge/Badge.java +++ b/src/main/java/org/silentsoft/badge4j/badge/Badge.java @@ -179,9 +179,24 @@ protected String encodeLogoToBase64(String logo) { Icon simpleIcon = SimpleIcons.get(logo); if (simpleIcon != null && simpleIcon.getSvg() != null && simpleIcon.getSvg().length() > 0) { String svg = simpleIcon.getSvg(); + String adjustedColor = null; + if (!(this instanceof SocialBadge) && Brightness.of(labelColor) <= brightnessThreshold) { + adjustedColor = "whitesmoke"; + } if (simpleIcon.getHex() != null && simpleIcon.getHex().length() > 0) { - svg = svg.replace(" brightnessThreshold) { + adjustedColor = "#333"; + } + + if (adjustedColor == null) { + adjustedColor = logoColor; + } + } + if (adjustedColor != null) { + svg = svg.replace(" buildLogo = (String logo) -> { + BiFunction buildLogo = (String logo, String labelColor) -> { if (logo.startsWith("data:")) { return logo.toLowerCase(); } + labelColor = labelColor.trim(); + labelColor = (NamedColor.nameOf(labelColor) != null) ? NamedColor.nameOf(labelColor).getHex() : (NamedColorAlias.nameOf(labelColor) != null) ? NamedColorAlias.nameOf(labelColor).getHex() : labelColor; + if (labelColor.startsWith("#") == false && org.silentsoft.csscolor4j.NamedColor.nameOf(labelColor) == null) { + labelColor = "#".concat(labelColor); + } + Icon simpleIcon = SimpleIcons.get(logo); if (simpleIcon != null && simpleIcon.getSvg() != null && simpleIcon.getSvg().length() > 0) { String svg = simpleIcon.getSvg(); + String adjustedColor = null; + if (style != Style.Social && Brightness.of(labelColor) <= brightnessThreshold) { + adjustedColor = "whitesmoke"; + } if (simpleIcon.getHex() != null && simpleIcon.getHex().length() > 0) { - svg = svg.replace(" brightnessThreshold) { + adjustedColor = "#333"; + } + + if (adjustedColor == null) { + adjustedColor = logoColor; + } + } + if (adjustedColor != null) { + svg = svg.replace(" test = (logo) -> { { - String svg = Badge.builder().style(style).label(label).message(message).logo(logo).build().toLowerCase(); + String svg = Badge.builder().style(style).label(label).message(message).labelColor(labelColor).logo(logo).build().toLowerCase(); Assertions.assertTrue(svg.contains(label)); Assertions.assertTrue(svg.contains(message)); - Assertions.assertTrue(svg.contains(buildLogo.apply(logo))); + Assertions.assertTrue(svg.contains(buildLogo.apply(logo, labelColor))); } { String[] links = new String[]{ "https://silentsoft.org" }; - String svg = Badge.builder().style(style).label(label).message(message).logo(logo).links(links).build().toLowerCase(); + String svg = Badge.builder().style(style).label(label).message(message).labelColor(labelColor).logo(logo).links(links).build().toLowerCase(); Assertions.assertTrue(svg.contains(label)); Assertions.assertTrue(svg.contains(message)); - Assertions.assertTrue(svg.contains(buildLogo.apply(logo))); + Assertions.assertTrue(svg.contains(buildLogo.apply(logo, labelColor))); Assertions.assertTrue(svg.contains(links[0])); } { String[] links = new String[]{ "https://left.silentsoft.org", "https://right.silentsoft.org" }; - String svg = Badge.builder().style(style).label(label).message(message).logo(logo).links(links).build().toLowerCase(); + String svg = Badge.builder().style(style).label(label).message(message).labelColor(labelColor).logo(logo).links(links).build().toLowerCase(); Assertions.assertTrue(svg.contains(label)); Assertions.assertTrue(svg.contains(message)); - Assertions.assertTrue(svg.contains(buildLogo.apply(logo))); + Assertions.assertTrue(svg.contains(buildLogo.apply(logo, labelColor))); Assertions.assertTrue(svg.contains(links[0])); Assertions.assertTrue(svg.contains(links[1])); } @@ -84,14 +106,14 @@ public void simpleTest() { String svg = Badge.builder().style(style).label(label).message(message).logo(logo).color(namedColor.name()).labelColor(namedColor.name()).build().toLowerCase(); Assertions.assertTrue(svg.contains(label)); Assertions.assertTrue(svg.contains(message)); - Assertions.assertTrue(svg.contains(buildLogo.apply(logo))); + Assertions.assertTrue(svg.contains(buildLogo.apply(logo, namedColor.name()))); Assertions.assertTrue(svg.contains(namedColor.getHex())); } for (NamedColorAlias namedColorAlias : NamedColorAlias.values()) { String svg = Badge.builder().style(style).label(label).message(message).logo(logo).color(namedColorAlias.name()).labelColor(namedColorAlias.name()).build().toLowerCase(); Assertions.assertTrue(svg.contains(label)); Assertions.assertTrue(svg.contains(message)); - Assertions.assertTrue(svg.contains(buildLogo.apply(logo))); + Assertions.assertTrue(svg.contains(buildLogo.apply(logo, namedColorAlias.name()))); Assertions.assertTrue(svg.contains(namedColorAlias.getHex())); } } @@ -99,6 +121,9 @@ public void simpleTest() { test.accept("data:image/svg+xml;base64,Dummy123+LOGO456+data789="); test.accept("simpleicons"); + test.accept("apachecordova"); + test.accept("github"); + test.accept("twitter"); } }