modules/graphics/src/main/java/com/sun/javafx/font/PrismFontFile.java
Print this page
@@ -257,10 +257,30 @@
public Map getStrikeMap() {
return strikeMap;
}
+ /* Used to determine if this size has embedded bitmaps, which
+ * for CJK fonts should be used in preference to LCD glyphs.
+ */
+ public boolean useEmbeddedBitmapsForSize(int ptSize) {
+ Buffer eblcTable = readTable(EBLCTag);
+ if (eblcTable == null) return false;
+ int numSizes = eblcTable.getInt(4);
+ /* The bitmapSizeTable's start at offset of 8.
+ * Each bitmapSizeTable entry is 48 bytes.
+ * The offset of ppemY in the entry is 45.
+ */
+ for (int i=0;i<numSizes;i++) {
+ int ppemY = eblcTable.get(8+(i*48)+45) & 0xff;
+ if (ppemY == ptSize) {
+ return true;
+ }
+ }
+ return false;
+ }
+
protected abstract PrismFontStrike createStrike(float size,
BaseTransform transform,
int aaMode,
FontStrikeDesc desc);
@@ -339,13 +359,13 @@
synchronized Buffer readTable(int tag) {
Buffer buffer = null;
boolean openedFile = false;
try {
- openedFile = filereader.openFile();
DirectoryEntry tagDE = getDirectoryEntry(tag);
if (tagDE != null) {
+ openedFile = filereader.openFile();
buffer = filereader.readBlock(tagDE.offset, tagDE.length);
}
} catch (Exception e) {
if (PrismFontFactory.debugFonts) {
e.printStackTrace();