Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6686365
Votes 0
Synopsis bolded zero width space has non zero width in FM or LCD modes
Category java:classes_2d
Reported Against
Release Fixed 7(b28)
State 10-Fix Delivered, bug
Priority: 4-Low
Related Bugs
Submit Date 09-APR-2008
Description
For algorithmically bolded Lucida Sans Regular \u200b char - which is a zero width
space - will in some cases report its advance to be 1 pixel.

Although this was first seen with LCD_HRGB, it is also reproducible in AA and BW modes if 
fractional metrics is enabled. Problem is reproducible with T2K rasterizer.

==========================
import java.awt.*;
import java.awt.image.*;

public class met {
    public static void main(String[] s) {
        BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);

        Graphics g = bi.getGraphics();

        g.setFont(new Font("monospaced", Font.BOLD, 14));
        //g.setFont(new Font("Lucida Sans Regular", Font.BOLD, 14));
        FontMetrics fm = g.getFontMetrics();
        System.out.println("Bold: " + fm.charWidth('\u200b'));
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                                 RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
        fm = g.getFontMetrics();
        System.out.println("Bold + LCD: "+fm.charWidth('\u200b'));
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                                 RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                                 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        fm = g.getFontMetrics();
        System.out.println("Bold FM OFF + AA: " + fm.charWidth('\u200b'));
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                                 RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                                 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        fm = g.getFontMetrics();
        System.out.println("Bold FM ON + AA: " + fm.charWidth('\u200b'));
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
                                 RenderingHints.VALUE_FRACTIONALMETRICS_ON);
        ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                                 RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
        fm = g.getFontMetrics();
        System.out.println("Bold FM ON + nonAA: " + fm.charWidth('\u200b'));

        System.out.println("All printed values should be 0 to PASS");
    }
}
Posted Date : 2008-04-09 18:19:57.0
Work Around
N/A
Evaluation
Internally we perform number of adjustments of phantom points and advances to compensate for style changes. However, zero width chars is special case and style adjustments should not be applicable to them.
Posted Date : 2008-04-09 18:21:56.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang