diff --git a/fontawesomefx/build.gradle b/fontawesomefx/build.gradle index 3e0a3c4..d0cdf51 100644 --- a/fontawesomefx/build.gradle +++ b/fontawesomefx/build.gradle @@ -43,14 +43,17 @@ subprojects { } group = artifactGroupId - sourceCompatibility = '1.9' + sourceCompatibility = '8' + targetCompatibility = '8' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' bintray { - user = System.getenv('BINTRAY_USER') - key = System.getenv('BINTRAY_KEY') + user = findProperty('BINTRAY_USER') ?: 'NONE' + key = findProperty('BINTRAY_KEY') ?: 'NONE' pkg { - repo = 'maven' + //dryRun = true + + repo = 'public' name = artifactName userOrg = artifactUserOrg licenses = artifactLicenses @@ -64,9 +67,9 @@ subprojects { sign = true passphrase = System.getenv('SIGNING_PASSWORD') } - name = '9.1.2' - desc = 'FontAwesomeFX 9.1.2' - vcsTag = 'fontawesomefx-9.1.2' + name = '9.1.2-jdk8' + desc = 'FontAwesomeFX 9.1.2-jdk8' + vcsTag = 'fontawesomefx-9.1.2-jdk8' } } } @@ -110,7 +113,7 @@ subprojects { } dependencies { - testCompile 'junit:junit:4.10' + testCompile 'junit:junit:4.12' } afterEvaluate { @@ -118,27 +121,32 @@ subprojects { jcenter() } - compileJava { + task compileModuleInfo (type: JavaCompile) { doFirst { options.compilerArgs = [ - '--module-path', classpath.asPath, + '--module-path', classpath.asPath, + '--add-modules', 'ALL-SYSTEM', + '-d', sourceSets.main.output.classesDirs.asPath ] - classpath = files() } - } - - test { + inputs.property("moduleName", moduleName) - doFirst { - jvmArgs = [ - '--module-path', classpath.asPath, - '--add-modules', 'ALL-MODULE-PATH', - '--add-reads', "$moduleName=junit", - '--patch-module', "$moduleName=" + files(sourceSets.test.java.outputDir).asPath, - ] - classpath = files() - } + + sourceCompatibility = 9 + targetCompatibility = 9 + + source = sourceSets.main.java.srcDirs + classpath = sourceSets.main.compileClasspath + include '**/module-info.java' + destinationDir = sourceSets.main.output.classesDirs.singleFile + } + + sourceSets.main.java { + exclude '**/module-info.java' } + + compileModuleInfo.dependsOn compileJava + assemble.dependsOn compileModuleInfo jar { inputs.property("moduleName", moduleName) diff --git a/fontawesomefx/deploy.gradle b/fontawesomefx/deploy.gradle index eec4b9a..916c945 100644 --- a/fontawesomefx/deploy.gradle +++ b/fontawesomefx/deploy.gradle @@ -3,17 +3,17 @@ ext{ artifactGroupId = 'de.jensd' artifactName = 'FontAwesomeFX' artifactId = 'mqttfx-payload-decoders' - artifactVersion = '9.1.1' - artifactWebSiteUrl = 'https://bitbucket.org/Jerady/fontawesomefx/overview' - artifactGitUrl = 'https://Jerady@bitbucket.org/Jerady/fontawesomefx.git' - artifactUserOrg = 'jerady' + artifactVersion = '9.1.2-jdk8' + artifactWebSiteUrl = 'https://github.com/xzel23/fontawesomefx' + artifactGitUrl = 'https://github.com/xzel23/fontawesomefx.git' + artifactUserOrg = 'dua3' artifactPublications = ['mavenJava'] - artifactIssueTrackerUrl = 'https://bitbucket.org/Jerady/fontawesomefx/issues' + artifactIssueTrackerUrl = 'https://github.com/xzel23/fontawesomefx/issues' artifactLicenses = ['Apache-2.0'] artifactDesc = '$artifactId $artifactVersion' artifactVcsTag = '$artifactId-$artifactVersion' artifactDeveloperId = 'developer-id' - artifactDeveloperName = 'Jens Deters' - artifactDeveloperEmail = 'mail@jensd.de' - artifactDescription = 'Provide WebFont Icons for JavaFX Apps' -} \ No newline at end of file + artifactDeveloperName = 'Axel Howind' + artifactDeveloperEmail = 'axel@dua3.com' + artifactDescription = 'Patched version of FontAwesomeFX (Fork of https://bitbucket.org/Jerady/fontawesomefx)' +} diff --git a/fontawesomefx/fontawesomefx-commons/build.gradle b/fontawesomefx/fontawesomefx-commons/build.gradle index 09d9756..2631e85 100644 --- a/fontawesomefx/fontawesomefx-commons/build.gradle +++ b/fontawesomefx/fontawesomefx-commons/build.gradle @@ -2,4 +2,4 @@ apply plugin: 'application' mainClassName = '' ext.moduleName = 'de.jensd.fx.glyphs.commons' -version = '9.1.2' +version = '9.1.2-jdk8' diff --git a/fontawesomefx/fontawesomefx-commons/src/main/java/de/jensd/fx/glyphs/GlyphIconUtils.java b/fontawesomefx/fontawesomefx-commons/src/main/java/de/jensd/fx/glyphs/GlyphIconUtils.java index 76cdd69..e839e19 100644 --- a/fontawesomefx/fontawesomefx-commons/src/main/java/de/jensd/fx/glyphs/GlyphIconUtils.java +++ b/fontawesomefx/fontawesomefx-commons/src/main/java/de/jensd/fx/glyphs/GlyphIconUtils.java @@ -1,22 +1,97 @@ package de.jensd.fx.glyphs; -import javafx.css.CssParser; -import javafx.css.Stylesheet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import javafx.scene.text.Font; public class GlyphIconUtils { - private final static CssParser CSS_PARSER = new CssParser(); - private final static Number DEFAULT_SIZE = 12.0; + private static final double DEFAULT_SIZE = 12.0; + + private static final Pattern PATTERN = Pattern.compile("(?([\\d]+(\\.\\d+)?))(?[a-z]+|%)"); public static Number convert(String sizeString, Font font) { - Stylesheet stylesheet = CSS_PARSER.parse("{-fx-font-size: ".concat(sizeString).concat(";}")); - if(stylesheet.getRules().isEmpty()){ - return DEFAULT_SIZE; + /* + * CSS absolute scaling values + * + * source: https://drafts.csswg.org/css-fonts-3/ + * + * CSS absolute-size values | xx-small | x-small | small | medium | large | x-large | xx-large | | + * scaling factor | 3/5 | 3/4 | 8/9 | 1 | 6/5 | 3/2 | 2/1 | 3/1 | + */ + switch (sizeString) { + /* + * CSS absolute scaling values + * + * source: https://drafts.csswg.org/css-fonts-3/ + * + * CSS absolute-size values | xx-small | x-small | small | medium | large | x-large | xx-large | | + * scaling factor | 3/5 | 3/4 | 8/9 | 1 | 6/5 | 3/2 | 2/1 | 3/1 | + */ + case "": + return DEFAULT_SIZE; + case "xx-small": + return DEFAULT_SIZE * 3/5; + case "x-small": + return DEFAULT_SIZE * 3/4; + case "small": + return DEFAULT_SIZE * 8/9; + case "medium": + return DEFAULT_SIZE; + case "large": + return DEFAULT_SIZE * 6/5; + case "x-large": + return DEFAULT_SIZE * 3/2; + case "xx-large": + return DEFAULT_SIZE * 2; + /* + * relative sizes are computed relative to the supplied refernce font. + * values are taken from the same specification as above. + */ + case "smaller": + return font.getSize() * 8/9; + case "larger": + return font.getSize() * 6/5; + /* + * Relative sizes with different length units are parsed accordingly. + */ + default: + return parseRelativeSize(sizeString, font); + } + } + + private static Number parseRelativeSize(String sizeString, Font font) { + // get size of base font + double baseSize = font.getSize(); + + // extract number and unit + Matcher matcher = PATTERN.matcher(sizeString); + + if (!matcher.matches()) { + return DEFAULT_SIZE; } - else if(stylesheet.getRules().get(0).getDeclarations().isEmpty()){ + + String numberString = matcher.group("number"); + double sz = Double.parseDouble(numberString); + + String unit = matcher.group("unit"); + + // do the conversion + switch (unit) { + case "em": + return baseSize * sz; // relative to base font size + case "%": + return baseSize * sz/100.0; // relative to base font size (percent) + case "px": + return sz; // absolute + case "pt": + return sz*16/12; // 1 pt = 1/72 inch - the exact factor depends on display resolution! + case "pc": + return sz*16; // 1 pica is 12 points + default: + // Maybe this should be: throw new IllegalArgumentException("unknown size unit: '"+unit+"'"); return DEFAULT_SIZE; } - return (Number)stylesheet.getRules().get(0).getDeclarations().get(0).getParsedValue().convert(font); } } diff --git a/fontawesomefx/fontawesomefx-commons/src/test/java/de/jensd/fx/glyphs/TestGlyphIconUtils.java b/fontawesomefx/fontawesomefx-commons/src/test/java/de/jensd/fx/glyphs/TestGlyphIconUtils.java index 52dcda1..90eaabb 100644 --- a/fontawesomefx/fontawesomefx-commons/src/test/java/de/jensd/fx/glyphs/TestGlyphIconUtils.java +++ b/fontawesomefx/fontawesomefx-commons/src/test/java/de/jensd/fx/glyphs/TestGlyphIconUtils.java @@ -27,6 +27,20 @@ public class TestGlyphIconUtils { assertTrue(sizeNumber.doubleValue() == 4.0); } + @Test + public void testSizeConverterPC(){ + String em ="1pc"; + Number sizeNumber = GlyphIconUtils.convert(em, new Text().getFont()); + assertTrue(sizeNumber.doubleValue() == 16.0); + } + + @Test + public void testSizeConverterPercent(){ + String em ="50%"; + Number sizeNumber = GlyphIconUtils.convert(em, new Text().getFont()); + assertTrue(sizeNumber.doubleValue() == 6.5); + } + @Test public void testConverterInvalidSizeString(){ String em ="3xxx"; diff --git a/fontawesomefx/fontawesomefx-controls/build.gradle b/fontawesomefx/fontawesomefx-controls/build.gradle index 7e6ca66..9734baf 100644 --- a/fontawesomefx/fontawesomefx-controls/build.gradle +++ b/fontawesomefx/fontawesomefx-controls/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = '' ext.moduleName = 'de.jensd.fx.glyphs.controls' -version '9.1.2' +version '9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-emojione/build.gradle b/fontawesomefx/fontawesomefx-emojione/build.gradle index 8cc0edb..6b04c3c 100644 --- a/fontawesomefx/fontawesomefx-emojione/build.gradle +++ b/fontawesomefx/fontawesomefx-emojione/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.emojione.demo.EmojiOneDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.emojione' -version '3.1.1-9.1.2' +version '3.1.1-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-fontawesome/build.gradle b/fontawesomefx/fontawesomefx-fontawesome/build.gradle index 204a5fb..8872294 100644 --- a/fontawesomefx/fontawesomefx-fontawesome/build.gradle +++ b/fontawesomefx/fontawesomefx-fontawesome/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.fontawesome.demo.FontAwesomeIconsDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.fontawesome' -version '4.7.0-9.1.2' +version '4.7.0-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-icons525/build.gradle b/fontawesomefx/fontawesomefx-icons525/build.gradle index 4ab5157..f245a68 100644 --- a/fontawesomefx/fontawesomefx-icons525/build.gradle +++ b/fontawesomefx/fontawesomefx-icons525/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.icons525.demo.Icons525DemoApp' ext.moduleName = 'de.jensd.fx.glyphs.iconsfivetwofive' -version '4.2.0-9.1.2' +version '4.2.0-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-materialdesignfont/build.gradle b/fontawesomefx/fontawesomefx-materialdesignfont/build.gradle index 912f4a0..34982ba 100644 --- a/fontawesomefx/fontawesomefx-materialdesignfont/build.gradle +++ b/fontawesomefx/fontawesomefx-materialdesignfont/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.materialdesignicons.demo.MaterialDesignIconsDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.materialdesignicons' -version '2.0.26-9.1.2' +version '2.0.26-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-materialicons/build.gradle b/fontawesomefx/fontawesomefx-materialicons/build.gradle index 3b26e16..38a3344 100644 --- a/fontawesomefx/fontawesomefx-materialicons/build.gradle +++ b/fontawesomefx/fontawesomefx-materialicons/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.materialicons.demo.MaterialIconsDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.materialicons' -version '2.2.0-9.1.2' +version '2.2.0-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-materialstackicons/build.gradle b/fontawesomefx/fontawesomefx-materialstackicons/build.gradle index a35e2f8..bf92a49 100644 --- a/fontawesomefx/fontawesomefx-materialstackicons/build.gradle +++ b/fontawesomefx/fontawesomefx-materialstackicons/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.materialstackicons.demo.StackDemo' ext.moduleName = 'de.jensd.fx.glyphs.materialstackicons' -version '2.1-5-9.1.2' +version '2.1-5-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-octicons/build.gradle b/fontawesomefx/fontawesomefx-octicons/build.gradle index 11337b1..08165be 100644 --- a/fontawesomefx/fontawesomefx-octicons/build.gradle +++ b/fontawesomefx/fontawesomefx-octicons/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.octicons.demo.OctIconsDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.octicons' -version '4.3.0-9.1.2' +version '4.3.0-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons') diff --git a/fontawesomefx/fontawesomefx-weathericons/build.gradle b/fontawesomefx/fontawesomefx-weathericons/build.gradle index b97c62f..620c6ec 100644 --- a/fontawesomefx/fontawesomefx-weathericons/build.gradle +++ b/fontawesomefx/fontawesomefx-weathericons/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'application' mainClassName = 'de.jensd.fx.glyphs.weathericons.demo.WeatherIconsDemoApp' ext.moduleName = 'de.jensd.fx.glyphs.weathericons' -version '2.0.10-9.1.2' +version '2.0.10-9.1.2-jdk8' dependencies { compile project(':fontawesomefx-commons')