r21661 by jghali - #14445, second round: Arabic single word wrongly justified to the left with "Forced Justified" alignment

scribus-commit scribus-commit at lists.scribus.net
Sat Dec 17 00:05:33 UTC 2016


Author: jghali
Date: Sat Dec 17 00:05:33 2016
New Revision: 21661

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=21661
Log:
#14445, second round: Arabic single word wrongly justified to the left with "Forced Justified" alignment

Modified:
    trunk/Scribus/scribus/pageitem_textframe.cpp

Modified: trunk/Scribus/scribus/pageitem_textframe.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=21661&path=/trunk/Scribus/scribus/pageitem_textframe.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem_textframe.cpp	(original)
+++ trunk/Scribus/scribus/pageitem_textframe.cpp	Sat Dec 17 00:05:33 2016
@@ -809,7 +809,7 @@
 
 		for (int i = 0; i < glyphsCount; ++i)
 		{
-			GlyphCluster glyphCluster = glyphs[i];
+			const GlyphCluster& glyphCluster = glyphs.at(i);
 			if (!glyphCluster.hasFlag(ScLayout_ExpandingSpace))
 			{
 				glyphNatural += glyphCluster.width();
@@ -928,6 +928,25 @@
 				glyphCluster.extraWidth += trackingAmount;
 			}
 
+		}
+
+		if ((style.alignment() == ParagraphStyle::Extended) &&
+			(style.direction() == ParagraphStyle::RTL) &&
+			(!trackingInsertion && (spaceExtension == 0)))
+		{
+			double naturalWidth = line.naturalWidth;
+			if (glyphScale != 1.0)
+			{
+				naturalWidth = 0;
+				for (int i = 0; i < glyphsCount; ++i)
+				{
+					const GlyphCluster& glyphCluster = glyphs.at(i);
+					naturalWidth += glyphCluster.width();
+				}
+			}
+			double offset = line.width - naturalWidth;
+			if (offset > 0)
+				indentLine(style, offset);
 		}
 	}
 
@@ -2528,8 +2547,8 @@
 				if (SpecialChars::isBreak(itemText.text(a), Cols > 1))
 				{
 					// find end of line
-//                    qDebug() << "breakline isBreak @" << i;
-                    current.breakLine(i);
+//					qDebug() << "breakline isBreak @" << i;
+					current.breakLine(i);
 					regionMinY = qMax(0.0, current.line.y - current.line.ascent);
 					regionMaxY = current.line.y + current.line.descent;
 					EndX = current.endOfLine(m_availableRegion, style.rightMargin(), regionMinY, regionMaxY);




More information about the scribus-commit mailing list