diff --git a/.github/workflows/fonts.yml b/.github/workflows/fonts.yml index 153e98ad..a4247f18 100644 --- a/.github/workflows/fonts.yml +++ b/.github/workflows/fonts.yml @@ -22,6 +22,7 @@ jobs: - inter - jetbrains-mono - roboto + - roboto-mono runs-on: ubuntu-latest if: | diff --git a/flatlaf-demo/build.gradle.kts b/flatlaf-demo/build.gradle.kts index f98ae1bf..c4140f50 100644 --- a/flatlaf-demo/build.gradle.kts +++ b/flatlaf-demo/build.gradle.kts @@ -25,6 +25,7 @@ dependencies { implementation( project( ":flatlaf-fonts-inter" ) ) implementation( project( ":flatlaf-fonts-jetbrains-mono" ) ) implementation( project( ":flatlaf-fonts-roboto" ) ) + implementation( project( ":flatlaf-fonts-roboto-mono" ) ) implementation( project( ":flatlaf-intellij-themes" ) ) implementation( "com.miglayout:miglayout-swing:5.3" ) implementation( "com.jgoodies:jgoodies-forms:1.9.0" ) @@ -38,6 +39,7 @@ tasks { dependsOn( ":flatlaf-fonts-inter:jar" ) dependsOn( ":flatlaf-fonts-jetbrains-mono:jar" ) dependsOn( ":flatlaf-fonts-roboto:jar" ) + dependsOn( ":flatlaf-fonts-roboto-mono:jar" ) dependsOn( ":flatlaf-intellij-themes:jar" ) // dependsOn( ":flatlaf-natives-jna:jar" ) diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java index 42577b52..a0e4cd38 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java @@ -26,6 +26,7 @@ import com.formdev.flatlaf.extras.FlatUIDefaultsInspector; import com.formdev.flatlaf.fonts.inter.FlatInterFont; import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont; import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont; +import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont; import com.formdev.flatlaf.util.SystemInfo; /** @@ -75,6 +76,7 @@ public class FlatLafDemo FlatInterFont.installLazy(); FlatJetBrainsMonoFont.installLazy(); FlatRobotoFont.installLazy(); + FlatRobotoMonoFont.installLazy(); // use Inter font by default // FlatLaf.setPreferredFontFamily( FlatInterFont.FAMILY ); @@ -89,6 +91,9 @@ public class FlatLafDemo // use JetBrains Mono font // FlatLaf.setPreferredMonospacedFontFamily( FlatJetBrainsMonoFont.FAMILY ); + // use Roboto Mono font +// FlatLaf.setPreferredMonospacedFontFamily( FlatRobotoMonoFont.FAMILY ); + // application specific UI defaults FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.demo" ); diff --git a/flatlaf-fonts/README.md b/flatlaf-fonts/README.md index df83b8b7..b08addf9 100644 --- a/flatlaf-fonts/README.md +++ b/flatlaf-fonts/README.md @@ -7,3 +7,4 @@ easy-to-use and redistributable JARs. - [Inter](flatlaf-fonts-inter) font - [JetBrains Mono](flatlaf-fonts-jetbrains-mono) font - [Roboto](flatlaf-fonts-roboto) font +- [Roboto Mono](flatlaf-fonts-roboto-mono) font diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/README.md b/flatlaf-fonts/flatlaf-fonts-roboto-mono/README.md new file mode 100644 index 00000000..bb673ed0 --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/README.md @@ -0,0 +1,86 @@ +Roboto Mono font +================ + +This sub-project contains fonts from the Roboto Mono font family and bundles +them into an easy-to-use and redistributable JAR. + +Font home page: https://fonts.google.com/specimen/Roboto+Mono + +GitHub project: https://github.com/googlefonts/RobotoMono + +License: +[Apache License, Version 2.0](src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/LICENSE.txt) + + +How to install? +--------------- + +Invoke following once (e.g. in your `main()` method; on AWT thread). + +For lazy loading use: + +~~~java +FlatRobotoMonoFont.installLazy(); +~~~ + +Or load immediately with: + +~~~java +FlatRobotoMonoFont.install(); +~~~ + + +How to use? +----------- + +Use as application monospaced font (invoke before setting up FlatLaf): + +~~~java +FlatLaf.setPreferredMonospacedFontFamily( FlatRobotoMonoFont.FAMILY ); +~~~ + +Create single fonts: + +~~~java +// basic styles +new Font( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 ); +new Font( FlatRobotoMonoFont.FAMILY, Font.ITALIC, 12 ); +new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD, 12 ); +new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 12 ); +~~~ + +If using lazy loading, invoke one of following before creating the font: + +~~~java +FontUtils.loadFontFamily( FlatRobotoMonoFont.FAMILY ); +~~~ + +E.g.: + +~~~java +FontUtils.loadFontFamily( FlatRobotoMonoFont.FAMILY ); +Font font = new Font( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 ); +~~~ + +Or use following: + +~~~java +Font font = FontUtils.getCompositeFont( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 ); +~~~ + + +Download +-------- + +FlatLaf Fonts binaries are available on **Maven Central**. + +If you use Maven or Gradle, add a dependency with following coordinates to your +build script: + + groupId: com.formdev + artifactId: flatlaf-fonts-roboto-mono + version: (see button below) + +Otherwise download `flatlaf-fonts-roboto-mono-.jar` here: + +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-fonts-roboto-mono/badge.svg?style=flat-square&color=007ec6)](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-fonts-roboto-mono) diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/build.gradle.kts b/flatlaf-fonts/flatlaf-fonts-roboto-mono/build.gradle.kts new file mode 100644 index 00000000..e3829f6c --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/build.gradle.kts @@ -0,0 +1,69 @@ +/* + * Copyright 2023 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Version format: [-] +// For maven compatibility, should be in format .[.]. +// is optional and should be incremented only if a new release is +// necessary, but the has not changed. +version = "3.000" + +if( !rootProject.hasProperty( "release" ) ) + version = version.toString() + "-SNAPSHOT" + + +plugins { + `java-library` + `flatlaf-module-info` + `flatlaf-publish` +} + +dependencies { + implementation( project( ":flatlaf-core" ) ) + + testImplementation( "org.junit.jupiter:junit-jupiter-api:5.7.2" ) + testImplementation( "org.junit.jupiter:junit-jupiter-params" ) + testRuntimeOnly( "org.junit.jupiter:junit-jupiter-engine" ) +} + +flatlafModuleInfo { + dependsOn( ":flatlaf-core:jar" ) +} + +java { + withSourcesJar() + withJavadocJar() +} + +tasks { + named( "sourcesJar" ) { + exclude( "**/*.ttf", "**/*.otf" ) + } + + test { + useJUnitPlatform() + testLogging.exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + } + + withType().configureEach { + onlyIf { !rootProject.hasProperty( "skipFonts" ) } + } +} + +flatlafPublish { + artifactId = "flatlaf-fonts-roboto-mono" + name = "FlatLaf Roboto Mono Fonts Pack" + description = "Flat Look and Feel Roboto Mono Fonts Pack" +} diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/java/com/formdev/flatlaf/fonts/roboto_mono/FlatRobotoMonoFont.java b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/java/com/formdev/flatlaf/fonts/roboto_mono/FlatRobotoMonoFont.java new file mode 100644 index 00000000..fdaf345d --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/java/com/formdev/flatlaf/fonts/roboto_mono/FlatRobotoMonoFont.java @@ -0,0 +1,131 @@ +/* + * Copyright 2023 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.fonts.roboto_mono; + +import com.formdev.flatlaf.util.FontUtils; + +/** + * The Roboto Mono font family. + *

+ * Font home page: https://fonts.google.com/specimen/Roboto+Mono
+ * GitHub project: https://github.com/googlefonts/RobotoMono + *

+ * To install the font, invoke following once (e.g. in your {@code main()} method; on AWT thread). + *

+ * For lazy loading use: + *

{@code
+ * FlatRobotoMonoFont.installLazy();
+ * }
+ *

+ * Or load immediately with: + *

{@code
+ * FlatRobotoMonoFont.install();
+ * }
+ *

+ * Use as application monospaced font (invoke before setting up FlatLaf): + *

{@code
+ * FlatLaf.setPreferredMonospacedFontFamily( FlatRobotoMonoFont.FAMILY );
+ * }
+ *

+ * Create single fonts: + *

{@code
+ * new Font( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 );
+ * new Font( FlatRobotoMonoFont.FAMILY, Font.ITALIC, 12 );
+ * new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD, 12 );
+ * new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 12 );
+ * }
+ *

+ * If using lazy loading, invoke following before creating the font: + *

{@code
+ * FontUtils.loadFontFamily( FlatRobotoMonoFont.FAMILY );
+ * }
+ *

+ * E.g.: + *

{@code
+ * FontUtils.loadFontFamily( FlatRobotoMonoFont.FAMILY );
+ * Font font = new Font( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 );
+ * }
+ *

+ * Or use following: + *

{@code
+ * Font font = FontUtils.getCompositeFont( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 );
+ * }
+ * + * @author Karl Tauber + */ +public class FlatRobotoMonoFont +{ + /** + * Family name for basic styles (regular, italic and bold). + *

+ * Usage: + *

{@code
+	 * new Font( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 12 );
+	 * new Font( FlatRobotoMonoFont.FAMILY, Font.ITALIC, 12 );
+	 * new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD, 12 );
+	 * new Font( FlatRobotoMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 12 );
+	 * }
+ */ + public static final String FAMILY = "Roboto Mono"; + + /** + * Use for {@link #installStyle(String)} to install single font styles. + */ + public static final String + // basic styles + STYLE_REGULAR = "RobotoMono-Regular.ttf", + STYLE_ITALIC = "RobotoMono-Italic.ttf", + STYLE_BOLD = "RobotoMono-Bold.ttf", + STYLE_BOLD_ITALIC = "RobotoMono-BoldItalic.ttf"; + + + private FlatRobotoMonoFont() {} + + /** + * Registers the fonts for lazy loading via {@link FontUtils#registerFontFamilyLoader(String, Runnable)}. + *

+ * This is the preferred method (when using FlatLaf) to avoid unnecessary loading of maybe unused fonts. + *

+ * Note: When using '{@code new Font(...)}', you need to first invoke + * {@link FontUtils#loadFontFamily(String)} to ensure that the font family is loaded. + * When FlatLaf loads a font, or when using {@link FontUtils#getCompositeFont(String, int, int)}, + * this is done automatically. + */ + public static void installLazy() { + FontUtils.registerFontFamilyLoader( FAMILY, FlatRobotoMonoFont::install ); + } + + /** + * Creates and registers the fonts for all styles. + *

+ * When using FlatLaf, consider using {@link #installLazy()}. + */ + public static void install() { + installStyle( STYLE_REGULAR ); + installStyle( STYLE_ITALIC ); + installStyle( STYLE_BOLD ); + installStyle( STYLE_BOLD_ITALIC ); + } + + /** + * Creates and registers the font for the given style. + * See {@code STYLE_} constants. + */ + public static boolean installStyle( String name ) { + return FontUtils.installFont( FlatRobotoMonoFont.class.getResource( name ) ); + } +} diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/module-info/module-info.java b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/module-info/module-info.java new file mode 100644 index 00000000..021817fd --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/module-info/module-info.java @@ -0,0 +1,27 @@ +/* + * Copyright 2023 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @author Karl Tauber + */ +module com.formdev.flatlaf.fonts.roboto_mono { + requires java.desktop; + requires com.formdev.flatlaf; + + exports com.formdev.flatlaf.fonts.roboto_mono; + + opens com.formdev.flatlaf.fonts.roboto_mono; +} diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/LICENSE.txt b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/LICENSE.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Bold.ttf b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Bold.ttf new file mode 100644 index 00000000..8eff26c1 Binary files /dev/null and b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Bold.ttf differ diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-BoldItalic.ttf b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-BoldItalic.ttf new file mode 100644 index 00000000..99299640 Binary files /dev/null and b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-BoldItalic.ttf differ diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Italic.ttf b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Italic.ttf new file mode 100644 index 00000000..cf2b5b39 Binary files /dev/null and b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Italic.ttf differ diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Regular.ttf b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Regular.ttf new file mode 100644 index 00000000..d9371a1b Binary files /dev/null and b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/main/resources/com/formdev/flatlaf/fonts/roboto_mono/RobotoMono-Regular.ttf differ diff --git a/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/test/java/com/formdev/flatlaf/fonts/roboto_mono/TestFlatRobotoMonoFont.java b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/test/java/com/formdev/flatlaf/fonts/roboto_mono/TestFlatRobotoMonoFont.java new file mode 100644 index 00000000..ea95468c --- /dev/null +++ b/flatlaf-fonts/flatlaf-fonts-roboto-mono/src/test/java/com/formdev/flatlaf/fonts/roboto_mono/TestFlatRobotoMonoFont.java @@ -0,0 +1,44 @@ +/* + * Copyright 2023 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.fonts.roboto_mono; + +import java.awt.Font; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Karl Tauber + */ +class TestFlatRobotoMonoFont +{ + @Test + void testFont() { + FlatRobotoMonoFont.install(); + + testFont( FlatRobotoMonoFont.FAMILY, Font.PLAIN, 13 ); + testFont( FlatRobotoMonoFont.FAMILY, Font.ITALIC, 13 ); + testFont( FlatRobotoMonoFont.FAMILY, Font.BOLD, 13 ); + testFont( FlatRobotoMonoFont.FAMILY, Font.BOLD | Font.ITALIC, 13 ); + } + + private void testFont( String family, int style, int size ) { + Font actual = new Font( family, style, size ); + assertEquals( family, actual.getFamily() ); + assertEquals( style, actual.getStyle() ); + assertEquals( size, actual.getSize() ); + } +} diff --git a/flatlaf-testing/build.gradle.kts b/flatlaf-testing/build.gradle.kts index f1e82360..547cae96 100644 --- a/flatlaf-testing/build.gradle.kts +++ b/flatlaf-testing/build.gradle.kts @@ -27,6 +27,7 @@ dependencies { implementation( project( ":flatlaf-fonts-inter" ) ) implementation( project( ":flatlaf-fonts-jetbrains-mono" ) ) implementation( project( ":flatlaf-fonts-roboto" ) ) + implementation( project( ":flatlaf-fonts-roboto-mono" ) ) implementation( project( ":flatlaf-swingx" ) ) implementation( project( ":flatlaf-jide-oss" ) ) implementation( project( ":flatlaf-intellij-themes" ) ) diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java index 84b94a29..acfe6321 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java @@ -25,6 +25,7 @@ import javax.swing.*; import com.formdev.flatlaf.fonts.inter.FlatInterFont; import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont; import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont; +import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont; import com.formdev.flatlaf.util.FontUtils; import com.formdev.flatlaf.util.UIScale; import net.miginfocom.swing.*; @@ -40,6 +41,7 @@ public class FlatFontsTest FlatInterFont.installLazy(); FlatJetBrainsMonoFont.installLazy(); FlatRobotoFont.installLazy(); + FlatRobotoMonoFont.installLazy(); FlatTestFrame frame = FlatTestFrame.create( args, "FlatFontsTest" ); frame.showFrame( FlatFontsTest::new ); diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java index 94f6b8da..25da1b51 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.java @@ -31,6 +31,7 @@ import com.formdev.flatlaf.FlatSystemProperties; import com.formdev.flatlaf.fonts.inter.FlatInterFont; import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont; import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont; +import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont; import com.formdev.flatlaf.util.FontUtils; import com.formdev.flatlaf.util.Graphics2DProxy; import com.formdev.flatlaf.util.HiDPIUtils; @@ -53,6 +54,7 @@ public class FlatPaintingStringTest FlatInterFont.installLazy(); FlatJetBrainsMonoFont.installLazy(); FlatRobotoFont.installLazy(); + FlatRobotoMonoFont.installLazy(); FlatTestFrame frame = FlatTestFrame.create( args, "FlatPaintingStringTest" ); @@ -91,7 +93,7 @@ public class FlatPaintingStringTest // monospaced "Monospaced", "Consolas", "Courier New", "Menlo", "Liberation Mono", "Ubuntu Mono", - FlatJetBrainsMonoFont.FAMILY, + FlatJetBrainsMonoFont.FAMILY, FlatRobotoMonoFont.FAMILY, }; Arrays.sort( families, String.CASE_INSENSITIVE_ORDER ); DefaultComboBoxModel model = new DefaultComboBoxModel<>(); @@ -242,7 +244,7 @@ public class FlatPaintingStringTest panel1.add(fontLabel, "cell 0 0"); //---- fontField ---- - fontField.setMaximumRowCount(20); + fontField.setMaximumRowCount(25); fontField.addActionListener(e -> fontChanged()); panel1.add(fontField, "cell 1 0"); diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.jfd index b3bfd328..2f6c5d4c 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingStringTest.jfd @@ -27,7 +27,7 @@ new FormModel { } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "fontField" - "maximumRowCount": 20 + "maximumRowCount": 25 auxiliary() { "JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.typeParameters": "String" diff --git a/flatlaf-theme-editor/build.gradle.kts b/flatlaf-theme-editor/build.gradle.kts index 2da93a59..89245fc7 100644 --- a/flatlaf-theme-editor/build.gradle.kts +++ b/flatlaf-theme-editor/build.gradle.kts @@ -25,6 +25,7 @@ dependencies { implementation( project( ":flatlaf-fonts-inter" ) ) implementation( project( ":flatlaf-fonts-jetbrains-mono" ) ) implementation( project( ":flatlaf-fonts-roboto" ) ) + implementation( project( ":flatlaf-fonts-roboto-mono" ) ) implementation( "com.miglayout:miglayout-swing:5.3" ) implementation( "com.fifesoft:rsyntaxtextarea:3.1.4" ) @@ -38,6 +39,7 @@ tasks { dependsOn( ":flatlaf-fonts-inter:jar" ) dependsOn( ":flatlaf-fonts-jetbrains-mono:jar" ) dependsOn( ":flatlaf-fonts-roboto:jar" ) + dependsOn( ":flatlaf-fonts-roboto-mono:jar" ) manifest { attributes( "Main-Class" to "com.formdev.flatlaf.themeeditor.FlatLafThemeEditor" ) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java index d54dbb1d..12c9d586 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java @@ -66,6 +66,7 @@ import com.formdev.flatlaf.extras.components.*; import com.formdev.flatlaf.fonts.inter.FlatInterFont; import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont; import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont; +import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont; import com.formdev.flatlaf.icons.FlatClearIcon; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.StringUtils; @@ -111,6 +112,7 @@ class FlatThemeFileEditor FlatInterFont.installLazy(); FlatJetBrainsMonoFont.installLazy(); FlatRobotoFont.installLazy(); + FlatRobotoMonoFont.installLazy(); FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.themeeditor" ); diff --git a/settings.gradle.kts b/settings.gradle.kts index bb809141..016008c5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,6 +28,7 @@ include( "flatlaf-theme-editor" ) includeProject( "flatlaf-fonts-inter", "flatlaf-fonts/flatlaf-fonts-inter" ) includeProject( "flatlaf-fonts-jetbrains-mono", "flatlaf-fonts/flatlaf-fonts-jetbrains-mono" ) includeProject( "flatlaf-fonts-roboto", "flatlaf-fonts/flatlaf-fonts-roboto" ) +includeProject( "flatlaf-fonts-roboto-mono", "flatlaf-fonts/flatlaf-fonts-roboto-mono" ) includeProject( "flatlaf-natives-windows", "flatlaf-natives/flatlaf-natives-windows" ) includeProject( "flatlaf-natives-linux", "flatlaf-natives/flatlaf-natives-linux" )