Package org.apache.batik.bridge
Class GlyphLayout
java.lang.Object
org.apache.batik.bridge.GlyphLayout
- All Implemented Interfaces:
TextSpanLayout
- Direct Known Subclasses:
FlowExtGlyphLayout
,FlowGlyphLayout
Implementation of TextSpanLayout which uses java.awt.font.GlyphVector.
- Version:
- $Id: GlyphLayout.java 1804130 2017-08-04 14:41:11Z ssteiner $
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AttributedCharacterIterator
private boolean
protected Point2D
private static final AttributedCharacterIterator.Attribute
private int[]
private static final AttributedCharacterIterator.Attribute
private static final AttributedCharacterIterator.Attribute
static final double
static final AttributedCharacterIterator.Attribute
static final AttributedCharacterIterator.Attribute
static final AttributedCharacterIterator.Attribute
private GVTFont
private float[]
protected GVTGlyphVector
static final AttributedCharacterIterator.Attribute
static final AttributedCharacterIterator.Attribute
private boolean
protected boolean
static final AttributedCharacterIterator.Attribute
private GVTLineMetrics
private Point2D
private static final Integer
private boolean
private static final AttributedCharacterIterator.Attribute
protected static Set
private boolean
protected static Set
private TextPath
private Point2D
private boolean
static final AttributedCharacterIterator.Attribute
static final AttributedCharacterIterator.Attribute
private static final AttributedCharacterIterator.Attribute
private static final Integer
private static final AttributedCharacterIterator.Attribute
private float
private static final AttributedCharacterIterator.Attribute
private float
Fields inherited from interface org.apache.batik.bridge.TextSpanLayout
DECORATION_ALL, DECORATION_OVERLINE, DECORATION_STRIKETHROUGH, DECORATION_UNDERLINE
-
Constructor Summary
ConstructorsConstructorDescriptionGlyphLayout
(AttributedCharacterIterator aci, int[] charMap, Point2D offset, FontRenderContext frc) Creates the specified text layout using the specified AttributedCharacterIterator and rendering context. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
addPtsToPath
(GeneralPath shape, Point2D.Float[] topPts, Point2D.Float[] botPts, int numPts) protected void
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
Explicitly lays out each of the glyphs in the glyph vector.protected void
If this layout is on a text path, positions the characters along the path.protected Point2D
Performs any spacing adjustments required and returns the new advance value.void
draw
(Graphics2D g2d) Paints the text layout using the specified Graphics2D and rendering context.static boolean
epsEQ
(double a, double b) Returns the current text position at the completion of glyph layout.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.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.Returns the rectangular bounds of the completed glyph layout, inclusive of "decoration" (underline, overline, etc.)float[]
Returns the advance between each glyph in text progression direction.int
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.getGlyphMetrics
(int glyphIndex) Returns the Metrics for a particular glyph.protected int
Returns the value of the vertical glyph orientation angle.Return the glyph vector asociated to this layout.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.Returns the Line metrics for this text span.Returns the current text position at the beginning of glyph layout, before the application of explicit glyph positioning attributes.Returns the outline of the completed glyph layout.protected Shape
Returns a shape describing the overline decoration for a given ACI.protected Shape
Returns a shape describing the strikethrough line for a given ACI.Returns the position to used when drawing a text run after this one.protected Shape
Returns a shape describing the undeline decoration for a given ACI.boolean
hasCharacterIndex
(int index) Return true is the character index is represented by glyphs in this layout.hitTestChar
(float x, float y) Perform hit testing for coordinate at x, y.boolean
Return true if this text run represents an alt glyph.protected boolean
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
Returns true if the text direction in this layout is from left to right.boolean
Returns true if this layout in on a text path.boolean
Return true if this text has been reversed.boolean
Returns true if the advance direction of this text is vertical.static int
makeConvexHull
(Point2D.Float[] pts, int numPts) void
maybeReverse
(boolean mirror) Reverse (and optionally mirror) glyphs if not already reversed.static void
mergeAreas
(GeneralPath shape, Area[] shapes, int nShapes) void
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.private final void
This method makes certain that the layout has been completed at this point (much of the layout is done lazily).
-
Field Details
-
gv
-
font
-
metrics
-
aci
-
advance
-
offset
-
xScale
private float xScale -
yScale
private float yScale -
textPath
-
textPathAdvance
-
charMap
private int[] charMap -
vertical
private boolean vertical -
adjSpacing
private boolean adjSpacing -
glyphAdvances
private float[] glyphAdvances -
isAltGlyph
private boolean isAltGlyph -
layoutApplied
protected boolean layoutApplied -
spacingApplied
private boolean spacingApplied -
pathApplied
private boolean pathApplied -
FLOW_LINE_BREAK
-
FLOW_PARAGRAPH
-
FLOW_EMPTY_PARAGRAPH
-
LINE_HEIGHT
-
VERTICAL_ORIENTATION
-
VERTICAL_ORIENTATION_ANGLE
-
HORIZONTAL_ORIENTATION_ANGLE
-
X
-
Y
-
DX
-
DY
-
ROTATION
-
BASELINE_SHIFT
-
WRITING_MODE
-
WRITING_MODE_TTB
-
ORIENTATION_AUTO
-
GVT_FONT
-
runAtts
-
szAtts
-
eps
public static final double eps- See Also:
-
-
Constructor Details
-
GlyphLayout
public GlyphLayout(AttributedCharacterIterator aci, int[] charMap, Point2D offset, FontRenderContext frc) Creates the specified text layout using the specified AttributedCharacterIterator and rendering context.- Parameters:
aci
- the AttributedCharacterIterator whose text is to be laid outcharMap
- Indicates how chars in aci map to original text char array.offset
- The offset position of this text layoutfrc
- the FontRenderContext to use for generating glyphs.
-
-
Method Details
-
getGlyphVector
Description copied from interface:TextSpanLayout
Return the glyph vector asociated to this layout.- Specified by:
getGlyphVector
in interfaceTextSpanLayout
- Returns:
- glyph vector
-
getOffset
Returns the current text position at the beginning of glyph layout, before the application of explicit glyph positioning attributes.- Specified by:
getOffset
in interfaceTextSpanLayout
-
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 interfaceTextSpanLayout
- 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
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 interfaceTextSpanLayout
-
getGlyphMetrics
Description copied from interface:TextSpanLayout
Returns the Metrics for a particular glyph.- Specified by:
getGlyphMetrics
in interfaceTextSpanLayout
-
getLineMetrics
Description copied from interface:TextSpanLayout
Returns the Line metrics for this text span.- Specified by:
getLineMetrics
in interfaceTextSpanLayout
-
isVertical
public boolean isVertical()Returns true if the advance direction of this text is vertical.- Specified by:
isVertical
in interfaceTextSpanLayout
-
isOnATextPath
public boolean isOnATextPath()Returns true if this layout in on a text path.- Specified by:
isOnATextPath
in interfaceTextSpanLayout
-
getGlyphCount
public int getGlyphCount()Returns the number of glyphs in this layout.- Specified by:
getGlyphCount
in interfaceTextSpanLayout
-
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 interfaceTextSpanLayout
- 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 interfaceTextSpanLayout
-
syncLayout
private final void syncLayout()This method makes certain that the layout has been completed at this point (much of the layout is done lazily). -
draw
Paints the text layout using the specified Graphics2D and rendering context.- Specified by:
draw
in interfaceTextSpanLayout
- Parameters:
g2d
- the Graphics2D to use
-
getAdvance2D
Returns the current text position at the completion of glyph layout.- Specified by:
getAdvance2D
in interfaceTextSpanLayout
-
getOutline
Returns the outline of the completed glyph layout.- Specified by:
getOutline
in interfaceTextSpanLayout
-
getGlyphAdvances
public float[] getGlyphAdvances()Description copied from interface:TextSpanLayout
Returns the advance between each glyph in text progression direction.- Specified by:
getGlyphAdvances
in interfaceTextSpanLayout
-
getDecorationOutline
Returns the outline of the specified decorations on the glyphs,- Specified by:
getDecorationOutline
in interfaceTextSpanLayout
- 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
Returns the rectangular bounds of the completed glyph layout.- Specified by:
getBounds2D
in interfaceTextSpanLayout
-
getGeometricBounds
Returns the rectangular bounds of the completed glyph layout, inclusive of "decoration" (underline, overline, etc.)- Specified by:
getGeometricBounds
in interfaceTextSpanLayout
-
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 interfaceTextSpanLayout
-
getGlyphIndex
public int getGlyphIndex(int charIndex) Returns the index of the first glyph that has the specified char index.- Specified by:
getGlyphIndex
in interfaceTextSpanLayout
- 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 interfaceTextSpanLayout
- Parameters:
index
- index of the character in the ACI- Returns:
- rotation angle
-
getHighlightShape
Returns a Shape which encloses the currently selected glyphs as specified by the character indices.- Specified by:
getHighlightShape
in interfaceTextSpanLayout
- 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
-
addPtsToPath
public static void addPtsToPath(GeneralPath shape, Point2D.Float[] topPts, Point2D.Float[] botPts, int numPts) -
mergeAreas
-
hitTestChar
Perform hit testing for coordinate at x, y.- Specified by:
hitTestChar
in interfaceTextSpanLayout
- 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
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
Returns a shape describing the overline decoration for a given ACI. -
getUnderlineShape
Returns a shape describing the undeline decoration for a given ACI. -
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
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. -
hasCharacterIndex
public boolean hasCharacterIndex(int index) Return true is the character index is represented by glyphs in this layout.- Specified by:
hasCharacterIndex
in interfaceTextSpanLayout
- 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 interfaceTextSpanLayout
-
isReversed
public boolean isReversed()Description copied from interface:TextSpanLayout
Return true if this text has been reversed.- Specified by:
isReversed
in interfaceTextSpanLayout
-
maybeReverse
public void maybeReverse(boolean mirror) Description copied from interface:TextSpanLayout
Reverse (and optionally mirror) glyphs if not already reversed.- Specified by:
maybeReverse
in interfaceTextSpanLayout
-