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 a TextNode. StrokingTextPainter includes support for stroke, fill, opacity, text-decoration, and other attributes.
See Also:
  • Field Details

  • Constructor Details

    • StrokingTextPainter

      public StrokingTextPainter()
  • Method Details

    • getInstance

      public static TextPainter getInstance()
      Returns a unique instance of this class.
    • paint

      public void paint(TextNode node, Graphics2D g2d)
      Paints the specified text node using the specified Graphics2D.
      Parameters:
      node - the text node to paint
      g2d - the Graphics2D to use
    • printAttrs

      protected void printAttrs(AttributedCharacterIterator aci)
    • getTextRuns

      public List getTextRuns(TextNode node, AttributedCharacterIterator aci)
    • computeTextRuns

      public List computeTextRuns(TextNode node, AttributedCharacterIterator aci, AttributedCharacterIterator[] chunkACIs)
    • computeTextRuns

      protected List computeTextRuns(TextNode node, AttributedCharacterIterator aci, AttributedCharacterIterator[] chunkACIs, int[][] chunkCharMaps)
    • reorderTextRuns

      protected List reorderTextRuns(StrokingTextPainter.TextChunk chunk, List runs)
      Reorder text runs as required by bidi algorithm.
      Parameters:
      runs - - unordered runs
      Returns:
      reordered runs
    • getTextChunkACIs

      protected AttributedCharacterIterator[] getTextChunkACIs(AttributedCharacterIterator aci)
      Returns an array of ACIs, one for each text chunk within the given text node.
    • createModifiedACIForFontMatching

      protected AttributedCharacterIterator createModifiedACIForFontMatching(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 Set getTextRunBoundaryAttributes()
    • getTextChunk

      protected StrokingTextPainter.TextChunk getTextChunk(TextNode node, AttributedCharacterIterator aci, int[] charMap, List textRuns, StrokingTextPainter.TextChunk prevChunk)
    • adjustChunkOffsets

      protected Point2D adjustChunkOffsets(Point2D location, 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(List textRuns, Graphics2D g2d, int decorationType)
      Paints decorations of the specified type.
    • paintTextRuns

      protected void paintTextRuns(List textRuns, Graphics2D g2d)
      Paints the text in each text run. Decorations are not painted here.
    • getOutline

      public Shape getOutline(TextNode node)
      Get a Shape in userspace coords which defines the textnode glyph outlines.
      Parameters:
      node - the TextNode to measure
    • getBounds2D

      public 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 Shape getDecorationOutline(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 Shape getDecorationStrokeOutline(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 class BasicTextPainter
    • selectFirst

      public Mark selectFirst(TextNode node)
      Selects the first glyph in the text node.
    • selectLast

      public Mark selectLast(TextNode node)
      Selects the last glyph in the text node.
    • 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 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.