# HG changeset patch # User prr # Date 1238692613 25200 # Node ID f87942d1edba62f691a2a3dad8b9562f7508549f # Parent f5bcb8ee655580726429b285bb958392dcd94ed4 6753173: No need to read all the TrueType 'post' table to get underline info Reviewed-by: igor, jgodinez diff -r f5bcb8ee6555 -r f87942d1edba jdk/src/share/classes/sun/font/TrueTypeFont.java --- a/jdk/src/share/classes/sun/font/TrueTypeFont.java Tue Mar 24 10:53:04 2009 -0700 +++ b/jdk/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; }