6753173: No need to read all the TrueType 'post' table to get underline info
authorprr
Thu, 02 Apr 2009 10:16:53 -0700
changeset 1179a33222e53611
parent 1003 0c69e3ba15f4
child 1180 e3b4eb55a696
6753173: No need to read all the TrueType 'post' table to get underline info
Reviewed-by: igor, jgodinez
src/share/classes/sun/font/TrueTypeFont.java
     1.1 --- a/src/share/classes/sun/font/TrueTypeFont.java	Tue Mar 24 10:53:04 2009 -0700
     1.2 +++ b/src/share/classes/sun/font/TrueTypeFont.java	Thu Apr 02 10:16:53 2009 -0700
     1.3 @@ -543,17 +543,6 @@
     1.4          ByteBuffer os2_Table = getTableBuffer(os_2Tag);
     1.5          setStyle(os2_Table);
     1.6          setCJKSupport(os2_Table);
     1.7 -
     1.8 -        ByteBuffer head_Table = getTableBuffer(headTag);
     1.9 -        int upem = -1;
    1.10 -        if (head_Table != null && head_Table.capacity() >= 18) {
    1.11 -            ShortBuffer sb = head_Table.asShortBuffer();
    1.12 -            upem = sb.get(9) & 0xffff;
    1.13 -        }
    1.14 -        setStrikethroughMetrics(os2_Table, upem);
    1.15 -
    1.16 -        ByteBuffer post_Table = getTableBuffer(postTag);
    1.17 -        setUnderlineMetrics(post_Table, upem);
    1.18      }
    1.19  
    1.20      /* The array index corresponds to a bit offset in the TrueType
    1.21 @@ -1011,8 +1000,26 @@
    1.22      }
    1.23  
    1.24      public void getStyleMetrics(float pointSize, float[] metrics, int offset) {
    1.25 +
    1.26 +        if (ulSize == 0f && ulPos == 0f) {
    1.27 +
    1.28 +            ByteBuffer head_Table = getTableBuffer(headTag);
    1.29 +            int upem = -1;
    1.30 +            if (head_Table != null && head_Table.capacity() >= 18) {
    1.31 +                ShortBuffer sb = head_Table.asShortBuffer();
    1.32 +                upem = sb.get(9) & 0xffff;
    1.33 +            }
    1.34 +
    1.35 +            ByteBuffer os2_Table = getTableBuffer(os_2Tag);
    1.36 +            setStrikethroughMetrics(os2_Table, upem);
    1.37 +
    1.38 +            ByteBuffer post_Table = getTableBuffer(postTag);
    1.39 +            setUnderlineMetrics(post_Table, upem);
    1.40 +        }
    1.41 +
    1.42          metrics[offset] = stPos * pointSize;
    1.43          metrics[offset+1] = stSize * pointSize;
    1.44 +
    1.45          metrics[offset+2] = ulPos * pointSize;
    1.46          metrics[offset+3] = ulSize * pointSize;
    1.47      }