<div dir="ltr"><div><div>Hi everyone, </div><div><br></div><div>I am doing GUI development based on Java on Ubuntu, and I find some problems in it.<br></div><div>Would it be possible for me to discuss with you?</div><div><br></div><div>1. There is no fallback font on Windows and Linux when using physical fonts.</div><div>The FileFont class does not implements FontSubstitution interface, so there are no substituting glyphs from another font at render time(in GlyphLayout::layout).</div><div>For example, when "jTextField.setFont(new Font("Ubuntu Mono", Font.PLAIN, 20))" on Ubuntu, all the CJK characters will show as tofu in this jTextField. Almost every font does not contain all possible inputs, adding some fallbacks font may help those who don't just use one language.</div></div><div><br></div><div>2. The fonts that JDK does not found are mapped to the “Dialog” font.</div><div>As <a href="https://docs.oracle.com/en/java/javase/21/docs/api/java.desktop/java/awt/Font.html#%3Cinit%3E(java.lang.String,int,int)">https://docs.oracle.com/en/java/javase/21/docs/api/java.desktop/java/awt/Font.html#%3Cinit%3E(java.lang.String,int,int)</a> shows, If the name parameter represents something other than a logical font, i.e. is interpreted as a physical font face or family, and this cannot be mapped by the implementation to a physical font or a compatible alternative, then the font system will map the Font instance to "Dialog".</div><div>On Linux, get map fonts by fontconfig may be more flexible, more configurable.<br></div><div><br></div><div>For the two questions above, I have a preliminary patch.<br></div><div><br></div><div><font color="#000000" face="arial, sans-serif">I added a new fallback form “FONTCONFIGURATION_FALLBACK” and implemented it for Linux system, it c</font>reates a composite font by obtaining map fonts info for the specified name and style through fontconfig<font color="#000000" face="arial, sans-serif">.</font></div><div><div><font face="arial, sans-serif" color="#000000">And I make the FileFont class implement the FontSubstitution interface, reuse the </font><span style="color:rgb(0,0,0);font-family:arial,sans-serif">FONTCONFIGURATION_FALLBACK code.</span></div></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif"><br></span></div><div><span style="color:rgb(0,0,0);font-family:arial,sans-serif"><br></span></div><div><br></div></div>