diff options
author | Francis Kung <fkung@redhat.com> | 2007-04-12 19:27:46 +0000 |
---|---|---|
committer | Francis Kung <fkung@redhat.com> | 2007-04-12 19:27:46 +0000 |
commit | c048fccb0d3f4b79bd003d8d62394547711e3e00 (patch) | |
tree | c8045da47c62a230078326e42e6de4eb773f33ee /gnu/java/awt/peer | |
parent | bd5605425b5ce0c0b62dcb31fd36461cb4ef400f (diff) | |
download | classpath-c048fccb0d3f4b79bd003d8d62394547711e3e00.tar.gz |
2007-04-12 Francis Kung <fkung@redhat.com>
PR 23887
* gnu/java/awt/peer/gtk/FreetypeGlyphVector.java
(getGlyphLogicalBounds): Fix number of coordinates in transform call.
(performDefaultLayout): Respect transformation in font attributes.
* javax/swing/plaf/basic/BasicProgressBarUI.java
(getStringPlacement): Handle vertical orientations.
(paintString): Space vertical text properly.
Diffstat (limited to 'gnu/java/awt/peer')
-rw-r--r-- | gnu/java/awt/peer/gtk/FreetypeGlyphVector.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java b/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java index 280f3e6fb..617d9f911 100644 --- a/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java +++ b/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java @@ -43,6 +43,8 @@ import java.awt.font.FontRenderContext; import java.awt.font.GlyphJustificationInfo; import java.awt.font.GlyphMetrics; import java.awt.font.GlyphVector; +import java.awt.font.TextAttribute; +import java.awt.font.TransformAttribute; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; import java.awt.geom.Point2D; @@ -313,6 +315,24 @@ public class FreetypeGlyphVector extends GlyphVector } glyphPositions[nGlyphs * 2] = x; glyphPositions[nGlyphs * 2 + 1] = y; + + // Apply any transform that may be in the font's attributes + TransformAttribute ta; + ta = (TransformAttribute)font.getAttributes().get(TextAttribute.TRANSFORM); + if (ta != null) + { + AffineTransform tx = ta.getTransform(); + + // Transform glyph positions + tx.transform(glyphPositions, 0, glyphPositions, 0, + glyphPositions.length / 2); + + // Also store per-glyph scale/shear/rotate (but not translation) + double[] matrix = new double[4]; + tx.getMatrix(matrix); + AffineTransform deltaTx = new AffineTransform(matrix); + Arrays.fill(glyphTransforms, deltaTx); + } } /** @@ -375,7 +395,7 @@ public class FreetypeGlyphVector extends GlyphVector p.getY() + r.getY() + r.getHeight()}; if (glyphTransforms[glyphIndex] != null) - glyphTransforms[glyphIndex].transform(bounds, 0, bounds, 0, 4); + glyphTransforms[glyphIndex].transform(bounds, 0, bounds, 0, 2); return new Rectangle2D.Double(bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]); |