summaryrefslogtreecommitdiff
path: root/gnu/java/awt/peer
diff options
context:
space:
mode:
authorFrancis Kung <fkung@redhat.com>2007-04-12 19:27:46 +0000
committerFrancis Kung <fkung@redhat.com>2007-04-12 19:27:46 +0000
commitc048fccb0d3f4b79bd003d8d62394547711e3e00 (patch)
treec8045da47c62a230078326e42e6de4eb773f33ee /gnu/java/awt/peer
parentbd5605425b5ce0c0b62dcb31fd36461cb4ef400f (diff)
downloadclasspath-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.java22
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]);