From 8b6fca5d9fd5f66a196b03ebdfecae6017d6377e Mon Sep 17 00:00:00 2001 From: Phil Race Date: Thu, 2 Apr 2009 10:16:53 -0700 Subject: [PATCH] 6753173: No need to read all the TrueType 'post' table to get underline info Reviewed-by: igor, jgodinez --- .../share/classes/sun/font/TrueTypeFont.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/jdk/src/share/classes/sun/font/TrueTypeFont.java b/jdk/src/share/classes/sun/font/TrueTypeFont.java index 5d9477b6e92..75318514b29 100644 --- a/jdk/src/share/classes/sun/font/TrueTypeFont.java +++ b/jdk/src/share/classes/sun/font/TrueTypeFont.java @@ -543,17 +543,6 @@ public class TrueTypeFont extends FileFont { 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 class TrueTypeFont extends FileFont { } 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; }