Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8341672

[Text/TextFlow] getRangeInfo

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • None
    • javafx
    • None

      The RichTextArea control (JDK-8301121), or any custom control that need to render custom text decorations (such as selection blocks, squiggly lines, strike-through lines, to name a few) can benefit from a better public API representing the range.

      Currently, the range is represented by an array of PathElements in an undocumented fashion; the reverse engineering shows that it is typically a sequence of [MoveTo,LineTo] for single lines, or [MoveTo,LineTo,LineTo,LineTo, LineTo] for blocks.

      One possibility is to add a new method to Text / TextFlow:
        public RangeInfo getRangeInfo(int start, int end, RangeType type)
      or possibly
        public RangeInfo getRangeInfo(int start, int end, RangeType type, boolean includeLineSpacing)
      to address
      JDK-8317120 RFE: TextFlow.rangeShape() ignores lineSpacing
      JDK-8317122 RFE: TextFlow.preferredHeight ignores lineSpacing

      The RangeInfo class would provide the following data points:
      - PathElement[] getRangeShape() // to be used by the legacy rangeShape() method
      - PathElement[] getUnderlineShape() // to be used by the legacy underlineShape() method
      - PathElement[] getStrikeThroughShape()
      - getPartCount // the number of "parts", i.e. lines or rectangular blocks
      - getBounds(int part) // the bounds of each part

      The RichTextArea requires such a public API in TextFlow only, but we'll basically get the same functionality for Text node for free.

      NOTE: this API is somewhat derivative of JDK-8341670 [Text,TextFlow] Public API for Text Layout, it might be possible to roll the requested functionality into LayoutInfo class.

            angorya Andy Goryachev
            angorya Andy Goryachev
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: