On Tue, 23 Jun 2026 18:55:46 GMT, Andy Goryachev <[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.createStyledInput()`
> `StyledTextModel.getStyleAttributeMap()`
> 
> 
> ## Testing
> 
> In addition to the `RichEditorDemoApp`, the standalone Monkey Tester [1] p...

modules/jfx.incubator.richtext/src/main/java/jfx/incubator/scene/control/richtext/RichTextArea.java
 line 2529:

> 2527:             if (v) {
> 2528:                 cx.decorateRun(StyleAttributeMap.TEXT_HIGHLIGHT_1, 
> CellContext.RunDecor.HIGHLIGHT, Params.TEXT_HIGHLIGHT_1);
> 2529:             }

Since a developer could define their own highlight or wavy underline attribute 
like:
> INFO_HIGHLIGHT = new StyleAttribute<>( "INFO_HIGHLIGHT", Color.class, false );

and want to add it to the _StyleHandlerRegistry_, it would be helpful if 
`decorateRun` was overloaded with a Color parameter:
> cx.decorateRun( INFO_HIGHLIGHT, CellContext.RunDecor.HIGHLIGHT, v );

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/2196#discussion_r3468691385

Reply via email to