## org.apache.batik.gvt.text
Class GlyphLayout

    java.lang.Object
      org.apache.batik.gvt.text.GlyphLayout

All Implemented Interfaces:
  TextSpanLayout

public class GlyphLayout
extends java.lang.Object
implements TextSpanLayout

Implementation of TextSpanLayout which uses java.awt.font.GlyphVector.

See Also:
  `TextSpanLayout`

Field Summary
`static float` `eps`
`static java.text.AttributedCharacterIterator.Attribute` `FLOW_EMPTY_PARAGRAPH`
`static java.text.AttributedCharacterIterator.Attribute` `FLOW_LINE_BREAK`
`static java.text.AttributedCharacterIterator.Attribute` `FLOW_PARAGRAPH`
`static java.text.AttributedCharacterIterator.Attribute` `HORIZONTAL_ORIENTATION_ANGLE`
`static java.text.AttributedCharacterIterator.Attribute` `TEXT_COMPOUND_DELIMITER`
`static java.text.AttributedCharacterIterator.Attribute` `VERTICAL_ORIENTATION`
`static java.text.AttributedCharacterIterator.Attribute` `VERTICAL_ORIENTATION_ANGLE`

Fields inherited from interface org.apache.batik.gvt.text.TextSpanLayout
`DECORATION_ALL, DECORATION_OVERLINE, DECORATION_STRIKETHROUGH, DECORATION_UNDERLINE`

Constructor Summary
`GlyphLayout(java.text.AttributedCharacterIterator aci, int[] charMap, java.awt.geom.Point2D offset, java.awt.font.FontRenderContext frc)` Creates the specified text layout using the specified AttributedCharacterIterator and rendering context.

Method Summary
`static void` `addPtsToPath(java.awt.geom.GeneralPath shape, java.awt.geom.Point2D.Float[] topPts, java.awt.geom.Point2D.Float[] botPts, int numPts)`
`protected void` `adjustTextSpacing()` Does any spacing adjustments that may have been specified.
`protected void` `applyStretchTransform(boolean stretchGlyphs)` Stretches the text so that it becomes the specified length.
`protected void` `doExplicitGlyphLayout()` Explicitly lays out each of the glyphs in the glyph vector.
`protected void` `doPathLayout()` If this layout is on a text path, positions the characters along the path.
`protected java.awt.geom.Point2D` `doSpacing(java.lang.Float kern, java.lang.Float letterSpacing, java.lang.Float wordSpacing)` Performs any spacing adjustments required and returns the new advance value.
`void` `draw(java.awt.Graphics2D g2d)` Paints the text layout using the specified Graphics2D and rendering context.
`static boolean` `epsEQ(double a, double b)`
`java.awt.geom.Point2D` `getAdvance2D()` Returns the current text position at the completion of glyph layout.
`java.awt.geom.Rectangle2D` `getBounds2D()` Returns the rectangular bounds of the completed glyph layout.
`int` `getCharacterCount(int startGlyphIndex, int endGlyphIndex)` Returns the number of chars represented by the glyphs within the specified range.
`double` `getComputedOrientationAngle(int index)` Return the angle value according to the orientation of the character.
`java.awt.Shape` `getDecorationOutline(int decorationType)` Returns the outline of the specified decorations on the glyphs,
`protected GVTFont` `getFont()` Returns the GVTFont to use when rendering the specified character iterator.
`java.awt.geom.Rectangle2D` `getGeometricBounds()` Returns the rectangular bounds of the completed glyph layout, inclusive of "decoration" (underline, overline, etc.)
`float[]` `getGlyphAdvances()` Returns the advance between each glyph in text progression direction.
`int` `getGlyphCount()` Returns the number of glyphs in this layout.
`int` `getGlyphIndex(int charIndex)` Returns the index of the first glyph that has the specified char index.
`GVTGlyphMetrics` `getGlyphMetrics(int glyphIndex)` Returns the Metrics for a particular glyph.
`protected int` `getGlyphOrientationAngle()` Returns the value of the vertical glyph orientation angle.
`GVTGlyphVector` `getGlyphVector()` Return the glyph vector asociated to this layout.
`java.awt.Shape` `getHighlightShape(int beginCharIndex, int endCharIndex)` Returns a Shape which encloses the currently selected glyphs as specified by the character indices.
`int` `getLastGlyphIndex(int charIndex)` Returns the index of the last glyph that has the specified char index.
`java.awt.geom.Point2D` `getOffset()` Returns the current text position at the beginning of glyph layout, before the application of explicit glyph positioning attributes.
`java.awt.Shape` `getOutline()` Returns the outline of the completed glyph layout.
`protected java.awt.Shape` `getOverlineShape()` Returns a shape describing the overline decoration for a given ACI.
`protected java.awt.Shape` `getStrikethroughShape()` Returns a shape describing the strikethrough line for a given ACI.
`java.awt.geom.Point2D` `getTextPathAdvance()` Returns the position to used when drawing a text run after this one.
`protected java.awt.Shape` `getUnderlineShape()` Returns a shape describing the strikethrough line for a given ACI.
`boolean` `hasCharacterIndex(int index)` Return true is the character index is represented by glyphs in this layout.
`TextHit` `hitTestChar(float x, float y)` Perform hit testing for coordinate at x, y.
`boolean` `isAltGlyph()` Return true if this text run represents an alt glyph.
`protected boolean` `isGlyphOrientationAuto()` Returns whether or not the vertical glyph orientation value is "auto".
`protected boolean` `isLatinChar(char c)` Returns true if the specified character is within one of the Latin unicode character blocks.
`boolean` `isLeftToRight()` Returns true if the text direction in this layout is from left to right.
`boolean` `isOnATextPath()` Returns true if this layout in on a text path.
`boolean` `isVertical()` Returns true if the advance direction of this text is vertical.
`static void` `layoutChunk(GVTGlyphVector gv, java.awt.geom.Point2D origin, int justification, java.util.List lineInfos)`
`static int` `makeConvexHull(java.awt.geom.Point2D.Float[] pts, int numPts)`
`static void` `mergeAreas(java.awt.geom.GeneralPath shape, java.awt.geom.Area[] shapes, int nShapes)`
`void` `setOffset(java.awt.geom.Point2D offset)` Sets the text position used for the implicit origin of glyph layout.
`void` `setScale(float xScale, float yScale, boolean adjSpacing)` Sets the scaling factor to use for string.
`static void` `textWrapTextChunk(java.text.AttributedCharacterIterator[] acis, java.util.List chunkLayouts, java.util.List flowRects)` This will wrap the text associated with `aci` and `layouts`.
`static void` `updateVerticalAlignOffset(java.awt.geom.Point2D.Float verticalAlignOffset, RegionInfo region, float maxDescent)` Updates the specified verticalAlignmentOffset using the current alignment rule and the heights of the flow rect and the maximum descent of the text.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### FLOW_LINE_BREAK

    public static final java.text.AttributedCharacterIterator.Attribute FLOW_LINE_BREAK

### FLOW_PARAGRAPH

    public static final java.text.AttributedCharacterIterator.Attribute FLOW_PARAGRAPH

### FLOW_EMPTY_PARAGRAPH

    public static final java.text.AttributedCharacterIterator.Attribute FLOW_EMPTY_PARAGRAPH

### TEXT_COMPOUND_DELIMITER

    public static final java.text.AttributedCharacterIterator.Attribute TEXT_COMPOUND_DELIMITER

### VERTICAL_ORIENTATION

    public static final java.text.AttributedCharacterIterator.Attribute VERTICAL_ORIENTATION

### VERTICAL_ORIENTATION_ANGLE

    public static final java.text.AttributedCharacterIterator.Attribute VERTICAL_ORIENTATION_ANGLE

### HORIZONTAL_ORIENTATION_ANGLE

    public static final java.text.AttributedCharacterIterator.Attribute HORIZONTAL_ORIENTATION_ANGLE

### eps

    public static final float eps

See Also:
  Constant Field Values

Constructor Detail

### GlyphLayout

    public GlyphLayout(java.text.AttributedCharacterIterator aci,
                       int[] charMap,
                       java.awt.geom.Point2D offset,
                       java.awt.font.FontRenderContext frc)

  Creates the specified text layout using the specified AttributedCharacterIterator and rendering context.

Parameters:
  `aci` - the AttributedCharacterIterator whose text is to be laid out
  `charMap` - Indicates how chars in aci map to original text char array.
  `offset` - The offset position of this text layout
  `frc` - the FontRenderContext to use for generating glyphs.

Method Detail

### getGlyphVector

    public GVTGlyphVector getGlyphVector()

  Description copied from interface: `TextSpanLayout`
  Return the glyph vector asociated to this layout.

  Specified by:
    `getGlyphVector` in interface `TextSpanLayout`
  Returns:
    glyph vector

### getOffset

    public java.awt.geom.Point2D getOffset()

  Returns the current text position at the beginning of glyph layout, before the application of explicit glyph positioning attributes.

  Specified by:
    `getOffset` in interface `TextSpanLayout`

### setScale

    public void setScale(float xScale,
                         float yScale,
                         boolean adjSpacing)

  Sets the scaling factor to use for string. if ajdSpacing is true then only the spacing between glyphs will be adjusted otherwise the glyphs and the spaces between them will be adjusted. Only the scale factor in the progression direction is used (x for horizontal text, y for vertical text ).

  Specified by:
    `setScale` in interface `TextSpanLayout`
  Parameters:
    `xScale` - Scale factor to apply in X direction.
    `yScale` - Scale factor to apply in Y direction.
    `adjSpacing` - True if only spaces should be adjusted.

### setOffset

    public void setOffset(java.awt.geom.Point2D offset)

  Sets the text position used for the implicit origin of glyph layout. Ignored if multiple explicit glyph positioning attributes are present in ACI (e.g. if the aci has multiple X or Y values).

  Specified by:
    `setOffset` in interface `TextSpanLayout`

### getGlyphMetrics

    public GVTGlyphMetrics getGlyphMetrics(int glyphIndex)

  Description copied from interface: `TextSpanLayout`
  Returns the Metrics for a particular glyph.

  Specified by:
    `getGlyphMetrics` in interface `TextSpanLayout`

### isVertical

    public boolean isVertical()

  Returns true if the advance direction of this text is vertical.

  Specified by:
    `isVertical` in interface `TextSpanLayout`

### isOnATextPath

    public boolean isOnATextPath()

  Returns true if this layout in on a text path.

  Specified by:
    `isOnATextPath` in interface `TextSpanLayout`

### getGlyphCount

    public int getGlyphCount()

  Returns the number of glyphs in this layout.

  Specified by:
    `getGlyphCount` in interface `TextSpanLayout`

### getCharacterCount

    public int getCharacterCount(int startGlyphIndex,
                                 int endGlyphIndex)

  Returns the number of chars represented by the glyphs within the specified range.

  Specified by:
    `getCharacterCount` in interface `TextSpanLayout`
  Parameters:
    `startGlyphIndex` - The index of the first glyph in the range.
    `endGlyphIndex` - The index of the last glyph in the range.
  Returns:
    The number of chars.

### isLeftToRight

    public boolean isLeftToRight()

  Returns true if the text direction in this layout is from left to right.

  Specified by:
    `isLeftToRight` in interface `TextSpanLayout`

### draw

    public void draw(java.awt.Graphics2D g2d)

  Paints the text layout using the specified Graphics2D and rendering context.

  Specified by:
    `draw` in interface `TextSpanLayout`
  Parameters:
    `g2d` - the Graphics2D to use

### getAdvance2D

    public java.awt.geom.Point2D getAdvance2D()

  Returns the current text position at the completion of glyph layout.

  Specified by:
    `getAdvance2D` in interface `TextSpanLayout`

### getOutline

    public java.awt.Shape getOutline()

  Returns the outline of the completed glyph layout.

  Specified by:
    `getOutline` in interface `TextSpanLayout`

### getGlyphAdvances

    public float[] getGlyphAdvances()

  Description copied from interface: `TextSpanLayout`
  Returns the advance between each glyph in text progression direction.

  Specified by:
    `getGlyphAdvances` in interface `TextSpanLayout`

### getDecorationOutline

    public java.awt.Shape getDecorationOutline(int decorationType)

  Returns the outline of the specified decorations on the glyphs,

  Specified by:
    `getDecorationOutline` in interface `TextSpanLayout`
  Parameters:
    `decorationType` - an integer indicating the type(s) of decorations included in this shape. May be the result of "OR-ing" several values together: e.g. `DECORATION_UNDERLINE | DECORATION_STRIKETHROUGH`

### getBounds2D

    public java.awt.geom.Rectangle2D getBounds2D()

  Returns the rectangular bounds of the completed glyph layout.

  Specified by:
    `getBounds2D` in interface `TextSpanLayout`

### getGeometricBounds

    public java.awt.geom.Rectangle2D getGeometricBounds()

  Returns the rectangular bounds of the completed glyph layout, inclusive of "decoration" (underline, overline, etc.)

  Specified by:
    `getGeometricBounds` in interface `TextSpanLayout`

### getTextPathAdvance

    public java.awt.geom.Point2D getTextPathAdvance()

  Returns the position to used when drawing a text run after this one. It takes into account the text path layout if there is one.

  Specified by:
    `getTextPathAdvance` in interface `TextSpanLayout`

### getGlyphIndex

    public int getGlyphIndex(int charIndex)

  Returns the index of the first glyph that has the specified char index.

  Specified by:
    `getGlyphIndex` in interface `TextSpanLayout`
  Parameters:
    `charIndex` - The original index of the character in the text node's text string.
  Returns:
    The index of the matching glyph in this layout's glyph vector, or -1 if a matching glyph could not be found.

### getLastGlyphIndex

    public int getLastGlyphIndex(int charIndex)

  Returns the index of the last glyph that has the specified char index.

  Parameters:
    `charIndex` - The original index of the character in the text node's text string.
  Returns:
    The index of the matching glyph in this layout's glyph vector, or -1 if a matching glyph could not be found.

### getComputedOrientationAngle

    public double getComputedOrientationAngle(int index)

  Return the angle value according to the orientation of the character.

  Specified by:
    `getComputedOrientationAngle` in interface `TextSpanLayout`
  Parameters:
    `index` - index of the character in the ACI
  Returns:
    rotation angle

### getHighlightShape

    public java.awt.Shape getHighlightShape(int beginCharIndex,
                                            int endCharIndex)

  Returns a Shape which encloses the currently selected glyphs as specified by the character indices.

  Specified by:
    `getHighlightShape` in interface `TextSpanLayout`
  Parameters:
    `beginCharIndex` - the index of the first char in the contiguous selection.
    `endCharIndex` - the index of the last char in the contiguous selection.
  Returns:
    The highlight shape or null if the spacified char range does not overlap with the chars in this layout.

### epsEQ

    public static boolean epsEQ(double a,
                                double b)

### makeConvexHull

    public static int makeConvexHull(java.awt.geom.Point2D.Float[] pts,
                                     int numPts)

### addPtsToPath

    public static void addPtsToPath(java.awt.geom.GeneralPath shape,
                                    java.awt.geom.Point2D.Float[] topPts,
                                    java.awt.geom.Point2D.Float[] botPts,
                                    int numPts)

### mergeAreas

    public static void mergeAreas(java.awt.geom.GeneralPath shape,
                                  java.awt.geom.Area[] shapes,
                                  int nShapes)

### hitTestChar

    public TextHit hitTestChar(float x,
                               float y)

  Perform hit testing for coordinate at x, y.

  Specified by:
    `hitTestChar` in interface `TextSpanLayout`
  Parameters:
    `x` - the x coordinate of the point to be tested.
    `y` - the y coordinate of the point to be tested.
  Returns:
    a TextHit object encapsulating the character index for successful hits and whether the hit is on the character leading edge.

### getFont

    protected GVTFont getFont()

  Returns the GVTFont to use when rendering the specified character iterator. This should already be set as an attribute on the aci.

  Returns:
    The GVTFont to use.

### getOverlineShape

    protected java.awt.Shape getOverlineShape()

  Returns a shape describing the overline decoration for a given ACI.

### getUnderlineShape

    protected java.awt.Shape getUnderlineShape()

  Returns a shape describing the strikethrough line for a given ACI.

### getStrikethroughShape

    protected java.awt.Shape getStrikethroughShape()

  Returns a shape describing the strikethrough line for a given ACI.

### doExplicitGlyphLayout

    protected void doExplicitGlyphLayout()

  Explicitly lays out each of the glyphs in the glyph vector. This will handle any glyph position adjustments such as dx, dy and baseline offsets. It will also handle vertical layouts.

### adjustTextSpacing

    protected void adjustTextSpacing()

  Does any spacing adjustments that may have been specified.

### doSpacing

    protected java.awt.geom.Point2D doSpacing(java.lang.Float kern,
                                              java.lang.Float letterSpacing,
                                              java.lang.Float wordSpacing)

  Performs any spacing adjustments required and returns the new advance value.

  Parameters:
    `kern` - The kerning adjustment to apply to the space between each char.
    `letterSpacing` - The amount of spacing required between each char.
    `wordSpacing` - The amount of spacing required between each word.

### applyStretchTransform

    protected void applyStretchTransform(boolean stretchGlyphs)

  Stretches the text so that it becomes the specified length.

  Parameters:
    `stretchGlyphs` - if true xScale, yScale will be applied to each glyphs transform.

### doPathLayout

    protected void doPathLayout()

  If this layout is on a text path, positions the characters along the path.

### isLatinChar

    protected boolean isLatinChar(char c)

  Returns true if the specified character is within one of the Latin unicode character blocks.

  Parameters:
    `c` - The char to test.
  Returns:
    True if c is latin.

### isGlyphOrientationAuto

    protected boolean isGlyphOrientationAuto()

  Returns whether or not the vertical glyph orientation value is "auto".

### getGlyphOrientationAngle

    protected int getGlyphOrientationAngle()

  Returns the value of the vertical glyph orientation angle. This will be one of 0, 90, 180 or 270.

### textWrapTextChunk

    public static void textWrapTextChunk(java.text.AttributedCharacterIterator[] acis,
                                         java.util.List chunkLayouts,
                                         java.util.List flowRects)

  This will wrap the text associated with `aci` and `layouts`.

  Parameters:
    `acis` - An array of Attributed Charater Iterators containing the text to wrap. There is one aci per text chunk (which maps to flowPara elements. Used to access font, paragraph, and line break info.
    `chunkLayouts` - A List of List of GlyphLayout objects. There is a List of GlyphLayout objects for each flowPara element. There is a GlyphLayout for approximately each sub element in the flowPara element.
    `flowRects` - A List of Rectangle2D representing the regions to flow text into.

### updateVerticalAlignOffset

    public static void updateVerticalAlignOffset(java.awt.geom.Point2D.Float verticalAlignOffset,
                                                 RegionInfo region,
                                                 float maxDescent)

  Updates the specified verticalAlignmentOffset using the current alignment rule and the heights of the flow rect and the maximum descent of the text. This method gets for called every line, but only the value that is calculated for the last line of the flow rect is used by the glyph rendering. This is achieved by creating a new verticalAlignOffset object everytime a new flow rect is encountered, thus a single verticalAlignmentOffset is shared for all `LineInfo` objects created for a given flow rect. The value is calculated by determining the left over space in the flow rect and scaling that value by 1.0 to align to the bottom, 0.5 for middle and 0.0 for top.

  Parameters:
    `verticalAlignOffset` - the `Point2D.Float` object that is storing the alignment offset.
    `maxDescent` - the very lowest point this line reaches.

### layoutChunk

    public static void layoutChunk(GVTGlyphVector gv,
                                   java.awt.geom.Point2D origin,
                                   int justification,
                                   java.util.List lineInfos)

### hasCharacterIndex

    public boolean hasCharacterIndex(int index)

  Return true is the character index is represented by glyphs in this layout.

  Specified by:
    `hasCharacterIndex` in interface `TextSpanLayout`
  Parameters:
    `index` - index of the character in the ACI.
  Returns:
    true if the layout represents that character.

### isAltGlyph

    public boolean isAltGlyph()

  Return true if this text run represents an alt glyph.

  Specified by:
    `isAltGlyph` in interface `TextSpanLayout`

Copyright © 2004 Apache Software Foundation. All Rights Reserved.