changeset 1229:a33222e53611

6753173: No need to read all the TrueType 'post' table to get underline info Reviewed-by: igor, jgodinez
author prr
date Thu, 02 Apr 2009 10:16:53 -0700
parents 0c69e3ba15f4
children e3b4eb55a696
files src/share/classes/sun/font/TrueTypeFont.java
diffstat 1 files changed, 18 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/sun/font/TrueTypeFont.java	Tue Mar 24 10:53:04 2009 -0700
+++ b/src/share/classes/sun/font/TrueTypeFont.java	Thu Apr 02 10:16:53 2009 -0700
@@ -543,17 +543,6 @@
         ByteBuffer os2_Table = getTableBuffer(os_2Tag);
         setStyle(os2_Table);
         setCJKSupport(os2_Table);
-
-        ByteBuffer head_Table = getTableBuffer(headTag);
-        int upem = -1;
-        if (head_Table != null && head_Table.capacity() >= 18) {
-            ShortBuffer sb = head_Table.asShortBuffer();
-            upem = sb.get(9) & 0xffff;
-        }
-        setStrikethroughMetrics(os2_Table, upem);
-
-        ByteBuffer post_Table = getTableBuffer(postTag);
-        setUnderlineMetrics(post_Table, upem);
     }
 
     /* The array index corresponds to a bit offset in the TrueType
@@ -1011,8 +1000,26 @@
     }
 
     public void getStyleMetrics(float pointSize, float[] metrics, int offset) {
+
+        if (ulSize == 0f && ulPos == 0f) {
+
+            ByteBuffer head_Table = getTableBuffer(headTag);
+            int upem = -1;
+            if (head_Table != null && head_Table.capacity() >= 18) {
+                ShortBuffer sb = head_Table.asShortBuffer();
+                upem = sb.get(9) & 0xffff;
+            }
+
+            ByteBuffer os2_Table = getTableBuffer(os_2Tag);
+            setStrikethroughMetrics(os2_Table, upem);
+
+            ByteBuffer post_Table = getTableBuffer(postTag);
+            setUnderlineMetrics(post_Table, upem);
+        }
+
         metrics[offset] = stPos * pointSize;
         metrics[offset+1] = stSize * pointSize;
+
         metrics[offset+2] = ulPos * pointSize;
         metrics[offset+3] = ulSize * pointSize;
     }