Author: jghali
Date: Mon Oct  7 00:07:47 2019
New Revision: 23238

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23238
Log:
#15106: first line indent doesn't support RTL text

Modified:
    trunk/Scribus/scribus/pageitem_textframe.cpp

Modified: trunk/Scribus/scribus/pageitem_textframe.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23238&path=/trunk/Scribus/scribus/pageitem_textframe.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem_textframe.cpp        (original)
+++ trunk/Scribus/scribus/pageitem_textframe.cpp        Mon Oct  7 00:07:47 2019
@@ -378,6 +378,7 @@
        bool     addLeftIndent;
        bool     wasFirstInRow;
        double   leftIndent;
+       double   rightIndent;
        double   rightMargin;
        double   mustLineEnd;
        int      restartIndex;  //index of glyph run where line computing 
should be restarted
@@ -419,6 +420,7 @@
                addLeftIndent = false;
                wasFirstInRow = false;
                leftIndent = 0.0;
+               rightIndent = 0.0;
                rightMargin = 0.0;
                mustLineEnd = false;
                restartIndex = 0;
@@ -478,6 +480,7 @@
                maxShrink = 0.0;
                maxStretch = 0.0;
                leftIndent = 0.0;
+               rightIndent = 0.0;
                rightMargin = 0.0;
                rowDesc = 0.0;
        }
@@ -1365,7 +1368,7 @@
                ITextContext* context = this;
                //TextShaper textShaper(this, itemText, firstInFrame());
                ShapedTextFeed shapedText(&itemText, firstInFrame(), context);
-               
+
                QList<GlyphCluster> glyphClusters; // = textShaper.shape();
                // std::sort(glyphClusters.begin(), glyphClusters.end(), 
logicalGlyphRunComp);
 
@@ -1418,7 +1421,8 @@
                current.lastInRowLine = false;
                current.addLeftIndent = true;
                current.wasFirstInRow = false;
-               current.leftIndent = 0;
+               current.leftIndent = 0.0;
+               current.rightIndent = 0.0;
                current.rightMargin = 0.0;
                current.mustLineEnd = current.colRight;
                current.restartX = 0;
@@ -1797,7 +1801,16 @@
                                        current.leftIndent = style.leftMargin() 
+ autoLeftIndent;
                                        if (itemText.isBlockStart(a))
                                        {
-                                               current.leftIndent += 
style.firstIndent();
+                                               if (style.direction() == 
ParagraphStyle::RTL)
+                                               {
+                                                       //use rightIndent to 
not miss with old behavior
+                                                       current.rightIndent = 
style.firstIndent();
+                                                       // line width should 
consider RTL indent when it breaks the line.
+                                                       current.mustLineEnd = 
current.colRight - style.firstIndent();
+
+                                               }
+                                               else
+                                                       current.leftIndent += 
style.firstIndent();
                                                if (BulNumMode || DropCmode)
                                                {
                                                        if 
(style.parEffectIndent())
@@ -2552,7 +2565,7 @@
                                                
//current.updateLineOffset(itemText, style, firstLineOffset());
                                                //current.xPos = 
current.breakXPos;
                                                EndX = 
current.endOfLine(m_availableRegion, current.rightMargin, regionMinY, 
regionMaxY);
-                                               current.finishLine(EndX);
+                                               current.finishLine(EndX - 
current.rightIndent);
 
                                                hyphWidth = 0.0;
                                                if 
(current.glyphs[currentIndex].hasFlag(ScLayout_HyphenationPossible) || 
itemText.text(a) == SpecialChars::SHYPHEN)


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to