<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://git.reviewboard.kde.org/r/101867/">http://git.reviewboard.kde.org/r/101867/</a>
     </td>
    </tr>
   </table>
   <br />


<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.reviewboard.kde.org/media/rb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Calligra and Casper Boemann.</div>
<div>By Sebastian Sauer.</div>


<p style="color: grey;"><i>Updated July 6, 2011, 3:04 p.m.</i></p>



<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Changes</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">added suggestion for an alternate solution</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description  (updated)</h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Attached patch fixes QTextLine-positioning on right-to-left.

During layouting it can happen that line.naturalTextWidth() > line.width. This can be reproduced with the small testapp I wrote and uploaded to http://www.2shared.com/file/AwZJc-uG/testapp.html . There just go to e.g. the 3th line, press the PosEnd-Key (to go to the beginning of the line) and add tons of spaces. Spaces seems to be handled different here cause even with left-to-right they never result in a line-break but are always added to the end (or in the case of right-to-left to the beginning) of the line what can the result in line.naturalTextWidth() > line.width. For reference also have a look at Qt's qtextdocumentlayout.cpp:2616 to the "if (QFixed::fromReal(line.naturalTextWidth()) > right-left)" block.

Now on left-to-right the previous solution (aka before the patch) was and still is fine. In that case the produced QTextLine just cuts such additional spaces off on the right side. No visible harm is done. But on right-to-left the problem is that such spaces are added at the beginning of the line and therefore we cut off visible text at the right side.

The patch fixes the right-to-left case by adjusting the line's position according so we make sure that the spaces at the beginning are cut off rather then text at the end. This is very similar to what Qt does with QTextEdit+QTextDocument (see the aboved linked test app).

NOTE:
An alternate solution would be to just cut off the spaces at the left without changing the line's position but seems that's way more complicated since the spaces added to the beginning somehow are always preserved. Probably cause they are detected as left-to-right rather the right-to-left. To proper handle that we would need to walk backwards once right-to-left text is detected and then change QTextFormat to have the proper layoutDirection.
Maybe that would be an even better solution? But then we would maybe need to do the same on editing...
</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This solves a problem with an arabic right-to-left document I got. Since that document is confidential I am not allowed to create a BKO bug-report for it :-( But at least the author allowed me to use it to investigate the issue to produce this fix :-)
</pre>
  </td>
 </tr>
</table>




<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>libs/textlayout/KoTextLayoutArea.cpp <span style="color: grey">(1308574)</span></li>

 <li>libs/textlayout/KoTextLayoutArea_paint.cpp <span style="color: grey">(cdb42bf)</span></li>

 <li>libs/textlayout/RunAroundHelper.h <span style="color: grey">(e358ff6)</span></li>

 <li>libs/textlayout/RunAroundHelper.cpp <span style="color: grey">(942aaa4)</span></li>

</ul>

<p><a href="http://git.reviewboard.kde.org/r/101867/diff/" style="margin-left: 3em;">View Diff</a></p>




  </td>
 </tr>
</table>




  </div>
 </body>
</html>