On Thu, 1 May 2025 18:47:18 GMT, Andy Goryachev <[email protected]> wrote:
> ### Summary > > This PR adds support for controlling tab stops: the `TAB_STOPS` paragraph > attribute and the `defaultTabStops` property in the `RichTextModel`. > > While adding the paragraph attribute is a trivial process, adding a > model-wide property requires adding of a mechanism to support document > properties (something that was originally omitted in the first incubating > release). Using the document properties, we can now persist not only the > default tab stops, but also provide the version umber for the storage format > provided by the `RichTextFormatHandler`, which will enable support the format > evolution in the future [0]. > > To showcase the feature, the `RichEditorDemoApp` gains a visual ruler and > additional dialogs and menus. > > ### Paragraph Attribute > > Paragraph-specific tab stops are enabled by: > > - `StyleAttributeMap.TAB_STOPS` constant > - `StyleAttributeMap.Builder.setTabStops(double ... positions)` > > ### Default Tab Stops > > After the last paragraph tab stop, or when no paragraph tab stops is set, the > document provides a way to set default tab stops via the model's > `defaultTabStops` property: > > These changes support the new property and other document properties: > > - document-wide properties support in the `StyledTextModel` base class > - `defaultTabStops` property in the `RichTextModel` and > `RichTextFormatHandler` > - document properties `VERSION` and `DEFAULT_TAB_STOPS` > - `StyledSegment`: `ofDocumentProperties()` factory, `getDocumentProperties()` > > ### Other Improvements > > A number of other improvements were made along with the tab stop related > changes: > > - `character()`, `paragraph()`, and `document()` factory methods in the > `StyleAttribute` class > - `isCharacterAttribute()`, `isParagraphAttribute()`, and > `isDocumentAttribute()` methods in the `StyleAttribute` class > - `RichTextArea`: `documentArea` read-only property > > ### Dependencies > > https://bugs.openjdk.org/browse/JDK-8373936 > > ### References > > [0] [Rich Text Area (Incubator) Data Format Version > 2](https://github.com/andy-goryachev-oracle/Test/blob/8356042.ruler/doc/RichTextArea/RichTextArea_DataFormat_v2.md) modules/javafx.graphics/src/main/java/javafx/scene/text/TabStop.java line 35: > 33: * @since 999 TODO > 34: */ > 35: public class TabStop { If this immutable, why not use a `record` instead? ------------- PR Review Comment: https://git.openjdk.org/jfx/pull/1800#discussion_r2077067866
