r20648 by jghali -

scribus-commit scribus-commit at lists.scribus.net
Thu Dec 31 13:32:26 UTC 2015


Author: jghali
Date: Thu Dec 31 13:32:26 2015
New Revision: 20648

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=20648
Log:
adapt Windows printing to latest changes related to text background

Modified:
    trunk/Scribus/scribus/scpageoutput.cpp

Modified: trunk/Scribus/scribus/scpageoutput.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=20648&path=/trunk/Scribus/scribus/scpageoutput.cpp
==============================================================================
--- trunk/Scribus/scribus/scpageoutput.cpp	(original)
+++ trunk/Scribus/scribus/scpageoutput.cpp	Thu Dec 31 13:32:26 2015
@@ -1656,50 +1656,64 @@
 			wm.scale(1, -1);
 		}
 
-		for (uint ll = 0; ll < item->textLayout.lines(); ++ll)
-		{
-			const LineSpec& ls = item->textLayout.line(ll);
-			const ParagraphStyle& lineStyle = item->itemText.paragraphStyle(ls.firstItem);
-			// This code is for rendering paragraph background color.
-			// We just need to define this attribute for the paragraphs now.
-			if (lineStyle.backgroundColor() != CommonStrings::None)
-			{
+		uint llp = 0;
+		LineSpec ls;
+		while (llp < item->textLayout.lines())
+		{
+			ls = item->textLayout.line(llp++);
+			const ParagraphStyle& LineStyle = item->itemText.paragraphStyle(ls.firstItem);
+			if (LineStyle.backgroundColor() != CommonStrings::None)
+			{
+				ScColorShade colorShade;
+				colorShade.color = m_doc->PageColors[LineStyle.backgroundColor()];
+				colorShade.shade = LineStyle.backgroundShade();
+				double y0 = ls.y;
+				double y2 = ls.y;
+				double ascent = ls.ascent;
+				double descent = ls.descent;
+				double rMarg = LineStyle.rightMargin();
+				double lMarg = ls.colLeft;
+				double adjX = 0;
+				if (LineStyle.firstIndent() <= 0)
+					adjX += LineStyle.leftMargin() + LineStyle.firstIndent();
+				while (llp < item->textLayout.lines())
+				{
+					ls = item->textLayout.line(llp);
+					if ((ls.colLeft > lMarg) || (item->itemText.paragraphStyle(ls.firstItem) != LineStyle))
+					{
+						if (y2 == 0)
+							y2 = y0;
+						break;
+					}
+					if (item->itemText.text(ls.lastItem) == SpecialChars::PARSEP)
+					{
+						y2 = ls.y;
+						descent = ls.descent;
+						if ((llp + 1) < item->textLayout.lines())
+							descent += LineStyle.lineSpacing() - (ls.descent + item->textLayout.line(llp + 1).ascent);
+						llp++;
+						break;
+					}
+					y2 = ls.y;
+					descent = ls.descent;
+					if ((llp + 1) < item->textLayout.lines())
+						descent += LineStyle.lineSpacing() - (ls.descent + item->textLayout.line(llp + 1).ascent);
+					llp++;
+				}
 				painter->save();
+				painter->setupPolygon(&item->PoLine);
+				painter->setClipPath();
 				painter->setFillMode(1);
 				painter->setStrokeMode(0);
-				ScColorShade colorShade(m_doc->PageColors[lineStyle.backgroundColor()], lineStyle.backgroundShade());
 				painter->setBrush(colorShade);
-				double y1 = ls.y;
-				double hl = ls.height;
-				double adjX = 0;
-				if (lineStyle.firstIndent() <= 0)
-					adjX += lineStyle.leftMargin() + lineStyle.firstIndent();
-				if (lineStyle.lineSpacingMode() == ParagraphStyle::BaselineGridLineSpacing)
-					hl = item->doc()->guidesPrefs().valueBaselineGrid;
-				else if (lineStyle.lineSpacingMode() == ParagraphStyle::FixedLineSpacing)
-					hl = lineStyle.lineSpacing();
-				if (ls.isFirstLine)
-				{
-					if (item->textLayout.lines() == 1)
-						hl = ls.ascent + ls.descent;
-					if (lineStyle.hasDropCap())
-						hl *= lineStyle.dropCapLines();
-				}
-				if (lineStyle.lineSpacingMode() == ParagraphStyle::BaselineGridLineSpacing)
-					y1 -= lineStyle.lineSpacing();
-				else if (item->firstLineOffset() == FLOPRealGlyphHeight || item->firstLineOffset() == FLOPFontAscent)
-					y1 -= ls.ascent;
-				else
-					y1 -= ls.ascent + (hl - (ls.ascent + ls.descent)) / 2.0;
-				painter->drawRect(ls.colLeft + adjX, y1, item->columnWidth() - adjX - lineStyle.rightMargin(), hl);
+				painter->drawRect(lMarg + adjX, y0 - ascent, item->columnWidth() - adjX - rMarg, y2 - y0 + descent + ascent);
 				painter->restore();
 			}
-			// end background code
 		}
 
 		for (uint ll=0; ll < item->textLayout.lines(); ++ll)
 		{
-			LineSpec ls = item->textLayout.line(ll);
+			const LineSpec& ls = item->textLayout.line(ll);
 			double CurX = ls.x;
 
 			// Draw text background




More information about the scribus-commit mailing list