On Wed, 24 Jun 2026 15:19:41 GMT, Jurgen <[email protected]> wrote: >> # Support for Embedded Images, Text Highlights, Wavy Underlines >> >> ## Summary >> >> This PR adds new attributes to support embedded images, text highlights, and >> wavy underlines. >> >> The `RichEditorDemoApp` gains new context menus and enables drag and drop to >> showcase the new functionality. >> >> <img width="768" height="703" alt="Screenshot 2026-06-18 at 12 40 28" >> src="https://github.com/user-attachments/assets/678bdbac-6582-46ee-bd41-ea938df930bb" >> /> >> >> >> >> ## Problem >> >> Among the feedback received after publishing the RichTextArea incubating >> module, a number of users complained about the need to support embedded >> images. Other users complained about difficulty to get the text highlighted >> or wavy underlined, and having these decorations controlled via CSS. >> >> >> ## Solution >> >> Support for images was intentionally missing in the initial release; this PR >> adds the feature. >> >> Adding highlights and underlines is a bit more complicated, for several >> reasons. One reason is that the existing highlighting mechanism supports >> mixing of arbitrary number of translucent colors - something that is pretty >> much impossible to do with CSS alone. >> >> A useful compromise is to offer a limited number of standard attributes that >> can be controlled via CSS: 5 highlights and 3 wavy underlines. >> >> >> ## Specification >> >> >> ### StyleAttributeMap Attributes >> >> New attributes: >> - EMBEDDED_IMAGE >> - TEXT_HIGHLIGHT_1 ... TEXT_HIGHLIGHT_5 >> - UNDERLINE_WAVY_1 ... UNDERLINE_WAVY_3 >> >> ### CSS Styling >> >> The styling of highlights and wavy underlines is determined by the >> stylesheet and can be changed by the user. >> >> The style selectors are: >> >> `.rich-text-area .text-highlight-1` ... `.rich-text-area .text-highlight-5` >> `.rich-text-area .underline-wavy-1` ... `.rich-text-area .underline-wavy-3` >> >> >> ### New Public APIs >> >> `EmbeddedImage` >> `FileListFormatHandler` >> `StyleAttribute.inlineNode()` >> `StyleAttribute.isInlineNode()` >> `StyledSegment.ofInlineNode()` >> `CellContext.RunDecor` >> `CellContext.decorateRun()` >> `RichTextArea.dropTargetProperty` >> `RichTextArea.clearDropTarget()` >> `RichTextArea.getStyleAttributeMap()` >> >> >> ### File Format Changes >> >> The data transfer format (also used by the demo app to save the .rich files) >> version string is changed, making the old files unreadable. >> >> Perhaps it should remain unchanged for the duration of the incubation >> period. See also [2] >> >> >> ### Breaking API Changes >> >> `DataFormatHandler.createStyl... > > modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/model/StyledTextModel.java > line 794: > >> 792: break; >> 793: case TEXT: >> 794: case INLINE_NODE: > > I realize that this has only been included in order to handle embedded > images, and that maybe you're going to make it more specific in another PR - > if so then that's great. Otherwise, I suggest adding the missing protected > method `insertNodeSegment` and invoking it here for INLINE_NODE. The > _StyledTextModel_ implementation of the method can just forward it to > `insertTextSegment` as being done here. These changes will then also allow > custom models to override `insertNodeSegment` and make copy paste as well as > import operations possible with inline nodes.
That's right, we have a separate ticket https://bugs.openjdk.org/browse/JDK-8365948 ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/2196#discussion_r3469589693
