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.
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.
- clones
-
JDK-8341671 [Text/TextFlow] getCaretInfo
- Open
- links to
-
Review(master) openjdk/jfx/1596