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();