<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=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@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;}
@font-face
{font-family:"Segoe UI";
panose-1:2 11 5 2 4 2 4 2 2 3;}
/* 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:#467886;
text-decoration:underline;}
span.EmailStyle19
{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;}
/* List Definitions */
@list l0
{mso-list-id:628248802;
mso-list-template-ids:-2043106788;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7 ;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1
{mso-list-id:1979796443;
mso-list-template-ids:-1006191866;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7 ;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l1:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:"Courier New";
mso-bidi-font-family:"Times New Roman";}
@list l1:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level4
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level5
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level7
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level8
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
@list l1:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7 ;
mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Additional 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" style="mso-margin-bottom-alt:auto;background:white"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">There is a need to extract a few more data points from the text layout in addition to the text lines, specifically:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">bounds of the (selection) range, as rectangles<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">strikethrough range shape (as </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">PathElement[]</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> and/or
rectangles)<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo1;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">underline range shape (as </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">PathElement[]</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> and/or
rectangles)<o:p></o:p></span></li></ul>
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;background:white"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">We currently have </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">Text/TextFlow.underlineShape(int,int)</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">, </span><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">.<b>rangeShape(int,int)</b></span><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328"> which
return </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">PathElement[]</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328"> in an undocumented way.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;background:white"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">There is no corresponding </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">.strikeThroughShape()</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328"> method,
or a way to retrieve the geometric bounds as lines/rectangles.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;background:white"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">Granted, one can attempt to analyze the </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">PathElement[]</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328"> and
convert it to geometry, but it seems we should avoid asking the clients to do that.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-bottom-alt:auto;background:white"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16";color:#1F2328">So the question are:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#1F2328;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo2;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">should we add these data points to LayoutInfo?<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo2;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">if so, in what form? i.e. as individual methods or as an array of Line/Rectangle objects?<o:p></o:p></span></li><li class="MsoNormal" style="color:#1F2328;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo2;background:white">
<span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">should we add the </span><b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">.strikeThroughShape()</span></b><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> to
<b>Text/TextFlow</b>, or simply adding it here should be sufficient?<o:p></o:p></span></li></ul>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Thanks,<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>
<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">Andy Goryachev <andy.goryachev@oracle.com><br>
<b>Date: </b>Tuesday, October 8, 2024 at 11:46<br>
<b>To: </b>openjfx-dev@openjdk.org <openjfx-dev@openjdk.org><br>
<b>Subject: </b>Proposing new API: [Text,TextFlow].getLayoutInfo()<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Dear fellow developers:</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">I'd like to propose a new (missing) API in Text and TextFlow which will extract some information about the current text layout [0], [1].</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">At the moment, it provides information about the text lines (offsets and bounds) plus the overall layout bounds. The internal API provide more information, for example about
individual text runs within each text line, but capturing those will have some overhead, and I am not sure of any use cases right now.</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Are there any thoughts or suggestions as to what other information might be useful for the application developers?</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">Thanks!</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">-andy</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">References</span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">[0]
<a href="https://bugs.openjdk.org/browse/JDK-8341670">https://bugs.openjdk.org/browse/JDK-8341670</a></span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16""> </span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Iosevka Fixed SS16"">[1]
<a href="https://github.com/openjdk/jfx/pull/1596">https://github.com/openjdk/jfx/pull/1596</a></span><span style="font-size:12.0pt"><o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>