<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:"Yu Gothic";
panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
{font-family:Aptos;
panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
{font-family:"Iosevka Fixed SS16";
panose-1:2 0 5 9 3 0 0 0 0 4;}
@font-face
{font-family:"Times New Roman \(Body CS\)";
panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
{font-family:"\@Yu Gothic";
panose-1:2 11 4 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:10.0pt;
font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
p.m-3454092310103602811p1, li.m-3454092310103602811p1, div.m-3454092310103602811p1
{mso-style-name:m_-3454092310103602811p1;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}
p.m-3454092310103602811p2, li.m-3454092310103602811p2, div.m-3454092310103602811p2
{mso-style-name:m_-3454092310103602811p2;
mso-margin-top-alt:auto;
margin-right:0in;
mso-margin-bottom-alt:auto;
margin-left:0in;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}
span.m-3454092310103602811apple-converted-space
{mso-style-name:m_-3454092310103602811apple-converted-space;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:"Iosevka Fixed SS16";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Dear Nir, everyone:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Thank you for asking these good questions!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt">1. If these are provided to the user, how difficult is it for them to compose a RTA? JavaFX doesn't provide some somewhat-common controls that you see in various other libraries with
the reasoning that the library should give the user the ability to create their own controls (which is not so easy right now). Is RTA an exception, like ColorPicker and DatePicker?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">To create a full equivalent of the RTA as implemented in
<a href="https://bugs.openjdk.org/browse/JDK-8301121">https://bugs.openjdk.org/browse/JDK-8301121</a> - difficult.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">For starters, there are several missing pieces – some do not have public API, and some are just missing. No public API: focus traversal APIs, text layout information, input
map. Missing – tab stop policy. My intent is to make all of these available as public API, as well as fix some of the related bugs. RTA is a complex control, and in that sense it goes beyond the Date/ColorPicker level of complexity, but the general idea
is the same (as Robert explained earlier): to give the developers a fully functional control that can be used out of the box, or can serve as a basis for more complex things.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt">2. Can these building blocks be used to enhance existing controls? For example, to help with TextArea's performance with long texts, or allow rich text-like features in other controls,
like the squiggly red line under the text in a TextField?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Some of the builing blocks are already available: for example, rich text can be rendered by using TextFlow set as a graphic on a Label.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Adding a squiggly line or similar decoration to the TextArea might also be possible.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Support for long texts in TextArea... I must say that pretty much nothing in the TextArea is done with long texts in mind. Redesigning of TextArea for long texts or performance
is rather unlikely for obvious reasons (one of which is textProperty). One have to resort to paragraph-based text model and virtualization to do that, and even then the proposed RichTextArea will struggle with long paragraphs.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:12.0pt">3. As also mentioned in the proposal, there are already 3rd party RTAs - RichTextFX and Gluon's. Does the proposed RTA offer more than these (besides the ease of use by being in JavaFX)?
Do the building blocks of these offer advantages that the proposed building blocks don't? An abstract test that can be done is to see if these controls can be "retrofitted" with the proposed new building blocks (no need to actually rewrite the code). If not,
it could hint to an incompatibility or a limit of the proposal that makes it less appealing.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Robert already addressed this in his earlier response (thank you, Robert!), so let me just reiterate one point: the proposed RTA is simpler than RichTextFX offering. Simpler
to use, and simpler in terms of supported features – does not offer tables, for instance. There are still use cases which RTA won’t be able to address, and for which an external library is still needed.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Thanks again for good questions. Did I provide good answers?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">-andy<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">Nir Lisker <nlisker@gmail.com><br>
<b>Date: </b>Wednesday, August 14, 2024 at 05:04<br>
<b>To: </b>Andy Goryachev <andy.goryachev@oracle.com><br>
<b>Cc: </b>openjfx-dev@openjdk.org <openjfx-dev@openjdk.org><br>
<b>Subject: </b>[External] : Re: RichTextArea: API Review<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">My questions are similar to the ones in the previous discussion, but now I can be more specific.<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">I see a list of "building blocks" in
<a href="https://bugs.openjdk.org/browse/JDK-8300569">https://bugs.openjdk.org/browse/JDK-8300569</a>, which I like. Specifically, two types of building blocks additions are important as I see it: rich text-specific ones like document models and a way to add
decorations/colors etc., and the split of controls in general into skin/input/behavior (on which there has been a long discussion). My questions are:<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">1. If these are provided to the user, how difficult is it for them to compose a RTA? JavaFX doesn't provide some somewhat-common controls that you see in various other libraries with the reasoning that the
library should give the user the ability to create their own controls (which is not so easy right now). Is RTA an exception, like ColorPicker and DatePicker?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">2. Can these building blocks be used to enhance existing controls? For example, to help with TextArea's performance with long texts, or allow rich text-like features in other controls, like the squiggly red
line under the text in a TextField?<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">3. As also mentioned in the proposal, there are already 3rd party RTAs - RichTextFX and Gluon's. Does the proposed RTA offer more than these (besides the ease of use by being in JavaFX)? Do the building blocks
of these offer advantages that the proposed building blocks don't? An abstract test that can be done is to see if these controls can be "retrofitted" with the proposed new building blocks (no need to actually rewrite the code). If not, it could hint to an
incompatibility or a limit of the proposal that makes it less appealing.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">Thanks,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">Nir<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt">On Fri, Aug 2, 2024 at 10:41</span><span style="font-size:12.0pt;font-family:"Arial",sans-serif"> </span><span style="font-size:12.0pt">PM Andy Goryachev <<a href="mailto:andy.goryachev@oracle.com">andy.goryachev@oracle.com</a>>
wrote:<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<div>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">Dear fellow developers:</span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">Thank you for the early feedback on the RichTextArea proposal [0].</span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">We are moving to the next phase by submitting the public pull request [1].<span class="m-3454092310103602811apple-converted-space">
</span>The main goal is to include the new control in an incubating module [8], hopefully in jfx24, as a means of putting non-final API in the hands of developers while the API and implementation progress towards either finalization or removal in a future release.</span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">For your convenience, two test applications are provided -
<b>RichTextAreaDemoApp</b> and <b>CodeAreaDemoApp</b> which demonstrate the new controls with a number of different models.<span class="m-3454092310103602811apple-converted-space">
</span>In addition to these two testers, please check out a simple standalone rich text editor application,
<b>RichEditorDemoApp</b>,<span class="m-3454092310103602811apple-converted-space"> </span></span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">We would encourage anyone - the javafx developers, and especially the application developers, to take a look at the public API [3].<span class="m-3454092310103602811apple-converted-space">
</span>It's probably less important at this stage to do a deep code review of the implementation, but we would certainly appreciate and welcome your code review comments.</span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">Thank you in advance,</span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">-andy</span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p2"><span style="font-family:"Iosevka Fixed SS16""> </span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[0] Proposal:
<a href="https://urldefense.com/v3/__https:/github.com/andy-goryachev-oracle/Test/blob/main/doc/RichTextArea/RichTextArea.md__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9t4274lJ$" target="_blank">
https://github.com/andy-goryachev-oracle/Test/blob/main/doc/RichTextArea/RichTextArea.md</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[1] Pull request:
<a href="https://urldefense.com/v3/__https:/github.com/openjdk/jfx/pull/1524__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9gf9BYIK$" target="_blank">
https://github.com/openjdk/jfx/pull/1524</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[2] Discussion points:
<a href="https://urldefense.com/v3/__https:/github.com/andy-goryachev-oracle/Test/blob/main/doc/RichTextArea/RichTextAreaDiscussion.md__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9nUSujTl$" target="_blank">
https://github.com/andy-goryachev-oracle/Test/blob/main/doc/RichTextArea/RichTextAreaDiscussion.md</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[3] API specification (javadoc):
<a href="https://cr.openjdk.org/~angorya/RichTextArea/javadoc" target="_blank">https://cr.openjdk.org/~angorya/RichTextArea/javadoc</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[4] CSS Reference:
<a href="https://cr.openjdk.org/~angorya/RichTextArea/javadoc/javafx.graphics/javafx/scene/doc-files/cssref.html" target="_blank">
https://cr.openjdk.org/~angorya/RichTextArea/javadoc/javafx.graphics/javafx/scene/doc-files/cssref.html</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[5] Behavior doc:
<a href="https://urldefense.com/v3/__https:/github.com/andy-goryachev-oracle/jfx/blob/8301121.RichTextArea/doc-files/behavior/RichTextAreaBehavior.md__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9pq__cpG$" target="_blank">
https://github.com/andy-goryachev-oracle/jfx/blob/8301121.RichTextArea/doc-files/behavior/RichTextAreaBehavior.md</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span lang="DE" style="font-family:"Iosevka Fixed SS16"">[6] RichTextArea RFE:
</span><span style="font-family:"Iosevka Fixed SS16""><a href="https://bugs.openjdk.org/browse/JDK-8301121" target="_blank"><span lang="DE">https://bugs.openjdk.org/browse/JDK-8301121</span></a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[7] Previous (now obsolete) draft pull request:
<a href="https://urldefense.com/v3/__https:/github.com/openjdk/jfx/pull/1374__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9v4KgU9J$" target="_blank">
https://github.com/openjdk/jfx/pull/1374</a></span><o:p></o:p></p>
<p class="m-3454092310103602811p1"><span style="font-family:"Iosevka Fixed SS16"">[8] Incubator module JEP:
<a href="https://urldefense.com/v3/__https:/github.com/kevinrushforth/jfx/blob/javafx.incubator/INCUBATOR-MODULES.md__;!!ACWV5N9M2RV99hQ!ObEX8HGQdm3Luimk7A9mRrJzS0gFeKC4Ys9K2gFkf9Sy_MN_X0OtuWziJDW3btm8gyihirZMlkJO9pjE-pZ5$" target="_blank">
https://github.com/kevinrushforth/jfx/blob/javafx.incubator/INCUBATOR-MODULES.md</a></span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</body>
</html>