之前记得某些情况下,Font.canDisplay()有问题。今天试了一下Times New Roman字体对泰的结果,得到了false,说明正确工作了。
那么Font.canDisplay()是如何生效的?
调用过程
Font.canDisplay(char) line: 2108
TrueTypeFont(Font2D).canDisplay(char) line: 545
TrueTypeGlyphMapper(CharToGlyphMapper).canDisplay(char) line: 55
这个函数中,charToGlyph()得到字符图像索引,如果是-1就是无法显示。
如何得到图像索引
TrueTypeGlyphMapper.charToGlyph(char) line: 149
TrueTypeGlyphMapper.getGlyphFromCMAP(int) line: 84
CMap$CMapFormat4.getGlyph(int) line: 587
先通过二分法,找到char对应的index。
如果index合法(落在startCount和endCount之间),就可以找到索引。否则返回0。
canDisplay()
如果返回的glyph与missingGlyph不同,就可以显示。相同肯定无法显示。
missingGlyph初始化为-1,TrueTypeGlyphMapper()中初始化为0。