r22729 by jghali - svg importer: fix text import issue caused by QPainterPath handling of small font sizes

scribus-commit scribus-commit at lists.scribus.net
Thu Oct 11 21:39:53 UTC 2018


Author: jghali
Date: Thu Oct 11 21:39:53 2018
New Revision: 22729

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22729
Log:
svg importer: fix text import issue caused by QPainterPath handling of small font sizes

Modified:
    trunk/Scribus/scribus/plugins/import/svg/svgplugin.cpp

Modified: trunk/Scribus/scribus/plugins/import/svg/svgplugin.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22729&path=/trunk/Scribus/scribus/plugins/import/svg/svgplugin.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/svg/svgplugin.cpp	(original)
+++ trunk/Scribus/scribus/plugins/import/svg/svgplugin.cpp	Thu Oct 11 21:39:53 2018
@@ -1888,8 +1888,21 @@
 	QString textFillColor   = gc->FillCol;
 	QString textStrokeColor = gc->StrokeCol;
 
+	// Text outline is generated using a big font size
+	// and scaled afterwards. This is done in order to
+	// overcome some QPainterPath issues when using
+	// small font sizes, especially bad glyph advances
+	QFont painterFont = textFont;
+	painterFont.setPointSizeF(100.0);
+	double fontScale = textFont.pointSizeF() / 100.0;
+
 	QPainterPath painterPath;
-	painterPath.addText(startX, startY, textFont, textString);
+	painterPath.addText(0.0, 0.0, painterFont, textString);
+
+	QTransform textTrans;
+	textTrans.translate(startX, startY);
+	textTrans.scale(fontScale, fontScale);
+	painterPath = textTrans.map(painterPath);
 
 	textPath.fromQPainterPath(painterPath);
 	if (!textPath.empty())
@@ -2110,8 +2123,14 @@
 			{
 				SvgStyle *gc   = m_gc.top();
 				QFont textFont = getFontFromStyle(*gc);
+
+				// This is to match the scaling done in
+				// parseTextNode()
+				double fontSize = textFont.pointSizeF();
+				textFont.setPointSizeF(100.0);
+
 				QFontMetrics fm(textFont);
-				width += fm.width(textString);
+				width += fm.width(textString) * (fontSize / 100.0);
 			}
 		}
 	}




More information about the scribus-commit mailing list