diff options
author | Sven de Marothy <sven@physto.se> | 2006-06-11 03:09:02 +0000 |
---|---|---|
committer | Sven de Marothy <sven@physto.se> | 2006-06-11 03:09:02 +0000 |
commit | b614023129938c90fe4b2f2fa8d2cb94b4d9127d (patch) | |
tree | cb64f91164d658efa950b16f859e17c8a1e58fb8 | |
parent | b033b5e5056ac2d432b8f32fd3971c5c53f8165f (diff) | |
download | classpath-b614023129938c90fe4b2f2fa8d2cb94b4d9127d.tar.gz |
2006-06-11 Sven de Marothy <sven@physto.se>
* java/awt/font/TextLayout.java
(getLogicalHighlightShape): Add check.
* gnu/java/awt/peer/gtk/FreetypeGlyphVector.java
(getLogicalBounds, getGlyphPositions): Cache bounds, positions.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/FreetypeGlyphVector.java | 17 | ||||
-rw-r--r-- | java/awt/font/TextLayout.java | 11 |
3 files changed, 30 insertions, 5 deletions
@@ -1,3 +1,10 @@ +2006-06-11 Sven de Marothy <sven@physto.se> + + * java/awt/font/TextLayout.java + (getLogicalHighlightShape): Add check. + * gnu/java/awt/peer/gtk/FreetypeGlyphVector.java + (getLogicalBounds, getGlyphPositions): Cache bounds, positions. + 2006-06-11 Raif S. Naffah <raif@swiftdsl.com.au> * gnu/javax/security/auth/login/ConfigFileParser.java (validateClassName): diff --git a/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java b/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java index 48ecbc0d2..1f5c455dd 100644 --- a/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java +++ b/gnu/java/awt/peer/gtk/FreetypeGlyphVector.java @@ -56,6 +56,9 @@ public class FreetypeGlyphVector extends GlyphVector private Font font; private GdkFontPeer peer; // ATTN: Accessed from native code. + private Rectangle2D logicalBounds; + + private float[] glyphPositions; /** * The string represented by this GlyphVector. */ @@ -203,6 +206,9 @@ public class FreetypeGlyphVector extends GlyphVector */ public void performDefaultLayout() { + logicalBounds = null; // invalidate caches. + glyphPositions = null; + whiteSpace = new boolean[ nGlyphs ]; glyphTransforms = new AffineTransform[ nGlyphs ]; double x = 0; @@ -303,6 +309,9 @@ public class FreetypeGlyphVector extends GlyphVector public float[] getGlyphPositions(int beginGlyphIndex, int numEntries, float[] positionReturn) { + if( glyphPositions != null ) + return glyphPositions; + float[] rval; if( positionReturn == null ) @@ -317,6 +326,7 @@ public class FreetypeGlyphVector extends GlyphVector rval[i * 2 + 1] = (float)p.getY(); } + glyphPositions = rval; return rval; } @@ -344,6 +354,8 @@ public class FreetypeGlyphVector extends GlyphVector { if( nGlyphs == 0 ) return new Rectangle2D.Double(0, 0, 0, 0); + if( logicalBounds != null ) + return logicalBounds; Rectangle2D rect = (Rectangle2D)getGlyphLogicalBounds( 0 ); for( int i = 1; i < nGlyphs; i++ ) @@ -354,6 +366,7 @@ public class FreetypeGlyphVector extends GlyphVector rect = rect.createUnion( r2 ); } + logicalBounds = rect; return rect; } @@ -413,6 +426,8 @@ public class FreetypeGlyphVector extends GlyphVector // FIXME: Scaling, etc.? glyphTransforms[ glyphIndex ].setToTranslation( newPos.getX(), newPos.getY() ); + logicalBounds = null; + glyphPositions = null; } /** @@ -421,5 +436,7 @@ public class FreetypeGlyphVector extends GlyphVector public void setGlyphTransform(int glyphIndex, AffineTransform newTX) { glyphTransforms[ glyphIndex ].setTransform( newTX ); + logicalBounds = null; + glyphPositions = null; } } diff --git a/java/awt/font/TextLayout.java b/java/awt/font/TextLayout.java index 966718c52..4f8c1c644 100644 --- a/java/awt/font/TextLayout.java +++ b/java/awt/font/TextLayout.java @@ -391,11 +391,12 @@ public final class TextLayout implements Cloneable double advance = 0; // go to first run - while( runIndices[i + 1][1] < firstEndpoint ) - { - advance += runs[i].getLogicalBounds().getWidth(); - i++; - } + if( i > 0 ) + while( runIndices[i + 1][1] < firstEndpoint ) + { + advance += runs[i].getLogicalBounds().getWidth(); + i++; + } int j = 0; // index into the run. if( runIndices[i][1] - runIndices[i][0] > 1 ) |