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: 6683472
Votes 0
Synopsis Incorrect handling of translation component of font transform.
Category java:classes_2d
Reported Against
Release Fixed 7(b28), 6u10(b22) (Bug ID:2160829)
State 10-Fix Delivered, Verified, bug
Priority: 3-Medium
Related Bugs 6687298
Submit Date 02-APR-2008
Description
The program below shows that when a font has a transformation such
that it includes a rotation and translation component, that TextLayout
and drawString disagree on the rendering location for that text.

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.HashMap;
import java.awt.font.*;
import java.awt.event.*;

public class txbug extends Component {

    public Dimension getPreferredSize() {
            return new Dimension(500, 300);
    }
    
    public void paint(Graphics g) {

        Graphics2D g2d = (Graphics2D)g;
        int x=130, y=130;

        String s = "Text";
        Font fnt = new Font("SansSerif", Font.PLAIN, 60);
        g.setFont(fnt);

        int xt=50, yt=90;
        AffineTransform aff = AffineTransform.getTranslateInstance(xt, yt);
        aff.rotate(90.0 * Math.PI/180.0);

        g.drawLine(x+xt-10, y+yt-10, x+xt+10, y+yt+10);
        g.drawLine(x+xt+10, y+yt-10, x+xt-10, y+yt+10);

        fnt = fnt.deriveFont(Font.PLAIN, aff);
        g.setFont(fnt);
        g.setColor(Color.blue);
        g.drawString(s, x, y);
        
        g.setColor(Color.red);
        FontRenderContext frc = g2d.getFontRenderContext();
        HashMap attrMap = new HashMap();
        attrMap.put(TextAttribute.STRIKETHROUGH,
                    TextAttribute.STRIKETHROUGH_ON);
        fnt = fnt.deriveFont(attrMap);
        TextLayout tl = new TextLayout(s, fnt, frc);
        tl.draw(g2d, (float)x, (float)y);
    }
	
    public static void main(String[] args) {
        
        JFrame f = new JFrame("Rotated font with translation");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        
        f.getContentPane().add(new txbug());
        f.setSize(600, 400);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }
}
Posted Date : 2008-04-02 17:11:15.0
Work Around
N/A
Evaluation
drawString is handling this by translating the rendering position.
TextLayout, because it handles multiple runs of text, tries to be compatible,
but is incorrectly extracting the translation.
Posted Date : 2008-04-02 17:11:15.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang