Package org.apache.batik.bridge
Class StrokingTextPainter
- java.lang.Object
-
- org.apache.batik.bridge.BasicTextPainter
-
- org.apache.batik.bridge.StrokingTextPainter
-
- All Implemented Interfaces:
TextPainter
- Direct Known Subclasses:
FlowExtTextPainter
,FlowTextPainter
public class StrokingTextPainter extends BasicTextPainter
More sophisticated implementation of TextPainter which renders the attributed character iterator of aTextNode
. StrokingTextPainter includes support for stroke, fill, opacity, text-decoration, and other attributes.- See Also:
TextPainter
,GVTAttributedCharacterIterator
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
StrokingTextPainter.TextChunk
static class
StrokingTextPainter.TextRun
Inner convenience class for associating a TextLayout for sub-spans, and the ACI which iterates over that subspan.-
Nested classes/interfaces inherited from class org.apache.batik.bridge.BasicTextPainter
BasicTextPainter.BasicMark
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.Integer
ADJUST_ALL
static java.lang.Integer
ADJUST_SPACING
static GVTAttributedCharacterIterator.TextAttribute
ALT_GLYPH_HANDLER
static java.text.AttributedCharacterIterator.Attribute
ANCHOR_TYPE
static java.text.AttributedCharacterIterator.Attribute
BIDI_LEVEL
static java.text.AttributedCharacterIterator.Attribute
FLOW_PARAGRAPH
static java.text.AttributedCharacterIterator.Attribute
FLOW_REGIONS
static java.text.AttributedCharacterIterator.Attribute
GVT_FONT
static java.text.AttributedCharacterIterator.Attribute
GVT_FONTS
static java.text.AttributedCharacterIterator.Attribute
PAINT_INFO
protected static TextPainter
singleton
A unique instance of this class.static java.text.AttributedCharacterIterator.Attribute
TEXT_COMPOUND_ID
static java.text.AttributedCharacterIterator.Attribute
TEXTPATH
static java.text.AttributedCharacterIterator.Attribute
WRITING_MODE
static java.lang.Integer
WRITING_MODE_RTL
static java.lang.Integer
WRITING_MODE_TTB
static java.text.AttributedCharacterIterator.Attribute
XPOS
static java.text.AttributedCharacterIterator.Attribute
YPOS
-
Fields inherited from class org.apache.batik.bridge.BasicTextPainter
aaOffFontRenderContext, fontRenderContext
-
-
Constructor Summary
Constructors Constructor Description StrokingTextPainter()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.awt.geom.Point2D
adjustChunkOffsets(java.awt.geom.Point2D location, java.util.List textRuns, StrokingTextPainter.TextChunk chunk)
Adjusts the position of the text runs within the specified text chunk to account for any text anchor properties.java.util.List
computeTextRuns(TextNode node, java.text.AttributedCharacterIterator aci, java.text.AttributedCharacterIterator[] chunkACIs)
protected java.util.List
computeTextRuns(TextNode node, java.text.AttributedCharacterIterator aci, java.text.AttributedCharacterIterator[] chunkACIs, int[][] chunkCharMaps)
protected java.text.AttributedCharacterIterator
createModifiedACIForFontMatching(java.text.AttributedCharacterIterator aci)
Returns a new AttributedCharacterIterator that contains resolved GVTFont attributes.java.awt.geom.Rectangle2D
getBounds2D(TextNode node)
Get a Rectangle2D in userspace coords which encloses the textnode glyphs including stroke etc.protected java.awt.Shape
getDecorationOutline(java.util.List textRuns, int decorationType)
Returns the outline of the specified decoration type.protected java.awt.Shape
getDecorationStrokeOutline(java.util.List textRuns, int decorationType)
Returns the stroked outline of the specified decoration type.protected FontFamilyResolver
getFontFamilyResolver()
java.awt.Shape
getHighlightShape(Mark beginMark, Mark endMark)
Return a Shape, in the coordinate system of the text layout, which encloses the text selection delineated by two Mark instances.static TextPainter
getInstance()
Returns a unique instance of this class.Mark
getMark(TextNode node, int index, boolean leadingEdge)
Returns a mark for the char at index in node's AttributedCharacterIterator.java.awt.Shape
getOutline(TextNode node)
Get a Shape in userspace coords which defines the textnode glyph outlines.int[]
getSelected(Mark startMark, Mark finishMark)
Returns an array of ints representing begin/end index pairs into an AttributedCharacterIterator which represents the text selection delineated by two Mark instances.protected StrokingTextPainter.TextChunk
getTextChunk(TextNode node, java.text.AttributedCharacterIterator aci, int[] charMap, java.util.List textRuns, StrokingTextPainter.TextChunk prevChunk)
protected java.text.AttributedCharacterIterator[]
getTextChunkACIs(java.text.AttributedCharacterIterator aci)
Returns an array of ACIs, one for each text chunk within the given text node.protected java.util.Set
getTextRunBoundaryAttributes()
java.util.List
getTextRuns(TextNode node, java.text.AttributedCharacterIterator aci)
protected Mark
hitTest(double x, double y, TextNode node)
Returns the mark for the specified parameters.void
paint(TextNode node, java.awt.Graphics2D g2d)
Paints the specified text node using the specified Graphics2D.protected void
paintDecorations(java.util.List textRuns, java.awt.Graphics2D g2d, int decorationType)
Paints decorations of the specified type.protected void
paintTextRuns(java.util.List textRuns, java.awt.Graphics2D g2d)
Paints the text in each text run.protected void
printAttrs(java.text.AttributedCharacterIterator aci)
protected java.util.List
reorderTextRuns(StrokingTextPainter.TextChunk chunk, java.util.List runs)
Reorder text runs as required by bidi algorithm.Mark
selectFirst(TextNode node)
Selects the first glyph in the text node.Mark
selectLast(TextNode node)
Selects the last glyph in the text node.-
Methods inherited from class org.apache.batik.bridge.BasicTextPainter
getGeometryBounds, getTextLayoutFactory, selectAt, selectTo
-
-
-
-
Field Detail
-
PAINT_INFO
public static final java.text.AttributedCharacterIterator.Attribute PAINT_INFO
-
FLOW_REGIONS
public static final java.text.AttributedCharacterIterator.Attribute FLOW_REGIONS
-
FLOW_PARAGRAPH
public static final java.text.AttributedCharacterIterator.Attribute FLOW_PARAGRAPH
-
TEXT_COMPOUND_ID
public static final java.text.AttributedCharacterIterator.Attribute TEXT_COMPOUND_ID
-
GVT_FONT
public static final java.text.AttributedCharacterIterator.Attribute GVT_FONT
-
GVT_FONTS
public static final java.text.AttributedCharacterIterator.Attribute GVT_FONTS
-
BIDI_LEVEL
public static final java.text.AttributedCharacterIterator.Attribute BIDI_LEVEL
-
XPOS
public static final java.text.AttributedCharacterIterator.Attribute XPOS
-
YPOS
public static final java.text.AttributedCharacterIterator.Attribute YPOS
-
TEXTPATH
public static final java.text.AttributedCharacterIterator.Attribute TEXTPATH
-
WRITING_MODE
public static final java.text.AttributedCharacterIterator.Attribute WRITING_MODE
-
WRITING_MODE_TTB
public static final java.lang.Integer WRITING_MODE_TTB
-
WRITING_MODE_RTL
public static final java.lang.Integer WRITING_MODE_RTL
-
ANCHOR_TYPE
public static final java.text.AttributedCharacterIterator.Attribute ANCHOR_TYPE
-
ADJUST_SPACING
public static final java.lang.Integer ADJUST_SPACING
-
ADJUST_ALL
public static final java.lang.Integer ADJUST_ALL
-
ALT_GLYPH_HANDLER
public static final GVTAttributedCharacterIterator.TextAttribute ALT_GLYPH_HANDLER
-
singleton
protected static TextPainter singleton
A unique instance of this class.
-
-
Method Detail
-
getInstance
public static TextPainter getInstance()
Returns a unique instance of this class.
-
paint
public void paint(TextNode node, java.awt.Graphics2D g2d)
Paints the specified text node using the specified Graphics2D.- Parameters:
node
- the text node to paintg2d
- the Graphics2D to use
-
printAttrs
protected void printAttrs(java.text.AttributedCharacterIterator aci)
-
getTextRuns
public java.util.List getTextRuns(TextNode node, java.text.AttributedCharacterIterator aci)
-
computeTextRuns
public java.util.List computeTextRuns(TextNode node, java.text.AttributedCharacterIterator aci, java.text.AttributedCharacterIterator[] chunkACIs)
-
computeTextRuns
protected java.util.List computeTextRuns(TextNode node, java.text.AttributedCharacterIterator aci, java.text.AttributedCharacterIterator[] chunkACIs, int[][] chunkCharMaps)
-
reorderTextRuns
protected java.util.List reorderTextRuns(StrokingTextPainter.TextChunk chunk, java.util.List runs)
Reorder text runs as required by bidi algorithm.- Parameters:
runs
- - unordered runs- Returns:
- reordered runs
-
getTextChunkACIs
protected java.text.AttributedCharacterIterator[] getTextChunkACIs(java.text.AttributedCharacterIterator aci)
Returns an array of ACIs, one for each text chunk within the given text node.
-
createModifiedACIForFontMatching
protected java.text.AttributedCharacterIterator createModifiedACIForFontMatching(java.text.AttributedCharacterIterator aci)
Returns a new AttributedCharacterIterator that contains resolved GVTFont attributes. This is then used when creating the text runs so that the text can be split on changes of font as well as tspans and trefs.- Parameters:
aci
- The aci to be modified should already be split into text chunks.- Returns:
- The new modified aci.
-
getFontFamilyResolver
protected FontFamilyResolver getFontFamilyResolver()
-
getTextRunBoundaryAttributes
protected java.util.Set getTextRunBoundaryAttributes()
-
getTextChunk
protected StrokingTextPainter.TextChunk getTextChunk(TextNode node, java.text.AttributedCharacterIterator aci, int[] charMap, java.util.List textRuns, StrokingTextPainter.TextChunk prevChunk)
-
adjustChunkOffsets
protected java.awt.geom.Point2D adjustChunkOffsets(java.awt.geom.Point2D location, java.util.List textRuns, StrokingTextPainter.TextChunk chunk)
Adjusts the position of the text runs within the specified text chunk to account for any text anchor properties.
-
paintDecorations
protected void paintDecorations(java.util.List textRuns, java.awt.Graphics2D g2d, int decorationType)
Paints decorations of the specified type.
-
paintTextRuns
protected void paintTextRuns(java.util.List textRuns, java.awt.Graphics2D g2d)
Paints the text in each text run. Decorations are not painted here.
-
getOutline
public java.awt.Shape getOutline(TextNode node)
Get a Shape in userspace coords which defines the textnode glyph outlines.- Parameters:
node
- the TextNode to measure
-
getBounds2D
public java.awt.geom.Rectangle2D getBounds2D(TextNode node)
Get a Rectangle2D in userspace coords which encloses the textnode glyphs including stroke etc.- Parameters:
node
- the TextNode to measure
-
getDecorationOutline
protected java.awt.Shape getDecorationOutline(java.util.List textRuns, int decorationType)
Returns the outline of the specified decoration type.- Parameters:
textRuns
- The list of text runs to get the decoration outline for.decorationType
- Indicates the type of decoration required. eg. underline, overline or strikethrough.- Returns:
- The decoration outline or null if the text is not decorated.
-
getDecorationStrokeOutline
protected java.awt.Shape getDecorationStrokeOutline(java.util.List textRuns, int decorationType)
Returns the stroked outline of the specified decoration type. If the decoration has no stroke it will return the fill outline- Parameters:
textRuns
- The list of text runs to get the decoration outline for.decorationType
- Indicates the type of decoration required. eg. underline, overline or strikethrough.- Returns:
- The decoration outline or null if the text is not decorated.
-
getMark
public Mark getMark(TextNode node, int index, boolean leadingEdge)
Description copied from interface:TextPainter
Returns a mark for the char at index in node's AttributedCharacterIterator. Leading edge indicates if the mark should be considered immediately 'before' glyph or after
-
hitTest
protected Mark hitTest(double x, double y, TextNode node)
Description copied from class:BasicTextPainter
Returns the mark for the specified parameters.- Specified by:
hitTest
in classBasicTextPainter
-
getSelected
public int[] getSelected(Mark startMark, Mark finishMark)
Returns an array of ints representing begin/end index pairs into an AttributedCharacterIterator which represents the text selection delineated by two Mark instances. Note: The Mark instances passed must have been instantiated by an instance of this enclosing TextPainter implementation.
-
getHighlightShape
public java.awt.Shape getHighlightShape(Mark beginMark, Mark endMark)
Return a Shape, in the coordinate system of the text layout, which encloses the text selection delineated by two Mark instances. Note: The Mark instances passed must have been instantiated by an instance of this enclosing TextPainter implementation.
-
-